Docs

Pointing an agent here

/skill.md is a public Anthropic-format skill that teaches any agent how to connect and read a brain. Copy + paste into your favourite agent:

https://curtex.ai/skill.md

Adding Curtex as an MCP server

For AI clients - Claude, ChatGPT, Cursor, Codex and the rest. The address is the whole setup: the client discovers the rest for itself, sends you here to sign in, and then reads exactly what you can read, as you.

https://curtex.ai/mcp

The /mcp matters. A client pointed at https://curtex.ai on its own will sign you in and then fail every call, because there is nothing at the root to answer it.

Claude

  1. Settings → Connectors → Add Connector
  2. Set the URL to https://curtex.ai/mcp
  3. Add, then allow the brain on the Curtex consent screen

On Team and Enterprise plans an Owner has to add it first, under Organization settings → Connectors.

ChatGPT

  1. In the desktop app: Settings → Plugins → Developer mode, on
  2. Still in Settings → Plugins: Add → Create plugin, then set the URL to https://curtex.ai/mcp

Desktop app only - not the web, and not the Plugins page in the main window. Needs a paid plan, and on Business or Enterprise an admin has to allow custom connectors first, under Workspace settings → Permissions & roles.

Cursor

  1. Settings → Customise → MCP → Add
  2. Set the URL to https://curtex.ai/mcp

Codex

  1. codex mcp add curtex --url https://curtex.ai/mcp
  2. codex mcp login curtex

The second command opens the sign-in in your browser.

Claude Code

  1. claude mcp add --transport http curtex https://curtex.ai/mcp

Then /mcp in a session to sign in.

REST API

Base URL
https://curtex.ai/v1
Auth
Authorization: Bearer ctx_… - one key per account, created by an owner or admin in Account settings → Integrations. Shown once. The key reads as whoever minted it, and stops working if they leave the account.
Switches
The account must allow incoming connections and API connections; any workspace can still keep its own brain out. Closed doors answer 403, not silence.
Workspaces
Stateless: pass workspace per call. There is nothing to switch and no session to hold it.

Endpoints

  • GET /v1 = MCP initialize

    This list, as JSON.

    Discovery. Costs nothing and needs only a valid key.

  • GET /v1/workspaces = MCP list_brains

    Every workspace this key can read, with a document count each.

    Start here. A workspace missing from this list is either not billed by your account, not visible to the person who minted the key, or has switched off outside access in its own settings.

  • GET /v1/documents = MCP list_documents

    One workspace’s brain: path, title and one-line summary per document.

    Bodies are not included. Read the few documents that bear on the task.

    workspace (when the key reaches more than one) - A name from /v1/workspaces. Omit it only when there is exactly one - with several you get a 400 naming them, because silently picking one is how a job reads the wrong team’s brain.

  • GET /v1/documents/{path} = MCP read_document

    One document’s full markdown.

    Returns raw text/markdown, not JSON - the body IS the payload. Readable is the key’s whole reach, not just the workspace you last listed, so a path from any listing opens. Anything outside that reach is a 404: this door does not confirm what it is not serving.

    path (yes) - A path from the listing, e.g. acme/brain/pricing.md.

Example

export CURTEX_KEY=ctx_…

# what can this key see?
curl -H "Authorization: Bearer $CURTEX_KEY" https://curtex.ai/v1/workspaces

# the acme brain's manifest
curl -H "Authorization: Bearer $CURTEX_KEY" \
  "https://curtex.ai/v1/documents?workspace=acme"

# one document, as markdown
curl -H "Authorization: Bearer $CURTEX_KEY" \
  https://curtex.ai/v1/documents/acme/brain/pricing.md

Errors

  • 401 - no key, or a dead one.
  • 403 - the account has API connections switched off.
  • 404 - no such workspace or document, or it is outside this key's reach. The two are not distinguished on purpose.
  • 400 - a listing needs workspace and did not get one.