brain-mcp-setup — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited brain-mcp-setup (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
INITE Brain ships a Streamable HTTP MCP endpoint at /mcp. The API key names its tenant; /mcp/<companyId> is the same endpoint pinned to one tenant. This skill walks the user from zero to "tools visible in Claude".
brain_<base64>).https://brain.inite.ai/mcp (or https://brain.inite.ai/mcp/<companyId>, which brain refuses when the companyId is not the key's — useful when one config serves several tenants).@modelcontextprotocol/sdk client.If they don't have a key yet, point them to https://brain.inite.ai/en/app/keys and pause. Brain refuses unsigned MCP calls — there's no anonymous mode.
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"brain": {
"url": "https://brain.inite.ai/mcp",
"transport": "http",
"headers": {
"Authorization": "Bearer <api-key>"
}
}
}
}Restart Claude Desktop. The brain server should appear in the MCP panel — which tools depends on the key's scopes (see the scope matrix below).
Edit .cursor/mcp.json in the user's workspace (or ~/.cursor/mcp.json for global):
{
"mcpServers": {
"brain": {
"url": "https://brain.inite.ai/mcp",
"transport": "http",
"headers": {
"Authorization": "Bearer <api-key>"
}
}
}
}Reload the workspace. Brain tools become available under @brain in the AI panel.
Edit ~/.config/goose/config.yaml:
extensions:
brain:
type: streamable_http
uri: https://brain.inite.ai/mcp
headers:
Authorization: Bearer <api-key>
enabled: true
bundled: falsegoose session start will load brain tools. Goose v2 (released Q1 2026) ships with first-class Streamable HTTP support; if you're on a 1.x Goose, the type field is stdio only and you'll need a stdio shim — upgrade is the cleaner path.
Aider gained MCP support in 0.95. Pass the brain URL on the command line:
aider --mcp brain.inite.ai/mcp \
--mcp-header "Authorization: Bearer <api-key>"Or in ~/.aider.conf.yml:
mcp-servers:
brain:
url: https://brain.inite.ai/mcp
headers:
Authorization: Bearer <api-key>Edit ~/.continue/config.yaml:
mcpServers:
- name: brain
type: streamable-http
url: https://brain.inite.ai/mcp
requestOptions:
headers:
Authorization: Bearer <api-key>Reload the editor. Tools appear in the @ mention list.
Use the MCP Client node in n8n:
https://brain.inite.ai/mcpAuthorization: Bearer <api-key>Pin a credential so it's reusable across workflows.
@modelcontextprotocol/sdk (custom clients)For a Node / TS client that talks Streamable HTTP directly:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://brain.inite.ai/mcp"),
{
requestInit: {
headers: { Authorization: "Bearer <api-key>" },
},
}
);
const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(transport);
const tools = await client.listTools();
const out = await client.callTool({
name: "search_knowledge",
arguments: { query: "hello", limit: 1 },
});The brain server is request-scoped: one McpServer per call, no long-lived session state. Streamable HTTP keeps the client → server connection alive but every tool call is independent.
Once the client is connected, ask it:
List available brain tools and callsearch_knowledgewith query"hello"limit 1.
Expected: a tool list that depends on the key's scopes (see matrix below) and a search_knowledge answer of No facts in memory match this question. on a fresh tenant (a few lines of facts if there's seed data). If the tool call returns a 401 or 403, the API key scope is wrong — check the key's scopes on the keys page of the brain app.
| Scope | Tools unlocked |
|---|---|
brain:read (always) | search: search_knowledge, search_multi_hop, graph_retrieve, synthesize, memory_diff; entity reads: get_entity_profile, get_entity_timeline, summarize_entity, get_competing_facts, detect_contradiction, find_related_entities; procedural: match_procedure, list_procedures; communities: search_communities, list_communities, find_entity_communities; code memory: why, recall_decisions; sources: get_source_reputation; onboarding: workspace_status; relationship_context when its pack is installed; plus get_fact, get_fact_provenance when the server runs with FACTS_API_ENABLED, plus 2 resources (brain://entity/{id}, brain://entity/{id}/timeline) |
brain:write | + record_fact, link_entities, retract_fact, record_feedback, record_procedure, retire_procedure, record_decision, plus ingest_document when the server runs with DOCUMENT_INGEST_ENABLED, plus rename_workspace while the workspace is still unnamed; on a server in harness mode also take_memory_work / submit_memory_work (the connected agent does brain's background model work in batches) |
brain:admin | + forget_entity |
brain:read_pii | unlocks email / phone / dob / address object values in read results (predicate stays visible without it; no new tool surface) |
brain:read_media | media/biometric evidence access (faces, voices, ID documents) — a stricter regime than brain:read_pii, hosting-operator-only (granted via env-key config, never mintable through tokens); no new tool surface |
A key with only brain:read sees only the read tools — that's the security invariant, not a bug. tools/list is the authoritative list for a connection. The connection URL can also pick a tool profile: ?tools=core lists a handful of everyday tools plus find_tool / run_tool to reach the rest, and ?tools=chatgpt lists exactly search and fetch for ChatGPT connectors. Tell the user explicitly when their key is read-only so they don't waste time looking for record_fact / forget_entity. On top of the built-ins, installed Domain Packs with a consented mcpTools section contribute namespaced tools (<packId>__<tool>) behind MCP_PACK_TOOLS_ENABLED.
The detailed taxonomy (which tool for which question) lives in the workflow skills — brain-search, brain-recall, brain-bitemporal, brain-write, brain-conflict.
A server running in harness mode (EXTRACTION_SOURCE=harness) calls no model of its own. It lists take_memory_work and submit_memory_work, and its background reading waits for the connected agent: extraction, fact resolution, entity matching, scene summaries, belief sentences. Until someone drains it, conversations are remembered but not understood. Drain it between tasks:
take_memory_work({ userId }), with the same userId your other calls use, returns one batch: a systemPrompt, userContent, the JSON schema of the reply, and a signed token.submit_memory_work({ token, result }). The server grounds, validates and applies the reply with its own code.take_memory_work returns { work: null }.The Claude Code plugin's start-of-session hook says so when it finds a server in this mode.
| Symptom | Cause | Fix |
|---|---|---|
400: MCP path companyId (...) does not match ApiKey companyId | URL has wrong companyId for this key | Use the companyId shown on the keys page for this key, or drop it and use /mcp |
401: Unauthorized | Key missing, expired, or wrong format | Check the Authorization header is Bearer brain_… exactly; no quotes, no extra spaces |
403: scope brain:write required | The user has brain:read only and tried record_fact | Either elevate the key to brain:write (admin only) or drop the write call |
| Tools list empty | Client never reached brain — check the URL is HTTPS and reachable | Opening https://brain.inite.ai/.well-known/oauth-protected-resource/mcp in a browser should show a JSON document (not a 404 or a DNS error) |
| Cursor / Claude don't see tools after editing config | Client cache | Quit fully (not just close window) and reopen |
Once connected, point the user at the workflow skills:
brain-search — finding facts and entitiesbrain-recall — pulling one entity's full picture (profile + timeline + summarize + competing + related)brain-bitemporal — temporal questions, including the memory_diff "what changed" surfacebrain-write — recording, linking, and retracting (with detect_contradiction preflight)brain-conflict — adjudicating COMPETING facts and 3+ multi-way disagreementsThese describe how to actually use the tools brain exposes, not just how to wire them in.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.