The verify-before-you-trust layer for the agent economy

Connect GSPC to your AI

The Council of AI GSPC board is a standard MCP server, so it already works on every MCP client — and a plain OpenAPI/function tool covers the rest. Add it in about 30 seconds. Your AI can then read the live governance board and verify signed measurement cards on demand.

We measure; we never certify. No conformity mark, no fee, no account. Every number is recomputable from its rows, and an axis with no run behind it stays published as UNMEASURED.

The one check every agent should run first

x402 is the payments rail; ERC-8004 is identity; GSPC is the trust layer underneath them — the independent, signed measurement an agent reads before it decides to trust a model. It is read-only and unauthenticated, so any agent can call it and no one is gated out.

AI governancemodel safetyEU AI Actagent verificationMCP governanceprovenanceEd25519

Seven read-only tools (HTTP server)

  • board_totals— the live slot + measured counts
  • get_axis— one axis row (n, accuracy, interval, status)
  • list_cards— the signed-card index
  • verify_card— recompute a card's Ed25519 signature (three-state)
  • get_root— the public-root merkle head · HTTP only
  • get_card— one signed leaf by id · HTTP only
  • verify_inclusion— prove a leaf is under the root · HTTP only

The stdio npm fallback (csoai-gspc-mcp) currently exposes the four board/card tools; the three public-root tools are on the HTTP endpoint.

MCP-native clients

The server speaks streamable-HTTP at https://councilof.ai/mcp, with a stdio fallback (npx -y csoai-gspc-mcp). Every config below was checked against the client's current docs.

Claude Code

Live now — self-serve

One CLI command. HTTP transport, no auth.

Remote (recommended)
claude mcp add --transport http csoai-gspc https://councilof.ai/mcp
stdio fallback
claude mcp add --transport stdio csoai-gspc -- npx -y csoai-gspc-mcp
Project .mcp.json
{
  "mcpServers": {
    "csoai-gspc": { "type": "http", "url": "https://councilof.ai/mcp" }
  }
}

type "http" is Claude Code's alias for streamable-HTTP; it is required when a url is present.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Claude Desktop

Live now — self-serve

Paid plans: paste the URL in Connectors. Free: use the mcp-remote bridge.

claude_desktop_config.json (bridge)
{
  "mcpServers": {
    "csoai-gspc": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://councilof.ai/mcp"]
    }
  }
}
Pure stdio (no bridge)
{
  "mcpServers": {
    "csoai-gspc": { "command": "npx", "args": ["-y", "csoai-gspc-mcp"] }
  }
}

The JSON config file is stdio-only, so remote needs the mcp-remote bridge. On Pro/Max/Team/Enterprise you can instead add the URL natively under Settings → Connectors → Add custom connector.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Cursor

Live now — self-serve

Drop into ~/.cursor/mcp.json (or project .cursor/mcp.json).

Remote
{
  "mcpServers": {
    "csoai-gspc": { "url": "https://councilof.ai/mcp" }
  }
}
stdio
{
  "mcpServers": {
    "csoai-gspc": { "type": "stdio", "command": "npx", "args": ["-y", "csoai-gspc-mcp"] }
  }
}

Cursor auto-detects streamable-HTTP vs SSE from a bare url; no type field for remote.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Windsurf

Live now — self-serve

~/.codeium/windsurf/mcp_config.json — uses serverUrl.

Remote
{
  "mcpServers": {
    "csoai-gspc": { "serverUrl": "https://councilof.ai/mcp" }
  }
}
stdio
{
  "mcpServers": {
    "csoai-gspc": { "command": "npx", "args": ["-y", "csoai-gspc-mcp"] }
  }
}

serverUrl is Windsurf's canonical remote field (url also works).

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Cline

Live now — self-serve

cline_mcp_settings.json — type is streamableHttp (camelCase).

Remote
{
  "mcpServers": {
    "csoai-gspc": {
      "type": "streamableHttp",
      "url": "https://councilof.ai/mcp",
      "disabled": false,
      "autoApprove": []
    }
  }
}
stdio
{
  "mcpServers": {
    "csoai-gspc": { "command": "npx", "args": ["-y", "csoai-gspc-mcp"], "disabled": false, "autoApprove": [] }
  }
}

The type MUST be "streamableHttp" (camelCase, no hyphen) or Cline falls back to SSE.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Zed

Live now — self-serve

settings.json — key is context_servers (not mcpServers).

Remote
{
  "context_servers": {
    "csoai-gspc": { "url": "https://councilof.ai/mcp" }
  }
}
stdio
{
  "context_servers": {
    "csoai-gspc": { "command": "npx", "args": ["-y", "csoai-gspc-mcp"], "env": {} }
  }
}

Zed uses context_servers, not mcpServers. Native remote via url; OAuth runs only if a server needs auth (ours does not).

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Continue

Live now — self-serve

config.yaml — mcpServers is a YAML list; type is streamable-http (hyphen).

Remote
mcpServers:
  - name: csoai-gspc
    type: streamable-http
    url: https://councilof.ai/mcp
stdio
mcpServers:
  - name: csoai-gspc
    type: stdio
    command: npx
    args:
      - "-y"
      - "csoai-gspc-mcp"

Continue's mcpServers is an array of objects with a name field; remote type is hyphenated streamable-http.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Gemini CLI

Live now — self-serve

~/.gemini/settings.json — uses httpUrl for streamable-HTTP.

Remote
{
  "mcpServers": {
    "councilof": { "httpUrl": "https://councilof.ai/mcp" }
  }
}
stdio
{
  "mcpServers": {
    "councilof": { "command": "npx", "args": ["-y", "csoai-gspc-mcp"] }
  }
}

Gemini CLI: httpUrl = Streamable HTTP, url = SSE. Free / open-source.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

ChatGPT, Gemini, Grok, Perplexity + any tool-calling AI

Where a platform speaks MCP, point it at the server. Where it doesn't, one canonical OpenAPI 3.1 spec (gspc.json) and a set of function-tool definitions cover it — read-only, no key.

ChatGPT — MCP connector

Self-serve · paid tier

Developer mode custom connector. Read-only, so any Plus/Pro user can self-serve.

Steps
Settings → Apps → Advanced → enable Developer mode
→ Create app → paste server URL:
https://councilof.ai/mcp

Requires a paid tier (Plus minimum) with Developer mode on. Our server is read-only, so the Plus/Pro fetch-only limit does not restrict it.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

ChatGPT — Custom GPT Action

Self-serve · paid tier

Import the OpenAPI 3.1 spec as an Action. Auth: None.

In the GPT editor → Actions → Import
Schema URL:
https://councilof.ai/openapi/gspc.json

Authentication: None

OpenAPI 3.1, servers[] + unique operationId are required (both present in our spec). Public GPT-Store listing additionally needs a privacy-policy URL + builder domain verification; a private/link-shared GPT does not.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

OpenAI API

Live now — self-serve

Responses API can call our MCP server directly — no OpenAPI needed.

Responses API tool (server-side MCP)
{
  "type": "mcp",
  "server_label": "councilof",
  "server_url": "https://councilof.ai/mcp",
  "require_approval": "never",
  "allowed_tools": ["board_totals","get_axis","verify_card","list_cards","get_root","get_card","verify_inclusion"]
}
Or a plain function tool
{
  "type": "function",
  "function": {
    "name": "gspc_get_board",
    "description": "Fetch the live Council of AI GSPC board (totals + axes).",
    "parameters": { "type": "object", "properties": {}, "required": [] }
  }
}

For plain function tools your code calls GET https://councilof.ai/api/gspc. Canonical tool defs: /openapi/gspc-function-tools.json.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Google Gemini API

Live now — self-serve

Function declaration; your code calls GET /api/gspc.

Function declaration
{
  "name": "gspc_get_board",
  "description": "Fetch the live GSPC board (totals + axes). Optional axis returns one row.",
  "parameters": {
    "type": "OBJECT",
    "properties": {
      "axis": { "type": "STRING", "description": "Optional axis name, e.g. governance." }
    }
  }
}

Gemini parameters is an OpenAPI-schema subset (strip $ref/oneOf). Canonical decls: /openapi/gspc-function-tools.json (gemini_function_declarations).

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Grok Build (xAI)

Live now — self-serve

Plugin Marketplace + MCP (launched Jun 2026). Auto-reads Claude Code MCP config.

Unverified shape — confirm against the platform's current docs before relying on it.

~/.grok/ mcpServers (mirror Claude Code — UNVERIFIED shape)
{
  "mcpServers": {
    "csoai-gspc": { "type": "http", "url": "https://councilof.ai/mcp" }
  }
}

UNVERIFIED: Grok Build supports MCP and auto-reads Claude Code marketplaces/MCPs, but the exact ~/.grok TOML/JSON key is not shown in docs. The xAI API itself is OpenAI-compatible (function tools), but does not connect to your MCP server-side — use the function-tool path for the API.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Perplexity

Self-serve · paid tier

Custom Remote Connector — pick 'open authentication', paste the URL.

Settings → Connectors → Add custom
Remote MCP URL:  https://councilof.ai/mcp
Authentication:  open authentication (no auth)

Requires Pro/Max/Enterprise + Developer Mode (beta). The developer Agent API can also connect MCP servers; the exact request shape for an external MCP is unverified.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗

Any other tool-calling AI

Live now — self-serve

One canonical OpenAPI 3.1 spec + function-tool defs. Read-only, no key.

OpenAPI 3.1 (for Action-style importers)
https://councilof.ai/openapi/gspc.json
Function-tool defs (OpenAI / xAI / Gemini)
https://councilof.ai/openapi/gspc-function-tools.json
Raw endpoints
GET https://councilof.ai/api/gspc          # live board
GET https://councilof.ai/api/gspc?axis=governance
GET https://councilof.ai/api/cards         # signed-card index

Byte-exact Ed25519 card verification stays client-side (open /gspc-verify) or via the MCP verify_card tool — nothing you check is ever uploaded.

Test it: ask your AI to call board_totals — expect the live board, currently "22 axis · 22 measured".docs ↗
Measured by the Council of AI

links to /gspc-verify · not a conformity mark

Show the badge

If your model or agent is on the board, display the measurement badge. It links to the recomputable record at /gspc-verify — a statement of what was measured on a stated date, never a certification. Grab it from /badge.

Find GSPC in the registries

Listed once, honestly, in each — one entry per registry, no gaming. Completeness and real installs are what move ranking, so every listing documents all seven tools and links to a live verify.

RegistryStatusPathNote
Official MCP Registry
listed
io.github.CSOAI-ORG/gspcLive, v1.1.0, via mcp-publisher. Downstream aggregators ingest from here.
A2A agent directories
staged
/.well-known/agent-card.jsonOur A2A agent card is live; registration by well-known URI.
Smithery
staged
smithery.ai/newSubmit the HTTPS URL; auto-scans tools. Rich tool descriptions raise placement.
mcp.so
staged
mcp.so/submitSubmit the public repo; saving auto-publishes.
awesome-mcp-servers
staged
punkpeye/awesome-mcp-serversOne README line, alphabetical; 🤖🤖🤖 in the PR title fast-tracks the merge.
Glama
staged
glama.ai/mcpClaim via GitHub / glama.json. Search visibility follows the Tool-Definition-Quality score.
PulseMCP
staged
pulsemcp.comIngests the official registry automatically; a submit form also exists.
cursor.directory
staged
cursor.directory/plugins/newReviewed listing; auto-detects via a repo .mcp.json.
Docker MCP Catalog
staged
docker/mcp-registryPR (server.yaml + tools.json + readme.md) with Docker-team review.

"Listed" = live now. "Staged" = the exact submission is prepared and owner-gated (needs a sign-in or a maintainer's review). Being in the official MCP registry means downstream aggregators pick GSPC up on their own.