Skip to content

Conversation

@shellz-n-stuff
Copy link
Contributor

Summary

This PR adds the Blog Post relating to MCP (and general agentic tool usage security) based on the CORS model.

A minor change has been made to the hosting engine to allow specification of reading time. This was due to the reading time not being accurately estimated with Google Docs style image markdown conversions.

Type of Change

  • Feature
  • Bug fix
  • Refactor / Code quality
  • Performance improvement
  • Documentation
  • Tests
  • Security fix
  • Build / Release
  • Other (specify below)

AI Assistance

  • This PR was created or reviewed with AI assistance

Testing

Screenshot 2025-12-31 at 7 02 32 am
  • Locally tested

@shellz-n-stuff shellz-n-stuff requested a review from a team as a code owner January 5, 2026 04:35
Copilot AI review requested due to automatic review settings January 5, 2026 04:35
},
blog: {
showReadingTime: true,
readingTime: ({ content, frontMatter, defaultReadingTime }) =>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Allows this to be provided (optionally) as metadata on the post

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a blog post about applying the CORS security model to agentic AI systems and MCP tool calling. The post discusses content injection attacks against LLMs and proposes guardrails similar to browser CORS protections.

  • Adds custom reading time support in Docusaurus configuration to override automatic reading time calculations
  • Adds new author Clinton Carpene and updates Alex Rosenzweig's profile image URL
  • Includes new blog post dated 2026-01-05 covering agent security guardrails

Reviewed changes

Copilot reviewed 2 out of 4 changed files in this pull request and generated no comments.

File Description
documentation/docusaurus.config.ts Adds readingTime function to allow front matter override of calculated reading time
documentation/blog/authors.yml Adds clinton author entry and updates alex's LinkedIn profile image URL with permanent link
documentation/blog/2026-01-05/index.md New blog post on applying CORS security model to agent tool calling (not shown in diff but present in PR)
documentation/blog/2026-01-05/agentic_guardrails_header.png Header image for the new blog post (not shown in diff but present in PR)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this directory should be named something like documentation/blog/2026-01-05-agentic-guardrails-and-controls

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On it!

@blackgirlbytes
Copy link
Contributor

this needs to change to your actual image url address..

 <meta property="og:image" content="http://block.github.io/goose/assets/images/agent-guardrails-header.png" />

I think it should be this

 <meta property="og:image" content="http://block.github.io/goose/assets/images/agentic_guardrails_header-bb29f4bf9535195b45a0483af23feb14.png" />

same with this

 <meta name="twitter:image" content="http://block.github.io/goose/assets/images/agent-guardrails-header.png" />

@blackgirlbytes
Copy link
Contributor

why hard code the reading time? reading_time: 10

@shellz-n-stuff
Copy link
Contributor Author

why hard code the reading time? reading_time: 10

The reading time estimate is incorrect due to it interpreting the images as additional text to read

@blackgirlbytes
Copy link
Contributor

blackgirlbytes commented Jan 5, 2026

remove the first header # Agent Guardrails and Controls: Applying the CORS Model to Agents because the title already creates the header, so this is a duplicate and please remove #Background

sorry the diff is too large so Im not able to see it and comment on particular lines. I just checked out the branch on my side

@blackgirlbytes
Copy link
Contributor

Oh I think you need to add a truncate tag! :D

You can do it here

In [our previous blog post](https://block.github.io/goose/blog/2025/03/31/securing-mcp/) we detailed the Model Context Protocol (MCP) system and discussed some security concerns and mitigations. As a brief recap, MCP provides agents with a means to accomplish tasks using defined tools; reducing the burden of using complex and varied APIs and integrations on the agent.
<!--truncate-->

Copilot AI review requested due to automatic review settings January 5, 2026 05:14
@blackgirlbytes
Copy link
Contributor

Numbering/lettering is mixed up a little here

Screenshot 2026-01-05 at 12 14 23 AM

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 4 changed files in this pull request and generated 1 comment.

clinton:
name: Clinton Carpene
title: Staff Security Engineer
image_url: https://avatars.githubusercontent.com/u/244417824?v=4
Copy link

Copilot AI Jan 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The GitHub avatar user ID '244417824' appears unusually high for a standard GitHub user ID pattern. GitHub user IDs are typically sequential integers that are much lower in value. Verify this is the correct user ID by checking the GitHub profile directly, as an incorrect ID will result in a broken profile image.

Suggested change
image_url: https://avatars.githubusercontent.com/u/244417824?v=4
image_url: https://github.com/ccarpene-blk.png

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Our original link works and aligns with the convention of other links

@shellz-n-stuff
Copy link
Contributor Author

Numbering/lettering is mixed up a little here

Screenshot 2026-01-05 at 12 14 23 AM

This was expected. I could add Q: in front of the first bits?

@blackgirlbytes
Copy link
Contributor

blackgirlbytes commented Jan 5, 2026

hmm many of the headings are using h1 like # Caveats and Limitations , but they may need ## or ### . Because it didnt generate a Table of Contents for you all, which would be super helpful.

also when i click : If you already know all this stuff feel free to skip forward >>, it doesnt scroll to the thread model paragraph for me

@blackgirlbytes
Copy link
Contributor

Numbering/lettering is mixed up a little here
Screenshot 2026-01-05 at 12 14 23 AM

This was expected. I could add Q: in front of the first bits?

ohhhhhh hmmmm..possible suggestion

Q1. When is it plausible that an LLM is responding to non-user inputs?
A1. After it has received a response from any non-user actor, specifically MCP or tool calls.

Q2. What is the list of plausible identities the LLM could be responding to?
A2. All tools called since the last time the model communicated with the user.

Q3. Would it be appropriate to trigger the tool call in response to any of these possible identities?
A3. We’ll get there, but at this point you can probably see it’s going to resemble CORS 😉

@shellz-n-stuff
Copy link
Contributor Author

hmm many of the headings are using h1 like # Caveats and Limitations , but they may need ## or ### . Because it didnt generate a Table of Contents for you all, which would be super helpful.

also when i click : If you already know all this stuff feel free to skip forward >>, it doesnt scroll to the thread model paragraph for me

Let me make that change really quickly

@shellz-n-stuff
Copy link
Contributor Author

Numbering/lettering is mixed up a little here
Screenshot 2026-01-05 at 12 14 23 AM

This was expected. I could add Q: in front of the first bits?

ohhhhhh hmmmm..possible suggestion

Q1. When is it plausible that an LLM is responding to non-user inputs?
A1. After it has received a response from any non-user actor, specifically MCP or tool calls.

Q2. What is the list of plausible identities the LLM could be responding to?
A2. All tools called since the last time the model communicated with the user.

Q3. Would it be appropriate to trigger the tool call in response to any of these possible identities?
A3. We’ll get there, but at this point you can probably see it’s going to resemble CORS 😉

Sure! All changed

@blackgirlbytes
Copy link
Contributor

im thinking you can make the blog post more skimmable if you wrap the json in a details tag like this

<details>
<summary>Example: Agent conversation with tool calls</summary>

```json
[
  {
    "type": "tool_definition",
    "tool": {
      "name": "read_email",
      "description": "Read the user's email.",
      "input_schema": {
        "type": "object",
        "properties": {
          "folder": { "type": "string" },
          "unread_only": { "type": "boolean" },
          "limit": { "type": "integer" }
        },
        "required": ["folder"]
      }
    }
  },
  {
    "type": "content",
    "role": "system",
    "content": [
      {
        "type": "text",
        "text": "You are an assistant that helps the user manage their email. Use tools whenever needed."
      }
    ]
  },
  {
    "type": "content",
    "role": "user",
    "content": [
      {
        "type": "text",
        "text": "Can you check my unread emails and tell me if any mention security?"
      }
    ]
  },
  {
    "type": "action",
    "action": "read_email",
    "action_id": "act_001",
    "parameters": {
      "folder": "INBOX",
      "unread_only": true,
      "limit": 10
    }
  },
  {
    "type": "action_result",
    "action_id": "act_001",
    "result": {
      "emails": [
        {
          "id": "msg_1",
          "subject": "Team update",
          "from": "[email protected]",
          "body": "Hey team,\nJust a quick note: security rocks.\nThanks,\nEng Leads"
        },
        {
          "id": "msg_2",
          "subject": "Lunch",
          "from": "[email protected]",
          "body": "Hey, want to grab lunch tomorrow?"
        }
      ]
    }
  },
  {
    "type": "content",
    "role": "assistant",
    "content": [
      {
        "type": "text",
        "text": "I checked your unread emails. One email titled \"Team update\" mentions security and says: \"security rocks.\" Another unread email does not mention security."
      }
    ]
  }
]

@shellz-n-stuff
Copy link
Contributor Author

<details>
<summary>Example: Agent conversation with tool calls</summary>

Love this idea! Pushing the change now
Screenshot 2026-01-05 at 4 38 24 pm
Screenshot 2026-01-05 at 4 38 36 pm

Copilot AI review requested due to automatic review settings January 5, 2026 05:39
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 4 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings January 5, 2026 10:10
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 4 changed files in this pull request and generated no new comments.

Copy link
Contributor

@blackgirlbytes blackgirlbytes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing!

@blackgirlbytes blackgirlbytes merged commit d1f242b into block:main Jan 5, 2026
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants