bsp-mcp
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bsp-mcpAnalyze my latest blood panel results"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
bsp-mcp
Connect AI to health data — with verified consent
Published by the Ambrósio Institute · biologicalsovereigntyprotocol.com
What it is
bsp-mcp is the official Model Context Protocol server for the Biological Sovereignty Protocol. It lets any MCP-compatible AI assistant — Claude, GPT, or any other — read and interact with a user's BSP health records. But it never does so silently: every single data access is gated by a ConsentToken that the user explicitly issued, with cryptographic verification enforced on-chain.
The server implements the MCP tool interface over stdio, integrates with the bsp-sdk ExchangeClient, and treats consent as a hard runtime constraint — not a UI checkbox. If a valid token is not present, or if the requested intent falls outside what was authorized, the call is rejected before any data is touched.
Related MCP server: Sensor Bio MCP Server
Why this matters
In 2026, AI health assistants are everywhere. The problem is that most of them access health data through institutional pipelines where the user is a bystander — data flows from EHR to platform to model, and the individual never sees the consent trail, let alone controls it.
BSP-MCP inverts that. Every query your AI makes is gated by a ConsentToken you issued, scoped to exactly the categories and intents you authorized, with an expiry you set. The AI sees what you allowed — nothing more. When you revoke access, it stops immediately. The entire access history is permanently recorded on Aptos, auditable by anyone.
This is what sovereign health data looks like in practice.
Available Tools
Tool | Consent Required | What it returns |
| Yes — | Biological measurements in BSP format: values, units, reference ranges, collection timestamps. Filterable by category, biomarker codes, and date range. |
| Yes — | Overview of the user's biological profile: categories present, record counts, last measurement dates, and data coverage level. |
| No — public taxonomy | Name, category, level, and clinical context for a BSP biomarker code. |
| No — public taxonomy | All 25 BSP taxonomy categories with level filters (CORE / STANDARD / EXTENDED / DEVICE). |
| No — reads session config | Active consent status: which BEO is connected, which intents are authorized, token ID, and expiry. Run this first. |
| No — public verification | Verify if a specific ConsentToken is valid and covers a given intent. Returns |
| Yes — | Emergency lock — freezes the BEO immediately. No operations permitted while locked. |
| Yes — | Unlock a previously locked BEO. |
| Yes — | IRREVERSIBLE — Permanent erasure (LGPD/GDPR). Nullifies key, revokes all tokens, releases domain. |
| Yes — | Emergency revoke ALL active ConsentTokens for a BEO. |
Setup
1. Install
npx bsp-mcp2. Configure in Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"bsp": {
"command": "npx",
"args": ["-y", "bsp-mcp"],
"env": {
"BSP_BEO_DOMAIN": "yourname.bsp",
"BSP_CONSENT_TOKEN_ID": "tok_...",
"BSP_NETWORK": "mainnet"
}
}
}
}3. Issue a ConsentToken
Before your AI can read any records, you need to authorize it from your BSP identity:
bsp consent grant \
--beo yourname.bsp \
--intent READ_RECORDS \
--categories BSP-HM,BSP-GL,BSP-LA \
--expires 2026-12-31 \
--output tok_...Then set that token ID as BSP_CONSENT_TOKEN_ID in the server env.
4. Verify the connection
Start a Claude session and ask:
"Check my BSP consent status"
Claude will call bsp_check_consent and confirm which BEO is connected and what data it can access.
Demo conversation
User: Analyze my latest blood panel results
Claude: Let me check your BSP consent first.
[bsp_check_consent]
→ BEO: alice.bsp
→ Token: tok_7f3a...c291
→ Network: mainnet
→ Intents: READ_RECORDS
→ Authorized categories: BSP-HM (Hematology), BSP-GL (Genomics Light), BSP-LA (Lab – Advanced)
→ Expires: 2026-12-31
Consent verified. Fetching your hematology records.
[bsp_get_biorecords]
→ BEO: alice.bsp
→ Category: BSP-HM
→ Date range: last 90 days
→ Records returned: 12
Based on your latest blood panel (March 18, 2026):
Hemoglobin 14.2 g/dL ✓ normal (ref: 12.0–16.0)
Hematocrit 42.1 % ✓ normal (ref: 36–48)
WBC 7,200 /μL ✓ normal (ref: 4,500–11,000)
Platelets 238,000 /μL ✓ normal (ref: 150,000–400,000)
MCV 88 fL ✓ normal (ref: 80–100)
Ferritin 22 ng/mL ⚠ low-normal (ref: 20–200; optimal longevity: >50)
Everything is within clinical range. Ferritin at 22 ng/mL is technically normal,
but for longevity optimization the target is typically above 50. Worth discussing
iron supplementation or dietary adjustments with your provider.Security model
How consent verification works
The ConsentGuard runs before every data-access tool call. It checks that:
A BEO domain is configured (
BSP_BEO_DOMAIN)A ConsentToken is present (
BSP_CONSENT_TOKEN_ID)The token's
intentsarray includes the required intent for the requested operationThe token has not expired
When bsp-sdk is connected to the registry, step 3 and 4 are verified on-chain against the AccessControl contract. The token state on Aptos is the source of truth — not the local environment.
What happens when a token expires
[bsp_get_biorecords]
⛔ BSP Consent Error [TOKEN_EXPIRED]
The ConsentToken tok_7f3a...c291 expired on 2026-06-01.
The BEO holder must issue a new token to continue.
→ https://biologicalsovereigntyprotocol.com/getting-started/quickstartThe AI cannot proceed. No data is returned. No fallback path exists.
What happens when a token is revoked
Revocation is immediate. The AccessControl contract on Aptos marks the token as revoked, and the next tool call that hits the registry will receive a TOKEN_REVOKED error and halt. Mid-conversation revocation is handled gracefully — the AI acknowledges the revocation and stops accessing data.
Scope enforcement
Tokens are scoped. A token with READ_RECORDS on BSP-HM,BSP-GL cannot be used to read BSP-CV (cardiovascular) data even if that category exists in the BEO. Category-level enforcement is delegated to the AccessControl contract.
For developers
Adding a new tool
Tools are registered in src/index.ts. Each tool follows this pattern:
// 1. Define the tool in the tools[] array
{
name: 'bsp_my_new_tool',
description: '...',
inputSchema: { type: 'object', properties: { ... } }
}
// 2. Add a case in the CallToolRequestSchema handler
case 'bsp_my_new_tool': {
// For consent-required tools:
const consentError = guard.check('REQUIRED_INTENT')
if (consentError) return consentError
// Your tool logic here
// Use bsp-sdk ExchangeClient to interact with the registry
}Tool interface
Every tool returns an MCPResult:
type MCPResult = {
content: Array<{ type: 'text'; text: string }>
isError?: boolean
}Environment variables
Variable | Required | Description |
| Yes | The user's BSP identity domain (e.g. |
| Yes for data access | Token ID issued by the BEO holder |
| No | Override BSP API base URL (default: |
| Yes for IEO tools | API key for IEO-scoped operations ( |
| Yes for write tools | Hex-encoded Ed25519 private key — required for |
| No | Override relayer/registry endpoint (default: |
| No |
|
Related packages
bsp-spec — full BSP specification
bsp-sdk-typescript — TypeScript SDK (
bsp-sdk)bsp-id-web — web app to manage your BEO and issue tokens
Tool Schemas
Exhaustive JSON Schema for every tool. For end-to-end request / response examples with success and error paths, see examples/.
bsp_check_consent
{ "type": "object", "properties": {}, "required": [] }bsp_get_biorecords
{
"type": "object",
"properties": {
"category": { "type": "string", "description": "BSP category code (e.g. BSP-HM)" },
"codes": { "type": "array", "items": { "type": "string" }, "description": "Specific biomarker codes" },
"fromDate": { "type": "string", "format": "date-time" },
"toDate": { "type": "string", "format": "date-time" },
"limit": { "type": "integer", "minimum": 1, "maximum": 500, "default": 50 }
},
"required": []
}bsp_get_beo_summary
{ "type": "object", "properties": {}, "required": [] }bsp_resolve_biomarker
{
"type": "object",
"properties": {
"code": { "type": "string", "description": "Biomarker code (e.g. BSP-HM-HGB)" }
},
"required": ["code"]
}bsp_list_categories
{
"type": "object",
"properties": {
"level": {
"type": "string",
"enum": ["CORE", "STANDARD", "EXTENDED", "DEVICE"]
}
},
"required": []
}bsp_lock_beo / bsp_unlock_beo
{
"type": "object",
"properties": {
"confirm": { "type": "boolean", "description": "Must be true" }
},
"required": ["confirm"]
}bsp_destroy_beo
{
"type": "object",
"properties": {
"confirm": { "type": "boolean", "description": "Must be true — irreversible" },
"reason": { "type": "string", "description": "Optional audit reason" }
},
"required": ["confirm"]
}bsp_revoke_all_tokens
{
"type": "object",
"properties": {
"confirm": { "type": "boolean" }
},
"required": ["confirm"]
}All tools return an MCPResult:
type MCPResult = {
content: Array<{ type: 'text'; text: string }>
isError?: boolean
}Error payloads always include a stable code in brackets — e.g. [TOKEN_EXPIRED], [SCOPE_VIOLATION], [CONFIRM_REQUIRED]. Full catalog: bsp-spec/docs/ERROR_CODES.md.
Changelog
See CHANGELOG.md.
Contributing
See CONTRIBUTING.md.
License
Apache 2.0 — Ambrósio Institute
Available Tools
13 toolsbsp_check_consentA
Check the current consent configuration — which BEO is connected, which data categories and intents are authorized, and when the token expires. Run this first to understand what data you are allowed to access in this session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full transparency burden. It signals a read-only inspection operation through the verb 'Check' and discloses exactly what state it reports: connected BEO, authorizations, and token expiry. It could be more explicit that no modification occurs, but the description is not misleading and covers the key behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first states what the tool reports, the second states when to run it. Every clause adds information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, no-output-schema consent inspection tool, the description is complete. It tells an agent what the tool checks, why it matters, and when to call it. No essential invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters; the input schema is an empty object and coverage is 100%. The description correctly implies no user-supplied input is needed by focusing entirely on what the tool inspects, so the baseline 4 for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Check') and a concrete resource ('current consent configuration'), then enumerates exactly what is included: connected BEO, authorized data categories and intents, and token expiry. It is clearly distinguishable as a consent-status inspection tool, though it does not explicitly differentiate itself from the sibling bsp_verify_consent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit directive: 'Run this first' to understand what data you are allowed to access in this session. This is clear usage context. It does not name alternatives or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_destroy_beoA
IRREVERSIBLE — Permanently destroy a BEO (LGPD Art. 18 / GDPR Art. 17). Nullifies public key, revokes all ConsentTokens, releases domain. The user MUST confirm before executing this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| beoId | Yes | The BEO UUID to destroy. | |
| confirm | Yes | Must be true to execute. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the full behavioral burden falls on the description. It carries that burden excellently: it labels the operation IRREVERSIBLE, spells out three concrete consequences, and warns that user confirmation is required before executing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: the irreversible warning comes first, followed by the action, its side effects, and the mandatory confirmation. Every sentence carries weight and none is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter tool with no annotations and no output schema, the definition covers the essential facts: what it destroys, what it affects, its legal grounding, and the user-confirmation guardrail. It does not describe return or error behavior, but that is secondary for selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters with 100% coverage: beoId as the BEO UUID and confirm as a boolean that must be true. The description adds little beyond reiterating the confirmation requirement, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'IRREVERSIBLE — Permanently destroy a BEO' and lists concrete downstream effects (nullifies public key, revokes all ConsentTokens, releases domain). This is a specific verb+resource definition and clearly distinguishes the tool from reversible sibling operations like bsp_lock_beo, bsp_unlock_beo, or bsp_revoke_all_tokens.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies use only for definitive erasure under LGDP/GDPR and mandates user confirmation. However, it does not explicitly say when not to use it or which alternative sibling tool fits non-destructive cases, such as bsp_lock_beo or bsp_revoke_all_tokens.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_get_beo_summaryA
Get a structured overview of the user's biological profile — what categories of data exist, how many records per category, most recent measurement dates, and overall data completeness. Requires active session consent. Use this before bsp_get_biorecords to understand data scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It reveals a consent requirement that is not visible in the schema ('Requires active session consent') and describes what returned data will include, which gives the agent expectations. It does not mention possible errors or absence of side effects, but for a read-only getter the consent caveat and content disclosure are meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The main functional scence is front-loaded, followed by a one-line usage directive. Every clause adds value: what it does, what data it covers, consent requirement, and the ordering relative to bsp_get_biorecords.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are no parameters, no output schema, and no annotations, the description covers the essential context: return contents, consent precondition, and tool ordering. It gives an agent enough to decide when to call the tool and what to expect from it. Missing details like error behavior are not crippling for a 0-parameter read-only summary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there are no parameter semantics to document. The baseline for a zero-parameter tool is 4, and the description correctly omits parameter discussion, focusing elsewhere. It adds no unnecessary parameter content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Get a structured overview of the user's biological profile') and then enumerates the exact content categories: which categories exist, record counts, most recent measurement dates, and data completeness. It clearly differentiates from bsp_get_biorecords by framing this as the higher-level scope summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit usage instruction: 'Use this before bsp_get_biorecords to understand data scope.' It also states the consent prerequisite, giving the agent a concrete precondition and a sibling-tool relationship. This is strong, usable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_get_biorecordsA
Read BioRecords from the user's BEO (biological identity). Requires an active ConsentToken with READ_RECORDS intent. Returns biological measurements in BSP format with values, units, reference ranges, and collection timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO8601 timestamp — return records before this date. | |
| from | No | ISO8601 timestamp — return records after this date (e.g. "2025-01-01T00:00:00Z"). | |
| limit | No | Maximum number of records (default: 50, max: 200). | |
| biomarkers | No | Specific BSP biomarker codes (e.g. ["BSP-GL-001", "BSP-LA-004"]). | |
| categories | No | BSP category codes to filter by (e.g. ["BSP-GL", "BSP-LA", "BSP-CV"]). Omit for all authorized categories. Use bsp_list_categories to see available codes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the prerequisite consent state and intent, and pre-announces the response contents (BSP format, values, units, reference ranges, collection timestamps). It does not mention ordering, pagination behavior, or error cases, but it covers the most important operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and 39 words, with the core purpose first, then the authorization requirement, then the return format. Every sentence carries useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is complete for a read tool with five optional parameters covered by a detailed schema: the description supplies consent requirements and response contents, while the schema supplies all parameter constraints and examples. Any missing ordering or pagination details are minor given the rich schema and clear invocation path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has a meaningful description with examples, so the baseline of 3 applies. The tool description itself adds no extra parameter-level meaning beyond the schema, only describing the overall return payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Read BioRecords from the user's BEO', and further defines the output as biological measurements in BSP format with values, units, reference ranges, and timestamps. This clearly distinguishes it from sibling tools like bsp_submit_biorecord (write) and bsp_get_beo_summary (summary) without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear contextual usage: it is the read endpoint for biological records and requires an active ConsentToken with READ_RECORDS intent, and the categories parameter schema points to bsp_list_categories for available codes. It does not explicitly enumerate when-not-to-use cases or name alternative siblings, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_list_beosB
List BEOs accessible to the configured IEO
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of BEOs to return (default: 20, max: 100). | |
| offset | No | Number of records to skip for pagination (default: 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full behavioral burden. It only implies a read-only operation via 'List' but does not disclose pagination behavior, error cases, ordering, or response structure. It fails to add meaningful operational details beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff or redundancy. It is appropriately sized for a simple list operation and front-loads the core purpose immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward list tool, the description covers the core purpose. However, with no output schema, it does not hint at the return format or any caveats (e.g., only unlocked BEOs). The lack of usage context and behavioral details leaves the agent with some ambiguity, but the simplicity keeps it at a passable level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage, with both 'limit' and 'offset' having descriptive text. The description adds no parameter-specific meaning, but the schema does the heavy lifting, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'BEOs', and the scope 'accessible to the configured IEO'. This distinguishes it from sibling tools like bsp_destroy_beo or bsp_lock_beo, which target different operations on BEOs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus siblings such as bsp_get_beo_summary or bsp_list_ieos. There are no conditions, exclusions, or contextual hints beyond the bare purpose, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_list_categoriesA
List all BSP taxonomy categories with level information. Public data — no consent required. Use this to understand what biological data categories exist and which are relevant for a user's health question.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Filter by taxonomy level. CORE = advanced longevity biomarkers, STANDARD = routine lab tests, EXTENDED = specialized research, DEVICE = wearable continuous data. Omit to list all 25 categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It adds a meaningful behavioral fact: 'Public data — no consent required,' which tells the agent this is a safe, unauthenticated read operation. It does not detail output shape or limits, but for a simple taxonomy list this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action is front-loaded, followed by a useful safety/behavior note and a concise usage directive. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter list operation with a fully documented schema, the description is complete: it states what is listed, the output includes level information, the public nature removes auth/consent concerns, and it gives a clear use case. No output schema is needed for a straightforward category list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the optional 'level' parameter already has clear enum descriptions including what each level means. The tool description adds no additional parameter detail, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('List all BSP taxonomy categories') and states the key output ('with level information'). It is clearly distinct from sibling tools like bsp_list_beos and bsp_list_ieos because it targets taxonomy categories rather than records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: 'Use this to understand what biological data categories exist and which are relevant for a user's health question.' It does not explicitly name alternatives or exclusions, but the intended scenario is clear and sufficient for a lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_list_ieosB
List registered IEOs on the BSP network
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by IEO type (e.g. "clinic", "lab", "insurer"). | |
| limit | No | Maximum number of IEOs to return (default: 20, max: 100). | |
| offset | No | Number of records to skip for pagination (default: 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It does not state whether listing is read-only, how pagination behaves, or what fields are returned. 'List' implies a query, but no operational context is added beyond parameter defaults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that conveys the core action immediately. It contains no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, a complete description would need to disclose read-only semantics, return shape, or default behavior. It provides none of this, leaving an agent uncertain about response format and potential side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for type, limit, and offset including defaults and max. With high schema coverage, the description is not required to repeat parameter details, and it does not add any beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'List' and resource 'registered IEOs on the BSP network'. The word 'registered' adds scope beyond the name, and the entity type IEO clearly distinguishes it from sibling bsp_list_beos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There is no mention of bsp_list_beos or any conditions for filtering by type, leaving the agent to infer usage solely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_lock_beoA
Emergency lock — freezes the BEO immediately. No reads or writes permitted while locked. Only the BEO holder can lock or unlock. Requires the private key configured in BSP_PRIVATE_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| beoId | Yes | The BEO UUID to lock. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it states the immediate freeze effect, that no reads or writes are permitted while locked, that only the BEO holder can lock/unlock, and that the private key from BSP_PRIVATE_KEY is required. The only minor gap is no mention of what happens to in-flight operations or how lock state is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: the core action, the behavioral consequence, and the authorization requirement. It is front-loaded with the purpose and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter lock tool, the description covers the action, effect, authorization, and configuration requirement. It does not describe the return value or error behavior, but with no output schema and a simple invocation this is a minor omission rather than a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single parameter 'beoId' as the BEO UUID, so the baseline is 3. The description adds no additional meaning about the parameter itself, but none is needed given the complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('freezes') and a clear resource ('the BEO'), with a strong qualifier ('Emergency lock') that distinguishes it from related operations like unlock or destroy. An agent can immediately tell this is a lock action with immediate effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Emergency lock' implies the usage context, and the note about only the holder being able to lock or unlock gives some operational framing. However, it does not explicitly state when to prefer this over alternatives or when not to use it, leaving the usage guidance mostly implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_resolve_biomarkerA
Look up information about a specific BSP biomarker code — name, category, level, and clinical context. Public taxonomy data — no consent required.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | BSP biomarker code (e.g. "BSP-GL-001", "BSP-LA-004", "BSP-HM-001"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. It disloses the read-only nature ('Look up information'), the public access level, and the lack of consent requirement. It does not mention edge cases like unknown codes, but for a simple lookup this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence with the core action and return fields front-loaded, plus a short clause about access policy. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only taxonomy lookup with no output schema, the description is complete: it states what the tool does, what it returns, and that no consent is needed. The agent can invoke it correctly without further ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with a description and an example format for the single 'code' parameter. The tool description does not add parameter-specific detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Look up information' with a clear resource: a specific BSP biomarker code. It also names the fields returned (name, category, level, clinical context), which distinguishes it from sibling tools that list categories or manage records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this is for resolving a single biomarker code and explicitly notes 'public taxonomy data — no consent required', which signals no consent precondition. It does not explicitly name alternatives or contrast with bsp_list_categories, but the usage context is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_revoke_all_tokensA
Emergency revocation — revokes ALL active ConsentTokens for a BEO. No institution will be able to access any data after this.
| Name | Required | Description | Default |
|---|---|---|---|
| beoId | Yes | The BEO UUID whose tokens to revoke. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly warns that all tokens are revoked and that no institution will be able to access data afterward, disclosing the destructive and seemingly irreversible nature of the action. It doesn't mention reversibility or prerequisites, but the core behavioral impact is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the 'Emergency' tag front-loaded, immediately signaling urgency. It avoids redundancy and focuses on the essential effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with a single parameter and no output schema, the description adequately explains the operation's effect. It could benefit from mentioning reversibility or restrictions, but the core information needed to call the tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the beoId parameter with 100% coverage, so the description doesn't need to add parameter information. It provides no additional semantics beyond the schema, which matches the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool revokes all active ConsentTokens for a BEO, using the verb 'revokes' and specifying the resource. It also emphasizes the emergency nature and the outcome (no institution can access data), which clearly distinguishes it from siblings like destroy or lock.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this is an emergency revocation, implying it should be used when immediate and complete revocation is needed. It doesn't explicitly name alternatives or when not to use it, but the emergency context and the statement that no institution will have access after this provide clear guidance on when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_submit_biorecordA
Submit a BioRecord for a BEO (requires SUBMIT_RECORD consent)
| Name | Required | Description | Default |
|---|---|---|---|
| unit | Yes | Unit of measurement (e.g. "mg/dL", "mmol/L"). | |
| value | Yes | Numeric measurement value. | |
| beo_id | Yes | The BEO UUID that owns this record. | |
| token_id | Yes | ConsentToken ID authorizing this submission. | |
| biomarker | Yes | BSP biomarker code (e.g. "BSP-GL-001"). | |
| collection_time | Yes | ISO8601 timestamp of when the sample was collected (e.g. "2025-06-01T08:30:00Z"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses the consent requirement but does not state whether this creates or replaces a record, whether it is idempotent, what side effects occur, or what happens after submission. For a mutation tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. The core operation is stated first and the consent precondition is appended cleanly in a parenthetical; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The six required parameters are fully documented in the schema, but with no annotations and no output schema the description still omits important behavioral context such as idempotency, response shape, and whether the BEO must be in a particular state. It is adequate for routing the call but not fully complete for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all six parameters, so the baseline is 3. The description adds value by specifying that the required consent is SUBMIT_RECORD, which clarifies token_id beyond its generic schema text. It does not add semantic detail for the other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Submit' plus the resource 'BioRecord for a BEO', clearly identifying the operation. This also distinguishes it from read-oriented siblings like bsp_get_biorecords and destructive tools like bsp_destroy_beo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The consent prerequisite ('requires SUBMIT_RECORD consent') gives useful context for when the tool can be invoked, but no alternative tool is named and there is no when-not-to-use guidance. The usage is mostly implied by the verb 'Submit' rather than made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_unlock_beoA
Unlock a previously locked BEO. Requires the BEO holder's private key.
| Name | Required | Description | Default |
|---|---|---|---|
| beoId | Yes | The BEO UUID to unlock. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully discloses the private-key requirement and the locked-state precondition, but it does not describe side effects, failure behavior, or whether the operation is reversible, which would be valuable for a state-changing action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the core action and then adds the essential authorization requirement, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with a fully documented schema and no output schema, the description is largely complete. It includes the critical precondition and private-key requirement, though a brief mention of expected outcome or failure conditions would make it fully robust.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameter with a clear description ('The BEO UUID to unlock'), so the baseline is 3. The tool description adds no additional parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('unlock') and resource ('previously locked BEO'), making the tool's function immediately clear. It is clearly distinguishable from siblings like bsp_lock_beo and bsp_destroy_beo because it names the inverse state change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the precondition ('previously locked BEO') and the authorization requirement ('requires the BEO holder's private key'). It does not explicitly name sibling alternatives, but the usage context is clear enough for an agent to know when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsp_verify_consentB
Verify if a ConsentToken is valid and has the required intent
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Intent to check (e.g. "READ_RECORDS", "SUBMIT_RECORD"). | |
| token_id | Yes | ConsentToken ID to verify. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states that the tool verifies validity and intent, but does not disclose whether this is a read-only check, what happens for invalid tokens, or whether any side effects occur. This is a meaningful gap for a tool without annotation safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the operation and its key condition. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two well-documented parameters, but there is no output schema and no explanation of what result indicates success or failure. The description also fails to distinguish this from bsp_check_consent, leaving an important contextual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description's phrase 'has the required intent' loosely connects to the intent parameter but adds no new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Verify') and resource ('ConsentToken') and states the exact condition being checked: validity and required intent. However, it does not differentiate itself from the sibling tool bsp_check_consent, which likely has overlapping purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like bsp_check_consent, nor are prerequisites or upstream/downstream steps mentioned. The description implies a verification use case but leaves the selection criteria to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
13 tool updates
v2.1.0- First observed
bsp_check_consent - First observed
bsp_destroy_beo - First observed
bsp_get_beo_summary - First observed
bsp_get_biorecords - First observed
bsp_list_beos - First observed
bsp_list_categories - First observed
bsp_list_ieos - First observed
bsp_lock_beo - First observed
bsp_resolve_biomarker - First observed
bsp_revoke_all_tokens - First observed
bsp_submit_biorecord - First observed
bsp_unlock_beo - First observed
bsp_verify_consent
TDQS
Most tools target clearly distinct resources and actions: BEO lifecycle, consent, records, taxonomy, and network listings. The only real ambiguity is between bsp_check_consent and bsp_verify_consent, though their descriptions distinguish session-level configuration from validating a specific token.
All tools share the bsp_ prefix and follow a consistent verb_noun pattern: list_beos, get_biorecords, submit_biorecord, destroy_beo, lock_beo, revoke_all_tokens, etc. Even near-synonyms like check and verify do not break the naming scheme.
13 tools is well-scoped for this domain and each tool maps to a distinct operation: discovery, consent checking, record reads/writes, taxonomy lookup, and emergency controls. There is no obvious redundancy or padding.
Core workflows are well covered: list available entities, check/verify consent, summarize and read BioRecords, submit new records, resolve biomarkers, and handle emergency lock/revoke/destroy actions. Minor gaps exist, such as no explicit consent token issuance or update/delete for individual records, but these may reasonably be outside the server's intended role.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- freddyOAuthcoach.freddy
Connect your wearables, rings and training apps, then ask your AI about your own health data.
Connect AI clients to biomedical data and tools.
Your MedNode health vault in your AI assistant — records, summaries, labs, appointments.
Provide AI agents and automation tools with contextual access to blockchain data including balance…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access your Oura Ring health data through OAuth2-authenticated API calls.119MIT

Sensor Bio MCP Serverofficial
AlicenseAqualityDmaintenanceConnects Sensor Bio wearable data to AI assistants via the Model Context Protocol, enabling queries about sleep, heart rate, activity, and other biometrics.131MIT- AlicenseNot gradedqualityBmaintenanceExposes personal health data (recovery, sleep, strain, etc.) as MCP tools for AI agents to query and analyze.2MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to securely access Apple Health data (sleep, heart rate, menstrual cycle, etc.) via end-to-end encrypted local decryption from the Tether iOS app.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Biological-Sovereignty-Protocol/bsp-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server