All servers · Research & knowledge
org.brainkb/brainkb
org.brainkb/brainkb · v0.1.0
Tools changed (7 days)No registry update 90+ days
Measured by MCP Station
| Last check | Reachable |
|---|---|
| Checked at | — |
| Check success 7 / 30 days | — |
| First-try success 30 days | — |
| Median response | — |
| Lookups 30 days | — |
| Authentication | No auth |
| MCP version | 2025-06-18 |
| Rank score | — |
| Declared risk | Not declared (tools carry no read/destructive hints) |
| Capabilities declared | experimental, prompts, resources, tools |
| Tool definitions | 72 tools · with description 100% · input schema is an object 100% · read/destructive hints 0% |
Description written by the publisher, not verified
MCP server for querying BrainKB, a knowledge base for neuroscience knowledge graphs.
Connect
streamable-http · https://mcp.brainkb.org/mcp
claude mcp add --transport http brainkb https://mcp.brainkb.org/mcp{
"mcpServers": {
"brainkb": {
"url": "https://mcp.brainkb.org/mcp"
}
}
}Tools as reported by the server
brainkb_loginAuthenticate to BrainKB with the user's credentials and cache the JWT for THIS session only (isolated per caller). The password/token are never echoed. Uses single sign-on: one login mints a refresh token, cached for THIS session, which is exchanged on demand for per-service access tokens (query_serbrainkb_globus_loginStart an OAuth login (Globus / ORCID / GitHub) for THIS session — use this instead of brainkb_login when the user signs in with Globus rather than a password. Returns a URL to open in a browser; after signing in, the page shows a short one-time code — pass it to brainkb_finish_login(code) to completbrainkb_finish_loginComplete an OAuth login started with brainkb_globus_login by exchanging the one-time code shown in the browser for a session token. The code is single-use and never echoed back.brainkb_logoutForget the cached token for this session.brainkb_whoamiReport the current caller's auth state (email, authenticated, and when the cached session expires). When signed in it also returns base_url — the backend THIS SERVER talks to, which on a hosted deployment is an internal address and says nothing about the caller's own machine.brainkb_create_tokenGenerate a Personal Access Token (PAT) for browser-free auth. Requires you to be logged in already (brainkb_login or brainkb_globus_login). The token is shown ONCE and never again — copy it and set it as BRAINKB_TOKEN in your MCP/skill config; then no login or browser is needed until it expires. `nabrainkb_list_tokensList your Personal Access Tokens (metadata only — the secret is never shown): id, name, prefix, created/last-used/expiry, and whether each is active/revoked/expired. Use the id with brainkb_revoke_token.brainkb_revoke_tokenRevoke one of your Personal Access Tokens by id (see brainkb_list_tokens). Takes effect immediately — the next call using that token fails.brainkb_use_tokenUse a Personal Access Token (brainkb_pat_...) for THIS session — an alternative to setting BRAINKB_TOKEN in the config. Validates the token, then caches it so subsequent calls authenticate with it. The token is never echoed.brainkb_list_spacesList spaces the user can see (their own/member spaces + public ones), each annotated with THIS caller's permission so you know what they may do: - your_role: 'owner' | 'editor' | 'viewer' | null (their space membership, including a role inherited from a parent space) - role_inherited: the role comesbrainkb_create_spaceCreate a workspace/space, or a subspace inside one. The caller becomes owner. slug: lowercase/hyphen id, **globally unique** — if it's already taken the call returns 409 (pick another slug). visibility: 'private' or 'public' (set per space: a private space may hold a public subspace); description: sbrainkb_get_spaceA space's details: graphs, members (direct, plus `inherited_members` with the parent space each comes from), visibility, `parent_slug`, `ancestors` (root first) and direct `subspaces` — only the ones the caller may see — and the caller's `your_role` / `role_inherited`. Public spaces need no login; mbrainkb_space_treeA space and every subspace below it (any depth), nested: each node has slug, name, visibility, the caller's role and whether it's inherited from a parent, and its graph count. Only subspaces the caller may see are included.brainkb_set_space_visibilitySet a space 'public' (anyone, even anonymous, can read) or 'private' (members only). Owner only. Everything in a public space is public: making a space public also makes all its subspaces public, and a subspace of a public space cannot be made private (409). Under a private space each subspace can bbrainkb_update_spaceRename a space, change its description, and/or give it a new slug. Owner/manager only. Pass only what changes; description="" clears it. `new_slug` (lowercase letters, digits and hyphens, 3-64 chars) moves the space's IRI and every graph whose IRI is built from the old slug (https://brainkb.org/grapbrainkb_delete_spacePERMANENTLY delete a space and everything in it. SuperAdmin only; irreversible. Drops the space's named graphs and the ingestion-history (delta) graphs that hold copies of their data, removes the graphs' registry entries and the space's RDF manifest, and deletes the space with its members, access rubrainkb_add_space_memberAdd/update a space member. role: 'owner' | 'editor' | 'viewer'. Owner only.brainkb_add_space_graphRegister a named graph and bind it to a space, so ingest/read on that graph are governed by the space's membership and visibility. Owner/editor only. The named_graph_iri is **globally unique** — one graph belongs to exactly one space. If it's already registered (to any space) the call returns 409; gbrainkb_ingest_textIngest raw RDF text (Turtle / N-Triples / JSON-LD, auto-detected) into a named graph. Returns a job_id; ingestion runs in the background — poll with brainkb_job_status. The graph must be registered (see brainkb_add_space_graph) and the caller must have write access to its space. `sha256` / `expectedbrainkb_list_uploadsList RDF files YOU have staged with POST /upload but not yet ingested. Shows each upload_id, its size, sha256 and when it expires. Only your own uploads are visible.brainkb_upload_statusState of one of your staged/submitted uploads. `state` is `staged` (waiting for brainkb_ingest_upload), `submitting` (the server is streaming it to the ingest API), `submitted` (accepted — `job_id` is set, poll brainkb_job_status) or `failed` (the staged bytes were KEPT, so retry with brainkb_ingestbrainkb_discard_uploadDelete one of your staged uploads without ingesting it.brainkb_ingest_uploadIngest a file you staged with `POST /upload` into a named graph. This is the route for a large local file: your HTTP client streams the bytes straight to this server over HTTPS, then you name the resulting upload_id here. The server reads its own staged copy and posts it to the ingest API internallybrainkb_ingest_filesIngest local RDF files (ttl/nt/nq/rdf/owl/jsonld/json) into a named graph. Returns a job_id; runs in the background — poll with brainkb_job_status.brainkb_synthscholar_ingestIngest a SynthScholar review — the output directory of a run (the folder holding review.json and review.ttl, as the synthscholar skill writes it) — into a space you may write to (see brainkb_list_writable_spaces; you need to be its owner or an editor). A review is unique per space: the same run canbrainkb_synthscholar_list_reviewsIngested SynthScholar reviews you can read (public spaces: anyone): id, title, research question, space, graph, included count, when ingested, ingest job. `q` filters on text in the title or research question.brainkb_synthscholar_studiesThe included studies of an ingested review, filtered. `q`: text in title, authors, journal, DOI, PMID or keywords. `full_text`: true = read in full, false = abstract only. `source`: full-text route (europe_pmc, unpaywall, ezproxy, arxiv, …). `rob`: risk-of-bias rating (low, high, some concerns). Yeabrainkb_synthscholar_screeningThe screening audit trail of an ingested review: every decision with its stage (title_abstract | full_text), decision (include | exclude), what it was judged on (title_abstract | full_text | abstract_only), the full-text route and the reason. Filter by any of those, by text or criterion code in thebrainkb_synthscholar_evidenceEvidence spans of an ingested review: the quoted text its claims rest on, with the study, section, relevance, and whether the quote was matched verbatim in the source (`grounded`). Filter by text, claim type, PMID or grounding.brainkb_synthscholar_recordsPer-study records an ingested review produced. `kind`: `charting` (the data-charting form's answers per study), `appraisal` (critical appraisal by domain) or `narrative` (narrative synthesis rows: design, methods, outcomes, limitations). `q`: text in the answers (e.g. "neo4j" finds the studies thatbrainkb_synthscholar_textAn ingested review's own text: `abstract`, `introduction`, `synthesis`, `bias`, `limitations`, `conclusions`, `research_question`, `search_queries` or `per_group` (the per-group analysis) — or all of them when `section` is empty.brainkb_synthscholar_find_studyWhich ingested reviews (that you can read) include or screened a study — by DOI, PMID or part of its title (6+ characters) — and what happened to it in each: included (read in full or from the abstract) or each screening decision with its reason.brainkb_synthscholar_get_reviewOne ingested review: summary, its graph and space, the files kept (path, kind, media type, size, sha256), the run's search log and verification, the screening basis and full-text retrieval. Long texts and the per-study list are left out here — read them from the graph or the review page.brainkb_list_jobsList the user's ingest jobs (newest first) with status and progress.brainkb_job_statusDetailed status of one ingest job: status, progress %, current file/stage, per-file failures, and (when complete) a summary.brainkb_recover_jobAttempt to recover a stuck/errored ingest job (marks it recoverable/errored).brainkb_searchFull-text search over the knowledge graphs, access-filtered by space visibility. Pass `space` to scope to one workspace, omit for a full search. No login needed: an unauthenticated caller searches public spaces only. Anonymous/other users never see private-space data.brainkb_read_spaceRead all RDF (JSON-LD) in a space's graphs. Public spaces are readable by anyone without logging in (read-only); private spaces require login and membership. Don't ask the user to log in just to read a public space.brainkb_list_writable_spacesSpaces the caller can ingest into, each with its graphs (and descriptions) and `parent_slug` for subspaces — decided by the same checks ingestion uses: owner/ editor membership (including a role inherited from a parent space), a space write access rule, or Admin/SuperAdmin. `can_ingest` false meansbrainkb_list_registered_graphsList registered named graphs visible to the caller (private-space graphs the caller can't access are hidden).brainkb_sparqlRun an arbitrary SPARQL query. Requires an Admin/SuperAdmin role (the sparql_admin capability) — for ordinary questions prefer brainkb_search, brainkb_read_space, or the provenance/delta tools, which need no admin role. Large results come back a page at a time. A SELECT without its own LIMIT/OFFSETbrainkb_qa_listFind a canned question BrainKB can answer, then run it with brainkb_qa_run. Prefer these over writing SPARQL: they are vetted against BrainKB's actual vocabulary. Discovery is two steps, so you never read every query at once: 1. brainkb_qa_list() -> the menu: each category's name, a description of tbrainkb_qa_runRun a canned question from brainkb_qa_list by id. `params` maps parameter names to values; they are validated and escaped, never spliced in raw. Runs through the same SPARQL endpoint as brainkb_sparql, so it needs the same role. Results page the same way: a query without its own LIMIT returns `limitbrainkb_provenance_jobPROV-O provenance bundle (JSON-LD) for one ingest job.brainkb_provenance_graphPROV-O ingestion/activity history (JSON-LD) for a named graph.brainkb_deltaThe exact triples a job added (its delta), as JSON-LD.brainkb_delta_historyA named graph's change history: one entry per ingest delta (job, triple count, timestamp), newest first.brainkb_delta_compareCompare two jobs' deltas: A-only / B-only / shared triple counts + triples.brainkb_capabilities(Admin only) Show a user's roles, effective capabilities, and delegated grants. Useful to check why someone can/can't create team spaces, ingest, etc.brainkb_grant_capability(Admin only) Delegate a capability to a user — e.g. 'create_team_space' or 'manage_team_space' so a Curator/Lab Member can create/manage team spaces. Grantable: create_private_space, create_team_space, manage_team_space, ingest, recover, read_private (NOT the admin-only 'grant'/'sparql_admin').brainkb_revoke_capability(Admin only) Revoke a previously granted capability from a user.brainkb_list_capabilities(Admin only) Catalog of all KG capabilities, which are delegatable ('grantable'), which are admin-only, and a description of each. Use this to see the available permission options before granting to a user or group/role.brainkb_role_capabilities(Admin only) List the capabilities granted to a role/group (e.g. 'uk_collaborator', 'Lab Member').brainkb_grant_role_capability(Admin only) Grant a capability to a whole role/group so EVERY member gets it — e.g. give a custom group 'uk_collaborator' the 'ingest' or 'create_private_space' capability. Grantable: create_private_space, create_team_space, manage_team_space, ingest, recover, read_private (NOT the admin-only 'granbrainkb_revoke_role_capability(Admin only) Revoke a capability from a role/group.brainkb_list_access_rulesList a space's fine-grained access rules (member/manager of the space).brainkb_add_access_rule(Space manager) Restrict a space action to a subject. action: 'read' | 'write' | 'manage'. subject_type: 'global_role' (e.g. 'Admin','Lab Member') | 'member' (an email) | 'space_role' ('viewer'|'editor'|'owner', matched as >=). When rules exist for an action, only matching callers may perform it; thbrainkb_remove_access_rule(Space manager) Delete a fine-grained access rule by its id (see brainkb_list_access_rules).brainkb_list_reserved_graphs(Admin/SuperAdmin) List reserved named graphs: graph IRIs, or every IRI under a prefix, that only an Admin/SuperAdmin — or, when reserved for a space, that space's managers/editors — may register or bind. Includes the built-in system reservations (BrainKB's metadata and provenance graphs), which nobbrainkb_reserve_graph(Admin/SuperAdmin) Reserve a named graph so other users can't create it. match_type 'exact' reserves one graph IRI; 'prefix' reserves every IRI starting with it (e.g. 'https://brainkb.org/graph/allen/'). Give a `reason` — it is shown to anyone who is refused. Optional `space_slug` reserves it for thbrainkb_unreserve_graph(Admin/SuperAdmin) Remove a reservation by its id (see brainkb_list_reserved_graphs). System reservations cannot be removed.brainkb_list_users(Admin) List users (profiles) — filter by `q` (name/email/orcid) or `role`. Shows profile_id, email, roles, providers, ban status.brainkb_available_roles(Admin) List the available roles/groups (Admin, Lab Member, Curator, …).brainkb_create_role(Admin) Create a new role/group — e.g. an 'External' collaborator group — which can then be assigned with brainkb_assign_role.brainkb_assign_role(Admin) Assign a role/group to a user by email (e.g. 'Lab Member', 'External', or a custom group). The user must already have a profile (created on first login/registration). NOTE: assigning the 'Admin'/'SuperAdmin' role is SuperAdmin-only (hierarchy: SuperAdmin > Admin).brainkb_remove_role(Admin) Remove a role/group from a user by email.brainkb_activate_user(Admin) Activate a user's account (sets the JWT user active) by email.brainkb_deactivate_user(Admin) Deactivate a user's account by email.brainkb_ban_user(Admin) Ban a user by email (reversible; preserves history). This is how accounts are removed — there is NO hard delete. Banning an Admin is SuperAdmin-only; SuperAdmin accounts cannot be banned.brainkb_unban_user(Admin) Lift a ban on a user by email.brainkb_list_permissions(Admin) List all usermanagement permissions (resource/action pairs used for page-access and role-permission mapping). These are the addable 'permission' options; KG action-capabilities are listed by brainkb_list_capabilities.brainkb_create_permission(Admin) Create a new usermanagement permission, e.g. name='dataset.export', resource='dataset', action='export'. Attach it to roles via the usermanagement role-permissions API.
Tool changes
- 2026-10-22: brainkb_login, brainkb_globus_login, brainkb_finish_login, brainkb_logout, brainkb_whoami, brainkb_create_token, brainkb_list_tokens, brainkb_revoke_token, brainkb_use_token, brainkb_list_spaces, brainkb_create_space, brainkb_get_space
- 2026-10-21: brainkb_login, brainkb_globus_login, brainkb_finish_login, brainkb_logout, brainkb_whoami, brainkb_create_token, brainkb_list_tokens, brainkb_revoke_token, brainkb_use_token, brainkb_list_spaces, brainkb_create_space, brainkb_get_space
- 2026-10-20: brainkb_login, brainkb_globus_login, brainkb_finish_login, brainkb_logout, brainkb_whoami, brainkb_create_token, brainkb_list_tokens, brainkb_revoke_token, brainkb_use_token, brainkb_list_spaces, brainkb_create_space, brainkb_get_space
- 2026-10-16: brainkb_login, brainkb_globus_login, brainkb_finish_login, brainkb_logout, brainkb_whoami, brainkb_create_token, brainkb_list_tokens, brainkb_revoke_token, brainkb_use_token, brainkb_list_spaces, brainkb_create_space, brainkb_set_space_visibility
Repository · JSON · Text for agents · Registry updated 2026-07-23