MCP Tools
Context & Resources

add_context

Add a new reference item to your context library, the source material that powers on-brand AI generation. Supply the body as pasted markdown, a one-off URL import, or a tracked live web page, and optionally file it under a collection or project.

Parameters

NameTypeRequiredDefaultDescription
namestringYesDescriptive name for the context item
contentstringNoMarkdown body (creates a `manual` item). Provide exactly one of `content` / `import_url` / `connected_webpage_url`
import_urlstringNoPublic URL imported **once** as a static markdown snapshot (URL not retained, not refreshable). Provide exactly one of the three body inputs
connected_webpage_urlstringNoPublic URL tracked as a live, refreshable `webpage` item (URL stored; dedupes by URL; admin/editor only). Provide exactly one of the three body inputs
collection_idintegerNoCollection ID to organize the item (from `list_context_collections` or `create_context_collection`). **Omit it — or pass `0` — to file the item at the top level of the Reference Library**
project_idstringNoProject ID to associate with (from `list_projects`). Omit it to leave the item unassociated

Input Schema

{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Descriptive name for the context item"
    },
    "content": {
      "type": "string",
      "description": "Markdown body (creates a manual item). Provide exactly one of content, import_url, or connected_webpage_url."
    },
    "import_url": {
      "type": "string",
      "description": "Give a public URL to import once. The backend fetches the page, converts it to clean markdown, and stores that as a static snapshot (the URL isn't kept and the item isn't refreshable). Importing is asynchronous: the call returns immediately with the new item's `id` and `import_status: \"processing\"`, and the content finishes loading a moment later. Check on it with `get_context_item` — the content appears and `import_status` flips to `\"ready\"`. Because the call returns right away, you can import many URLs back-to-back without anything timing out. If an item is still missing a minute or two later, the fetch didn't succeed — check the URL and try again. Provide exactly one of the three body inputs."
    },
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Project ID to associate with (from list_projects). Omit it to leave the item unassociated."
    },
    "collection_id": {
      "type": "integer",
      "description": "Collection ID to organize the item (from list_context_collections or create_context_collection). Omit it — or pass 0 — to file the item at the top level of the Reference Library."
    },
    "connected_webpage_url": {
      "type": "string",
      "description": "Public URL tracked as a live, refreshable webpage item (URL stored; dedupes by URL; admin/editor only). Provide exactly one of the three body inputs."
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "Context item ID"
    },
    "name": {
      "type": "string",
      "description": "Context item name"
    },
    "content": {
      "type": "string",
      "description": "The stored reference content. For imported items, `content` is empty in the immediate response — fetch the item with `get_context_item` to read the full body."
    },
    "link_url": {
      "type": "string",
      "format": "uri",
      "description": "Direct URL to view this context item in the Marcora app"
    },
    "created_at": {
      "type": "integer",
      "description": "Unix timestamp of creation"
    },
    "project_id": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "description": "Project association (null if none)"
    },
    "word_count": {
      "type": "integer",
      "description": "Word count of content"
    },
    "content_type": {
      "type": "string",
      "description": "manual (from content / import_url) or webpage (from connected_webpage_url)"
    },
    "collection_id": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Collection this item belongs to (null if none)"
    },
    "import_status": {
      "type": "string",
      "description": "For import_url items, the load state: `\"processing\"` immediately after the call, `\"ready\"` once the content has finished loading. Empty for pasted content and web pages."
    }
  }
}

Instructions

Use this tool to add a new context item to your reference library.

Workflow:

  1. Provide a descriptive name.
  2. Provide exactly one body source: content (markdown directly), import_url (a public URL imported once as a static snapshot), or connected_webpage_url (a public URL tracked as a live, refreshable web page). connected_webpage_url requires admin or editor role.
  3. Optionally assign to a collection by passing collection_id. Use list_context_collections to see existing collections and their IDs, or use create_context_collection to create a new one and get its ID. Omit it — or pass 0 — to file the item at the top level of the Reference Library.
  4. Optionally associate with a project by passing project_id. Use list_projects to see available projects and their IDs. Omit it to leave the item unassociated.

Filing an item in the Reference Library: omitting collection_id — or passing 0 — files the item at the top level of the Reference Library, where it's returned by list_context_items, fetchable via get_context_item, and eligible for semantic search. This is the normal path for team-wide reference material.

Unlike update_context, this tool's collection_id is typed as a bare integer in the input schema, so a strict MCP client cannot send a literal null here. You don't need one: collection_id is optional on add_context, so simply omitting it is the idiomatic way to file at the top level. (The server treats an explicit null the same as omitted/0, but only clients that don't validate against the schema can send it.)

Use context items for: brand voice guidelines, company facts, product descriptions, audience personas, competitive intelligence.

Errors

  • 400 — exactly one of content, import_url, or connected_webpage_url is required (none, or more than one, was supplied)
  • 400connected_webpage_url could not be fetched or parsed (check the URL is publicly reachable)
  • 403connected_webpage_url requires admin or editor role

Example prompts

  • "Add our brand guidelines to Marcora"
  • "Store this competitive analysis as context"
  • "Import https://example.com/competitor-pricing as a one-off snapshot called 'Acme pricing'"
  • "Track our pricing page (https://example.com/pricing) as a web page so I can refresh it later"
  • "Add this product brief to the 'Product Launch' collection"

Examples

Add competitor research to a project

Store competitor analysis as context tied to a specific project, so content generated for that project can reference competitive positioning.

Input
{
  "name": "Q2 Competitor Analysis — Acme Corp",
  "content": "Acme Corp launched a freemium tier in March. Their messaging focuses on speed and simplicity. Key weakness: no enterprise SSO support.",
  "project_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
Output
{
  "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  "name": "Q2 Competitor Analysis — Acme Corp",
  "content": "Acme Corp launched a freemium tier in March...",
  "word_count": 27,
  "project_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "created_at": 1712678400
}
Scroll to Top