BBriefKit

MCP API

BriefKit exposes an MCP (Model Context Protocol) server so AI clients like Claude, ChatGPT, Cursor, and Codex can read your briefs and generated pack files on your behalf. Callers sign in as you via OAuth; every call runs under your account.

Server URL

https://briefkit.online/mcp

Transport: MCP Streamable HTTP. Auth: OAuth 2.1 (dynamic client registration supported). No API keys — sign-in happens in your browser.

Connect from a client

Claude Desktop / Claude.ai

Settings → Connectors → Add custom connector. Paste the URL above. Claude opens a browser tab; sign in with the same account you use on BriefKit and approve the consent screen.

ChatGPT

Settings → Connectors → Create. Paste the URL above and complete the OAuth flow in the popup.

Cursor / Codex / other MCP clients

Add to your MCP config:

{
  "mcpServers": {
    "briefkit": {
      "url": "https://briefkit.online/mcp"
    }
  }
}

On first call the client opens a browser for OAuth. Tokens are stored by the client.

Tools

list_my_briefs

Returns the signed-in user's briefs (id, project name, template, version, status, paid flag, updated time).

Input

{ "limit": 25 }   // optional, 1–100, defaults to 25

Example prompt

List my BriefKit briefs and show the 5 most recently updated.

Sample response

{
  "briefs": [
    {
      "id": "8f3c...-...-...-...-9ab1",
      "project_name": "Acme Invoicing",
      "template": "b2b-saas",
      "version": 3,
      "status": "ready",
      "is_paid": true,
      "strength_score": 82,
      "updated_at": "2026-07-20T14:12:03Z"
    }
  ]
}

get_brief

Fetch one brief by UUID, including its structured form data (product name, template, features, and every tier answered in the Builder).

Input

{ "briefId": "8f3c1e2a-4b5d-4c8e-9a10-1234567890ab" }

Example prompt

Get the brief with id 8f3c... and summarize the V1 scope in 5 bullets.

Sample response

{
  "brief": {
    "id": "8f3c...",
    "project_name": "Acme Invoicing",
    "template": "b2b-saas",
    "version": 3,
    "status": "ready",
    "is_paid": true,
    "form_data": {
      "productName": "Acme Invoicing",
      "oneLiner": "Recurring invoices for freelancers.",
      "features": [ /* ... */ ],
      "tier1": { /* Must Have */ },
      "tier2": { /* Make it stronger */ },
      "tier3": { /* Advanced */ }
    },
    "created_at": "2026-07-15T09:00:00Z",
    "updated_at": "2026-07-20T14:12:03Z"
  }
}

get_brief_pack

Returns the generated spec-pack files for a brief. Free briefs returnGLOBAL-BRIEF.md and01-landing-page.md with content; the rest come back with locked: true. Paid briefs return every file's full content.

Input

{
  "briefId": "8f3c1e2a-4b5d-4c8e-9a10-1234567890ab",
  "fileName": "GLOBAL-BRIEF.md"   // optional — return just this one file
}

Example prompts

Fetch the pack for brief 8f3c... and paste GLOBAL-BRIEF.md into this chat.

I'm about to build screen 3 of brief 8f3c... — pull 03-*.md and use it as the spec.

Sample response

{
  "isPaid": false,
  "files": [
    { "name": "GLOBAL-BRIEF.md", "locked": false, "content": "# Acme Invoicing\n..." },
    { "name": "01-landing-page.md", "locked": false, "content": "# Landing page\n..." },
    { "name": "02-signup.md", "locked": true },
    { "name": "DATABASE.md", "locked": true }
  ]
}

Authentication

BriefKit is an OAuth 2.1 resource server. On first connect your MCP client registers itself (dynamic client registration), opens a browser to BriefKit's consent screen, and receives an access token scoped to your user. Every tool call includes that token; row-level security means each call only sees your briefs.

You never paste an API key or session token. If a request fails with 401, reconnect the server in your client to refresh the token.

Manual test with curl

The OAuth discovery document tells you where to sign in and get a token.

curl https://briefkit.online/.well-known/oauth-protected-resource

After completing OAuth (easiest via an MCP client), you can call a tool directly:

curl -X POST https://briefkit.online/mcp \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "list_my_briefs", "arguments": { "limit": 5 } }
  }'

Both application/json and text/event-stream are required in the Accept header — the MCP spec rejects requests without them.

Notes & limits