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.
Seven read-only tools (HTTP server)
board_totals— the live slot + measured countsget_axis— one axis row (n, accuracy, interval, status)list_cards— the signed-card indexverify_card— recompute a card's Ed25519 signature (three-state)get_root— the public-root merkle head · HTTP onlyget_card— one signed leaf by id · HTTP onlyverify_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
One CLI command. HTTP transport, no auth.
claude mcp add --transport http csoai-gspc https://councilof.ai/mcpclaude mcp add --transport stdio csoai-gspc -- npx -y csoai-gspc-mcp{
"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.
Claude Desktop
Paid plans: paste the URL in Connectors. Free: use the mcp-remote bridge.
{
"mcpServers": {
"csoai-gspc": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://councilof.ai/mcp"]
}
}
}{
"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.
Cursor
Drop into ~/.cursor/mcp.json (or project .cursor/mcp.json).
{
"mcpServers": {
"csoai-gspc": { "url": "https://councilof.ai/mcp" }
}
}{
"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.
Windsurf
~/.codeium/windsurf/mcp_config.json — uses serverUrl.
{
"mcpServers": {
"csoai-gspc": { "serverUrl": "https://councilof.ai/mcp" }
}
}{
"mcpServers": {
"csoai-gspc": { "command": "npx", "args": ["-y", "csoai-gspc-mcp"] }
}
}serverUrl is Windsurf's canonical remote field (url also works).
Cline
cline_mcp_settings.json — type is streamableHttp (camelCase).
{
"mcpServers": {
"csoai-gspc": {
"type": "streamableHttp",
"url": "https://councilof.ai/mcp",
"disabled": false,
"autoApprove": []
}
}
}{
"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.
Zed
settings.json — key is context_servers (not mcpServers).
{
"context_servers": {
"csoai-gspc": { "url": "https://councilof.ai/mcp" }
}
}{
"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).
Continue
config.yaml — mcpServers is a YAML list; type is streamable-http (hyphen).
mcpServers:
- name: csoai-gspc
type: streamable-http
url: https://councilof.ai/mcpmcpServers:
- 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.
Gemini CLI
~/.gemini/settings.json — uses httpUrl for streamable-HTTP.
{
"mcpServers": {
"councilof": { "httpUrl": "https://councilof.ai/mcp" }
}
}{
"mcpServers": {
"councilof": { "command": "npx", "args": ["-y", "csoai-gspc-mcp"] }
}
}Gemini CLI: httpUrl = Streamable HTTP, url = SSE. Free / open-source.
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
Developer mode custom connector. Read-only, so any Plus/Pro user can self-serve.
Settings → Apps → Advanced → enable Developer mode
→ Create app → paste server URL:
https://councilof.ai/mcpRequires 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.
ChatGPT — Custom GPT Action
Import the OpenAPI 3.1 spec as an Action. Auth: None.
Schema URL:
https://councilof.ai/openapi/gspc.json
Authentication: NoneOpenAPI 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.
OpenAI API
Responses API can call our MCP server directly — no OpenAPI needed.
{
"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"]
}{
"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.
Google Gemini API
Function declaration; your code calls GET /api/gspc.
{
"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).
Grok Build (xAI)
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.
{
"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.
Perplexity
Custom Remote Connector — pick 'open authentication', paste the URL.
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.
Any other tool-calling AI
One canonical OpenAPI 3.1 spec + function-tool defs. Read-only, no key.
https://councilof.ai/openapi/gspc.jsonhttps://councilof.ai/openapi/gspc-function-tools.jsonGET https://councilof.ai/api/gspc # live board
GET https://councilof.ai/api/gspc?axis=governance
GET https://councilof.ai/api/cards # signed-card indexByte-exact Ed25519 card verification stays client-side (open /gspc-verify) or via the MCP verify_card tool — nothing you check is ever uploaded.
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.
| Registry | Status | Path | Note |
|---|---|---|---|
| Official MCP Registry | listed | io.github.CSOAI-ORG/gspc | Live, v1.1.0, via mcp-publisher. Downstream aggregators ingest from here. |
| A2A agent directories | staged | /.well-known/agent-card.json | Our A2A agent card is live; registration by well-known URI. |
| Smithery | staged | smithery.ai/new | Submit the HTTPS URL; auto-scans tools. Rich tool descriptions raise placement. |
| mcp.so | staged | mcp.so/submit | Submit the public repo; saving auto-publishes. |
| awesome-mcp-servers | staged | punkpeye/awesome-mcp-servers | One README line, alphabetical; 🤖🤖🤖 in the PR title fast-tracks the merge. |
| Glama | staged | glama.ai/mcp | Claim via GitHub / glama.json. Search visibility follows the Tool-Definition-Quality score. |
| PulseMCP | staged | pulsemcp.com | Ingests the official registry automatically; a submit form also exists. |
| cursor.directory | staged | cursor.directory/plugins/new | Reviewed listing; auto-detects via a repo .mcp.json. |
| Docker MCP Catalog | staged | docker/mcp-registry | PR (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.