KNET Brain
Log in

Connector documentation

KNET Brain over MCP

KNET Brain is a knowledge base an LLM maintains for you: one page per concept, with [[slug]] links between them stored as real graph edges rather than text. It attaches to whichever MCP client you already use, and every act of judgement — what to read, what the pages should say, how to resolve a contradiction — is done by your client. This server stores, links, searches and renders.

Connecting

Add it as a custom connector. In Claude: Settings → Connectors → Add custom connector, and give it this URL.

https://brain.knet.ai/mcp

The client discovers the authorization server, registers itself, and shows a consent screen. Authentication is OAuth 2.1 with PKCE; the server issues its own tokens and every tool call runs under the row-level security policy for the account that authorized it, so an agent can only ever reach that account’s own pages.

Connect through this hostname and no other. The OAuth issuer is a fixed value, so a client that reaches the server on a different hostname is handed an issuer that does not match the host it asked, and a strict client is entitled to refuse.

Transport is streamable HTTP over a single POST endpoint. There is no SSE stream and no session header — every request carries its own bearer token.

Three things to try

Each needs nothing but the connector and an account. Paste one into your client after connecting.

Ask what the brain knows

read

Read-only. On an empty brain it should say plainly that it has nothing, rather than answering from the model's own memory.

Search my KNET Brain for anything about onboarding, then tell me what it found and cite the page slugs. If the brain has nothing on it, say so rather than answering from your own knowledge.

Calls: search, get_node

Write a page and link it

write

A single write. The double-bracketed name becomes a real graph edge, and because no page called jane-doe exists yet it becomes a stub — which is the whole data model in one call.

Create a page in my KNET Brain called "acme-corp" describing Acme Corp as a customer evaluating our product, and mention [[jane-doe]] as their technical lead in the prose.

Calls: upsert_node, get_node

Fold a document in, end to end

write

The full ingest loop across several calls: store the raw material, find what it affects, write the pages, then close the source out and check the graph for loose ends.

Take the text I'm about to paste, submit it to my KNET Brain as a source, work out which pages it affects, write or update those pages with provenance, mark the source compiled, then run lint and find_gaps and fix anything they surface.

Calls: submit_source, compile_source, upsert_node, mark_source_compiled, lint, find_gaps

The tools (38)

Reading

Never change anything. An agent may call these without asking, and your client will normally let it.

searchFind pages by keyword and meaning. Returns slug, title and summary - call get_node for the full prose.
get_nodeFetch one page by slug, with its links in both directions.
backlinksPages that reference this one, with the relation, its origin, and for an inline edge the sentence it came from.
neighborsTraverse outward from a page up to N hops, optionally filtered by relation type.
get_historyThis page's stored revision history, newest first - not literally every prior version: a burst of writes by one actor within ~10 minutes is folded into one revision, and old revisions thin out over time (see the note in the response).
list_sourcesThe source layer's contents: what is in, when it arrived, whether it has been written up yet, and how many pages cite it.
compile_sourceReturns the raw text plus the existing pages it most likely affects, so you can decide what to create or update.
list_relation_typesEvery relation name this brain uses, how often, and what it means.
list_runsPast ingest runs, newest first: what each one examined, what it concluded, and what it changed.
get_runA run report plus the individual writes it summarises, so you can drill from the prose into what actually changed - and from there into a page's history for the before and after.
lintReport stubs ranked by how often they are referenced, orphans, unresolved contradictions, unsourced claims, stale pages and likely duplicates.
find_gapsSurfaces two things the wiki is missing.
get_indexEvery page grouped by type. The generated equivalent of index.md.
list_feature_requestsThe roadmap: what has been asked for, its status, and how many votes it has.
get_feature_requestFull detail for one request, plus the requests most similar to it - so a near-duplicate is visible before you act rather than after.
render_markdownRender a page, or the whole brain, as Obsidian-flavoured markdown with YAML properties and [[wikilinks]].
export_vaultThe portability guarantee, in usable form: every page as its own markdown file at a real path, plus index.md and a README, ready to open as an Obsidian vault.
get_logThe append-only operation log: what changed in this brain, when, on whose say-so and from what source.
get_skill_bundleReturn one of this brain's skill bundles as plain text - its SKILL.md - so the user can install it by hand with nothing downloaded.
diagnoseCheck this brain's health and say what, if anything, is wrong.
traceAnswer "did my Q3 report get in?", "did the brain index the deck I sent Tuesday?" - whether one named thing reached this brain, whether a page was written from it, and whether those pages are searchable yet.

Writing

Change the brain. Marked destructive where a call may overwrite or remove existing content, which is the distinction your client uses when it asks you to approve one.

upsert_nodeCreate or update one entity page. Write [[slug]] inline in the body wherever you mention another concept - those become real graph edges on save, and linking to a page that does not exist yet creates a stub recording the gap.
linkAssert a relationship prose cannot express: supersedes, contradicts, derived_from, part_of, instance_of.
unlinkdestructiveDelete an explicit edge. Inline [[links]] are removed by editing the body.
merge_nodesdestructiveMerge a duplicate page into the one that should survive.
revert_nodedestructiveRestore a page to an earlier revision. The prose comes back and the [[links]] in it are re-reconciled, so the graph follows.
submit_sourcePut raw material into the immutable source layer.
attach_sourceBind a source to a page it supports, with the excerpt backing the claim.
mark_source_compiledMark a source as written up so it leaves the pending queue.
report_runClose out an ingest run with a short account of what you did.
shareTurn something from this brain - a meeting brief, a discovery, or an answer you just gave - into a card the person can send to a colleague or contact, ending in an invitation to get a brain of their own.
record_prepClose out a morning meeting-prep run: send each brief you wrote, for the owner's daily email.
submit_feature_requestFile a request against this platform itself - not a page in the wiki.
update_feature_requestFix or expand a request: title, description, use_case, category.
upvote_feature_requestSay you want this too - one vote per person, and voting again is a no-op.
remove_feature_request_votedestructiveRemove your vote. A no-op if you had not voted.
adjudicate_feature_requestAdmin only. Set status, priority and the public response on a request.
setup_guideWalk the user through connecting this brain and putting its ingest habits on a schedule.

Getting your data out

The export_vault tool, or /api/export/vault in a browser, returns the whole brain as a zip of plain markdown — one file per page, plus an index. Unzip it, open the folder in Obsidian, and every [[wikilink]] resolves. Nothing in there needs this application in order to be read.

Keeping it current

The connector is most useful when something writes to it without being asked. There are five downloadable skill bundles, and three of them run on a schedule — one sweeps a mailbox, one sweeps call and meeting transcripts, and one briefs the day’s meetings each morning for the daily email. None names a provider: each finds whichever mail server, transcript source or calendar you actually have connected, rather than assuming Outlook or Fireflies or anything else.

Download them directly — knet-brain-capture-email.zip and knet-brain-capture-transcripts.zip — or, if you are signed in, get a runbook with your own values already filled in at /app/setup. If you installed knet-brain-capture before the rename, delete it: it is now knet-brain-capture-chat, and keeping both leaves two skills competing for the same trigger.

Installing one is a step only you can take. A skill has to be registered with the client before it fires, and an agent that downloads a bundle into a working folder has registered nothing. In Claude, add it under Settings → Capabilities, where skills are listed, and upload the zip as it is — on a Team or Enterprise plan an owner can add it once for everyone. In Claude Code, unzip it into ~/.claude/skills/. In any other client, put SKILL.md wherever it keeps standing instructions. If a zip is inconvenient, a connected agent can call get_skill_bundle and hand you the same files as text.

The pattern behind them is not secret, either: point any client that can run on a schedule at this connector, tell it to read yesterday’s material and write it up, and give it a stable identifier per item so re-runs update rather than duplicate. The submit_source tool keys on that identifier for exactly this reason.