protocols-io-mcp-server
This server enables MCP clients like Claude Desktop to interact with protocols.io for searching, retrieving, creating, and managing scientific protocols.
Search & Discovery
Search public protocols by keyword with paginated results (3 per page)
Retrieve all protocols from your account
Get protocol information by ID (title, description, URL, dates, DOI, publication status)
View detailed protocol steps including materials, quantities, and reference protocols
Protocol Creation & Editing
Create new protocols with title and description (requires searching at least 2 reference protocols first for credibility)
Update protocol titles and descriptions
Step Management
Replace all steps in a protocol at once
Add individual steps to the end of protocols with descriptions, materials (name, quantity, unit), and references to other protocol IDs
Delete specific steps by step ID
Key Features
Material tracking with quantities and units (mL, g, μL, etc.)
Protocol referencing system for credibility
Date filtering recommendations (avoids pre-2015 protocols)
Multiple authentication methods: client access tokens (STDIO) and OAuth 2.0 (HTTP/SSE)
Multiple transport options: STDIO, HTTP, and SSE for different deployment scenarios
Error handling with descriptive messages
Enables searching, retrieving, creating, and managing scientific protocols and their steps on the protocols.io platform, including protocol metadata management and step-by-step procedure handling.
Click 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., "@protocols-io-mcp-serversearch for CRISPR protocols"
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.
Protocols.io MCP Server
A Model Context Protocol (MCP) server that enables MCP clients like Claude Desktop to interact with protocols.io, a popular platform for sharing scientific protocols and methods.
Available Tools
The server provides the following tools that can be used by MCP clients:
Search and Retrieval
search_public_protocols- Search for public protocols by keywordget_protocol- Get basic protocol information by IDget_protocol_steps- Get detailed steps for a specific protocolget_my_protocols- Retrieve all protocols from your account
Protocol Creation and Management
create_protocol- Create a new protocol with title and descriptionupdate_protocol_title- Update the title of an existing protocolupdate_protocol_description- Update the description of an existing protocol
Step Management
set_protocol_steps- Replace all steps in a protocoladd_protocol_step- Add a single step to the end of a protocoldelete_protocol_step- Delete a specific step from a protocol
Related MCP server: 302AI Sandbox MCP Server
Requirements
Python 3.10 or higher
protocols.io account with API credentials
MCP client (such as Claude Desktop)
Obtain Protocols.io API Credentials
Visit protocols.io/developers
Sign in to your account
Navigate to the API Clients section
Click ADD CLIENT to create a new application
Configure and copy the credentials based on your use case:
Client Access Token: Copy the generated token for simple authentication (suitable for local STDIO transport)
Client ID and Client Secret: For OAuth 2.0 authentication (suitable for remote HTTP/SSE transport):
Set the redirect URL to
{your_mcp_base_url}/auth/callbackCopy the Client ID and Client Secret
Installation
Quick Start with Docker
docker run -d -p 8000:8000 -e PROTOCOLS_IO_CLIENT_ID="your_client_id" -e PROTOCOLS_IO_CLIENT_SECRET="your_client_secret" -e PROTOCOLS_IO_MCP_BASE_URL="https://example.com" --name protocols-io-mcp --restart always ghcr.io/hqn21/protocols-io-mcp:latestThe server will be accessible at http://0.0.0.0:8000/mcp with HTTP transport
Install via pip
pip install protocols-io-mcpSet Environment Variables
STDIO Transport
export PROTOCOLS_IO_CLIENT_ACCESS_TOKEN="your_client_access_token"HTTP/SSE Transport
export PROTOCOLS_IO_CLIENT_ID="your_client_id"
export PROTOCOLS_IO_CLIENT_SECRET="your_client_secret"
export PROTOCOLS_IO_MCP_BASE_URL="https://example.com"Usage
Command Line Interface
Run the MCP server with various transport options:
# Default: STDIO transport
protocols-io-mcp
# HTTP transport
protocols-io-mcp --transport http --host 127.0.0.1 --port 8000
# SSE transport
protocols-io-mcp --transport sse --host 127.0.0.1 --port 8000CLI Options
Usage: protocols-io-mcp [OPTIONS]
Run the protocols.io MCP server.
Options:
--transport [stdio|http|sse] Transport protocol to use [default: stdio]
--host TEXT Host to bind to when using http and sse
transport [default: 127.0.0.1]
--port INTEGER Port to bind to when using http and sse
transport [default: 8000]
--help Show this message and exit.Integration with Claude Desktop
To use this server with Claude Desktop, add the following configuration to your claude_desktop_config.json:
{
"mcpServers": {
"protocols-io": {
"command": "protocols-io-mcp",
"env": {
"PROTOCOLS_IO_CLIENT_ACCESS_TOKEN": "your_client_access_token"
}
}
}
}Troubleshooting
MCP protocols-io: spawn protocols-io-mcp ENOENT
This error indicates that Claude Desktop cannot find the protocols-io-mcp command. To resolve this:
Make sure you have installed the
protocols-io-mcppackage globally using pip.Change the
commandfield in yourclaude_desktop_config.jsonto the full path of theprotocols-io-mcpexecutable. You can find the path by running:which protocols-io-mcpYour final configuration should look like:
{ "mcpServers": { "protocols-io": { "command": "/full/path/to/protocols-io-mcp", "env": { "PROTOCOLS_IO_CLIENT_ACCESS_TOKEN": "your_client_access_token" } } } }
Development
Running Tests
Ensure you have set the PROTOCOLS_IO_CLIENT_ACCESS_TOKEN environment variable, then run:
pytestLicense
This project is licensed under the MIT License. See the LICENSE file for details.
Available Tools
10 toolsadd_protocol_stepA
Add a step to the end of the steps list for a specific protocol by its protocol ID.
| Name | Required | Description | Default |
|---|---|---|---|
| protocol_id | Yes | Unique identifier for the protocol | |
| step | Yes | Step to be added to the protocol |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It clarifies that the step is appended to the end, but does not mention potential errors (e.g., invalid protocol_id), idempotency, or whether it returns an updated step list. Based on the lack of annotations, the description provides only basic behavioral insight.
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, clear sentence with no unnecessary words. It effectively conveys the purpose without extraneous information, earning a perfect score.
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 the tool's moderate complexity (2 required parameters, nested objects in input schema, and no output schema shown but context indicates one exists), the description adequately covers what the tool does. However, it does not elaborate on how the nested 'ProtocolStepInput' is handled, but the input schema provides that detail. The description is sufficient for a straightforward append 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?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema. It does not explain the 'step' parameter's structure or constraints, which are already detailed in the input 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 ('Add'), identifies the resource ('protocol'), clarifies the action ('to the end of the steps list'), and includes the identifier ('by its protocol ID'). This clearly distinguishes it from siblings like 'set_protocol_steps' (replace) and 'delete_protocol_step' (remove).
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 states what the tool does but provides no explicit guidance on when to use it versus alternatives. There is no mentioning of when not to use it or comparisons to sibling tools like 'set_protocol_steps' for bulk operations. The usage context is implied but not clearly outlined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_protocolA
Create a new protocol with the given title and description.
Before creating a new protocol, ensure you have searched for at least 2 relevant public protocols using search_public_protocols and reviewed their detailed steps with get_protocol_steps for reference when adding steps.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title of the new protocol (plain text only) | |
| description | Yes | Description of the new protocol (plain text only) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the entire burden of behavioral disclosure. It only states that the tool creates a protocol, but fails to mention important aspects like authentication requirements, uniqueness constraints, error conditions, or what happens to existing data. This is a significant gap for a mutation tool.
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: the first succinctly states the core purpose, and the second adds a valuable usage guideline. Every word earns its place with no redundancy or fluff.
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 creation tool with an output schema, the description appropriately omits return details. It includes a key precondition referencing sibling tools. However, it misses guidance on post-creation steps (e.g., adding steps via add_protocol_step) and does not mention error handling, so it is not fully complete.
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 describes both title and description as 'plain text only' with 100% coverage. The description adds no further meaning beyond stating they are given, so it meets the baseline but provides no extra value.
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 action and resource: 'Create a new protocol with the given title and description.' It specifies the inputs and is distinct from sibling tools that deal with steps or updates, though it does not explicitly differentiate from them.
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 provides explicit preconditions: search for at least 2 relevant public protocols using search_public_protocols and review steps with get_protocol_steps before creating. This gives clear usage guidance and directs the agent to alternatives, earning a top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_protocol_stepB
Delete a specific step from a protocol by providing both the protocol ID and step ID.
| Name | Required | Description | Default |
|---|---|---|---|
| protocol_id | Yes | Unique identifier for the protocol | |
| step_id | Yes | Unique identifier for the step to be deleted |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description must carry the full burden of behavioral disclosure. It only states 'delete', which implies destructive action, but does not mention reversibility, cascading effects, or error handling (e.g., what happens if step_id does not exist).
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 concise sentence that front-loads the key information. Every word is necessary, and there is no 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?
Given the absence of annotations and an output schema present (not shown), the description lacks important context like side effects, constraints (e.g., step must exist), and what happens on success/failure. An agent may need more information to safely invoke this tool.
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 coverage is 100%, so both parameters are well-described by the schema. The description adds no extra meaning beyond what is already in the schema, so 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 action (delete), the resource (protocol step), and the required inputs (protocol ID and step ID). It is specific and distinguishes from sibling tools like add, update, or get.
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 on when to use this tool versus alternatives, such as when to delete a step vs reordering or updating. No prerequisites or context for typical usage are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_protocolsA
Retrieve basic information for all protocols belonging to the current user. To get detailed protocol steps, use get_protocol_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It implies read-only by saying 'Retrieve', but does not explicitly state non-destructive nature, authentication needs, or other behaviors. However, for a simple list retrieval, the implications are somewhat obvious. Adds minimal behavioral context beyond the verb.
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, both efficient. First sentence states purpose, second provides guidance. No extraneous 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?
Tool has no parameters and an output schema exists (per context). Description is complete for a simple list retrieval: it covers purpose and usage guidance, with no obvious gaps given the simplicity.
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?
Input schema has zero parameters, so schema coverage is 100% and no parameter explanation is needed. Description adds no param info, but baseline for 0 parameters is 4; no additional value is expected.
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?
Description clearly states 'Retrieve basic information for all protocols belonging to the current user', which is a specific verb+resource. It also distinguishes from sibling tool get_protocol_steps by noting that tool provides detailed steps.
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?
Explicitly provides when-to-use (get basic info for user's protocols) and when-not (for detailed steps, use get_protocol_steps). Directs to an alternative tool, making usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_protocolA
Retrieve basic information for a specific protocol by its protocol ID. To get detailed protocol steps, use get_protocol_steps.
| Name | Required | Description | Default |
|---|---|---|---|
| protocol_id | Yes | Unique identifier for the protocol |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only says 'basic information' without specifying what that includes (though output schema exists). No mention of authentication, rate limits, side effects, or whether the tool is read-only.
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 concise sentences with no wasted words. The purpose is front-loaded, and the alternative is immediately presented.
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 retrieval tool with one parameter and an output schema, the description is adequate but lacks behavioral context such as idempotency, permissions, or output shape beyond what the output schema provides.
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 coverage for the single parameter is 100%, so baseline is 3. The description adds no additional meaning beyond the schema's 'Unique identifier for the protocol'.
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 action ('Retrieve basic information') and the resource ('specific protocol by its protocol ID'). It distinguishes from the sibling tool 'get_protocol_steps' by directing users to that tool for detailed steps.
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 explicitly tells when to use this tool (for basic info) and when to use an alternative ('get_protocol_steps' for detailed steps). However, it does not mention other siblings like 'search_public_protocols' or 'get_my_protocols', which could be relevant for context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_protocol_stepsA
Retrieve the steps for a specific protocol by its protocol ID.
| Name | Required | Description | Default |
|---|---|---|---|
| protocol_id | Yes | Unique identifier for the protocol |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only indicates a read operation ('Retrieve') but does not disclose authentication needs, behavior on invalid IDs, rate limits, or whether steps are returned in a specific order. This is insufficient for a tool with zero annotation coverage.
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, front-loaded with action and object. It contains no extraneous information and 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 retrieval tool with one parameter and an output schema, the description is adequate but minimal. It could be more complete by noting that steps are returned as a list, whether they are ordered, or error handling. Considering complexity, it is acceptable but not comprehensive.
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 coverage is 100% and the parameter description is present. The description only adds 'by its protocol ID', which echoes the schema's 'Unique identifier for the protocol' without adding substantial new meaning. 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 action 'Retrieve', the resource 'steps for a specific protocol', and the method 'by its protocol ID'. It effectively distinguishes from sibling tools like get_protocol (protocol itself) and add_protocol_step (adds steps).
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 implies usage when you have a protocol ID and need its steps, but provides no explicit guidance on when not to use it or alternatives. It does not mention that for modifying steps one should use other tools like set_protocol_steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_public_protocolsA
Search for public protocols on protocols.io using a keyword. Results are sorted by protocol popularity and paginated with 3 protocols per page (use the page parameter to navigate, default is 1).
When searching for reference protocols to create a new protocol:
Avoid referencing protocols from before 2015 as they may be outdated.
If the found protocols have topics that are not closely related to your needs, ask the user for clearer direction before proceeding.
If the found protocols are highly relevant, use get_protocol_steps to examine at least 2 protocols' detailed steps and integrate insights from different approaches to ensure more reliable protocol development.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Keyword to search for protocols | |
| page | No | Page number for pagination, starting from 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: results sorted by popularity, pagination with 3 per page, default page=1, and the page parameter to navigate. This goes beyond what input schema provides.
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 concise and front-loaded: first sentence states core purpose and key behaviors, second paragraph adds detailed usage guidelines. Every sentence adds value; no duplication or fluff.
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 the presence of an output schema, the description covers all needed context: purpose, behavioral details (sorting, pagination), and post-search actions. It is fully complete for an AI agent to select and use 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?
Schema coverage is 100%, so baseline is 3. The description adds minimal parameter semantics beyond schema (e.g., keyword is search term, page is for pagination with default), but does not significantly enhance understanding of parameter values or constraints.
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 action ('search for public protocols') and the resource ('protocols.io') with a specific scope ('public'). It distinguishes from sibling tools like get_protocol or get_my_protocols by specifying public search.
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 provides explicit when-to-use guidance: for creating a new protocol, avoid pre-2015 protocols, ask for clearer direction if topics are not closely related, and if highly relevant, use get_protocol_steps to examine at least 2 protocols. This clearly differentiates from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_protocol_stepsA
Replace the entire steps list of a specific protocol by its protocol ID with a new steps list. The existing steps will be completely overwritten.
| Name | Required | Description | Default |
|---|---|---|---|
| protocol_id | Yes | Unique identifier for the protocol | |
| steps | Yes | List of steps to set for the protocol |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description highlights the destructive nature ('completely overwritten'), which is important, but lacks other behavioral details such as required permissions, atomicity, or error handling. With no annotations, more context would be beneficial.
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, front-loaded with the action, and contains no unnecessary words. Every sentence adds value.
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 description covers the main intent and destructive behavior well, but could mention the return value or behavior with invalid protocol_id. Given the output schema exists and the tool is simple, it is mostly complete.
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 100% description coverage, so the description adds little beyond what the schema already provides. It reiterates the 'replace entire steps list' idea but does not elaborate on parameter semantics.
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 'replace' and the resource 'the entire steps list of a specific protocol', and it explicitly distinguishes from siblings like add_protocol_step and delete_protocol_step by noting that existing steps are completely overwritten.
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 implies use when overwriting all steps, but does not explicitly state when not to use it (e.g., when only adding or removing individual steps, the siblings should be used). No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_protocol_descriptionA
Update the description of an existing protocol by its protocol ID.
| Name | Required | Description | Default |
|---|---|---|---|
| protocol_id | Yes | Unique identifier for the protocol | |
| description | Yes | New description for the protocol (plain text only) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It does not mention side effects, error conditions, idempotency, or whether the update overwrites or appends. The existence of an output schema mitigates the lack of return value details, but the description is insufficient for full transparency.
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 12 words, directly stating the action, resource, and method. It is front-loaded and concise with no superfluous information.
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 an output schema exists, the description need not explain return values. However, it lacks context on behavioral aspects like permissions or error handling, making it adequate but not complete for a simple update tool.
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 coverage is 100%, and the description adds no extra meaning beyond the schema field descriptions. It provides no additional constraints or context for the 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 clearly specifies the action ('update'), the resource ('description of an existing protocol'), and the identifier ('by its protocol ID'). This distinguishes it from sibling tools like 'update_protocol_title' and 'create_protocol'.
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 implies usage for updating only the description field, contrasted with 'update_protocol_title', but lacks explicit guidance on when to use this tool versus alternatives or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_protocol_titleA
Update the title of an existing protocol by its protocol ID.
| Name | Required | Description | Default |
|---|---|---|---|
| protocol_id | Yes | Unique identifier for the protocol | |
| title | Yes | New title for the protocol (plain text only) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 only says 'Update the title' without detailing mutation behavior, permissions, error handling, or side effects. This is insufficient for a mutation tool.
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, concise sentence with no redundant information. Every word is purposeful and front-loaded.
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 parameters and an output schema. The description adequately covers the action but does not mention what the output contains or error conditions. Given the output schema presence, it is minimally complete.
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% (both parameters have descriptions in the schema), so the baseline is 3. The main description adds no extra meaning beyond the schema, meeting but not exceeding the baseline.
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 action (update), the resource (title of a protocol), and the identifier method (by protocol ID). It distinguishes itself from siblings like create_protocol or update_protocol_description.
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 implies when to use this tool (to change a protocol's title) but does not provide explicit exclusions or comparisons with alternatives. However, given the sibling list, the context is clear enough for proper selection.
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.
10 tool updates
v1.0.3- Changed
add_protocol_step23 fields changed- removed
Input schema / $defs / Material / properties / name / titleRemoved value: -"Name" - removed
Input schema / $defs / Material / properties / quantity / titleRemoved value: -"Quantity" - removed
Input schema / $defs / Material / properties / unit / titleRemoved value: -"Unit" - removed
Input schema / $defs / Material / titleRemoved value: -"Material" - removed
Input schema / $defs / ProtocolStepInput / properties / description / titleRemoved value: -"Description" - removed
Input schema / $defs / ProtocolStepInput / properties / materials / titleRemoved value: -"Materials" - removed
Input schema / $defs / ProtocolStepInput / properties / reference_protocol_ids / titleRemoved value: -"Reference Protocol Ids" - removed
Input schema / $defs / ProtocolStepInput / titleRemoved value: -"ProtocolStepInput" - removed
Input schema / properties / protocol_id / titleRemoved value: -"Protocol Id" - removed
Input schema / properties / step / titleRemoved value: -"Step" - removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Material / properties / name / titleRemoved value: -"Name" - removed
Output schema / $defs / Material / properties / quantity / titleRemoved value: -"Quantity" - removed
Output schema / $defs / Material / properties / unit / titleRemoved value: -"Unit" - removed
Output schema / $defs / Material / titleRemoved value: -"Material" - removed
Output schema / $defs / ProtocolStep / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / ProtocolStep / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / ProtocolStep / properties / materials / titleRemoved value: -"Materials" - removed
Output schema / $defs / ProtocolStep / properties / reference_protocol_ids / titleRemoved value: -"Reference Protocol Ids" - removed
Output schema / $defs / ProtocolStep / titleRemoved value: -"ProtocolStep" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
create_protocol14 fields changed- removed
Input schema / properties / description / titleRemoved value: -"Description" - removed
Input schema / properties / title / titleRemoved value: -"Title" - removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Protocol / properties / created_on / titleRemoved value: -"Created On" - removed
Output schema / $defs / Protocol / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / Protocol / properties / doi / titleRemoved value: -"Doi" - removed
Output schema / $defs / Protocol / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / Protocol / properties / published_on / titleRemoved value: -"Published On" - removed
Output schema / $defs / Protocol / properties / title / titleRemoved value: -"Title" - removed
Output schema / $defs / Protocol / properties / url / titleRemoved value: -"Url" - removed
Output schema / $defs / Protocol / titleRemoved value: -"Protocol" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
delete_protocol_step15 fields changed- removed
Input schema / properties / protocol_id / titleRemoved value: -"Protocol Id" - removed
Input schema / properties / step_id / titleRemoved value: -"Step Id" - removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Material / properties / name / titleRemoved value: -"Name" - removed
Output schema / $defs / Material / properties / quantity / titleRemoved value: -"Quantity" - removed
Output schema / $defs / Material / properties / unit / titleRemoved value: -"Unit" - removed
Output schema / $defs / Material / titleRemoved value: -"Material" - removed
Output schema / $defs / ProtocolStep / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / ProtocolStep / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / ProtocolStep / properties / materials / titleRemoved value: -"Materials" - removed
Output schema / $defs / ProtocolStep / properties / reference_protocol_ids / titleRemoved value: -"Reference Protocol Ids" - removed
Output schema / $defs / ProtocolStep / titleRemoved value: -"ProtocolStep" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
get_my_protocols12 fields changed- removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Protocol / properties / created_on / titleRemoved value: -"Created On" - removed
Output schema / $defs / Protocol / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / Protocol / properties / doi / titleRemoved value: -"Doi" - removed
Output schema / $defs / Protocol / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / Protocol / properties / published_on / titleRemoved value: -"Published On" - removed
Output schema / $defs / Protocol / properties / title / titleRemoved value: -"Title" - removed
Output schema / $defs / Protocol / properties / url / titleRemoved value: -"Url" - removed
Output schema / $defs / Protocol / titleRemoved value: -"Protocol" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
get_protocol13 fields changed- removed
Input schema / properties / protocol_id / titleRemoved value: -"Protocol Id" - removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Protocol / properties / created_on / titleRemoved value: -"Created On" - removed
Output schema / $defs / Protocol / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / Protocol / properties / doi / titleRemoved value: -"Doi" - removed
Output schema / $defs / Protocol / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / Protocol / properties / published_on / titleRemoved value: -"Published On" - removed
Output schema / $defs / Protocol / properties / title / titleRemoved value: -"Title" - removed
Output schema / $defs / Protocol / properties / url / titleRemoved value: -"Url" - removed
Output schema / $defs / Protocol / titleRemoved value: -"Protocol" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
get_protocol_steps14 fields changed- removed
Input schema / properties / protocol_id / titleRemoved value: -"Protocol Id" - removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Material / properties / name / titleRemoved value: -"Name" - removed
Output schema / $defs / Material / properties / quantity / titleRemoved value: -"Quantity" - removed
Output schema / $defs / Material / properties / unit / titleRemoved value: -"Unit" - removed
Output schema / $defs / Material / titleRemoved value: -"Material" - removed
Output schema / $defs / ProtocolStep / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / ProtocolStep / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / ProtocolStep / properties / materials / titleRemoved value: -"Materials" - removed
Output schema / $defs / ProtocolStep / properties / reference_protocol_ids / titleRemoved value: -"Reference Protocol Ids" - removed
Output schema / $defs / ProtocolStep / titleRemoved value: -"ProtocolStep" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
search_public_protocols18 fields changed- removed
Input schema / properties / keyword / titleRemoved value: -"Keyword" - removed
Input schema / properties / page / titleRemoved value: -"Page" - removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Protocol / properties / created_on / titleRemoved value: -"Created On" - removed
Output schema / $defs / Protocol / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / Protocol / properties / doi / titleRemoved value: -"Doi" - removed
Output schema / $defs / Protocol / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / Protocol / properties / published_on / titleRemoved value: -"Published On" - removed
Output schema / $defs / Protocol / properties / title / titleRemoved value: -"Title" - removed
Output schema / $defs / Protocol / properties / url / titleRemoved value: -"Url" - removed
Output schema / $defs / Protocol / titleRemoved value: -"Protocol" - removed
Output schema / $defs / ProtocolSearchResult / properties / current_page / titleRemoved value: -"Current Page" - removed
Output schema / $defs / ProtocolSearchResult / properties / protocols / titleRemoved value: -"Protocols" - removed
Output schema / $defs / ProtocolSearchResult / properties / total_pages / titleRemoved value: -"Total Pages" - removed
Output schema / $defs / ProtocolSearchResult / titleRemoved value: -"ProtocolSearchResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
set_protocol_steps23 fields changed- removed
Input schema / $defs / Material / properties / name / titleRemoved value: -"Name" - removed
Input schema / $defs / Material / properties / quantity / titleRemoved value: -"Quantity" - removed
Input schema / $defs / Material / properties / unit / titleRemoved value: -"Unit" - removed
Input schema / $defs / Material / titleRemoved value: -"Material" - removed
Input schema / $defs / ProtocolStepInput / properties / description / titleRemoved value: -"Description" - removed
Input schema / $defs / ProtocolStepInput / properties / materials / titleRemoved value: -"Materials" - removed
Input schema / $defs / ProtocolStepInput / properties / reference_protocol_ids / titleRemoved value: -"Reference Protocol Ids" - removed
Input schema / $defs / ProtocolStepInput / titleRemoved value: -"ProtocolStepInput" - removed
Input schema / properties / protocol_id / titleRemoved value: -"Protocol Id" - removed
Input schema / properties / steps / titleRemoved value: -"Steps" - removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Material / properties / name / titleRemoved value: -"Name" - removed
Output schema / $defs / Material / properties / quantity / titleRemoved value: -"Quantity" - removed
Output schema / $defs / Material / properties / unit / titleRemoved value: -"Unit" - removed
Output schema / $defs / Material / titleRemoved value: -"Material" - removed
Output schema / $defs / ProtocolStep / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / ProtocolStep / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / ProtocolStep / properties / materials / titleRemoved value: -"Materials" - removed
Output schema / $defs / ProtocolStep / properties / reference_protocol_ids / titleRemoved value: -"Reference Protocol Ids" - removed
Output schema / $defs / ProtocolStep / titleRemoved value: -"ProtocolStep" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
update_protocol_description14 fields changed- removed
Input schema / properties / description / titleRemoved value: -"Description" - removed
Input schema / properties / protocol_id / titleRemoved value: -"Protocol Id" - removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Protocol / properties / created_on / titleRemoved value: -"Created On" - removed
Output schema / $defs / Protocol / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / Protocol / properties / doi / titleRemoved value: -"Doi" - removed
Output schema / $defs / Protocol / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / Protocol / properties / published_on / titleRemoved value: -"Published On" - removed
Output schema / $defs / Protocol / properties / title / titleRemoved value: -"Title" - removed
Output schema / $defs / Protocol / properties / url / titleRemoved value: -"Url" - removed
Output schema / $defs / Protocol / titleRemoved value: -"Protocol" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
update_protocol_title14 fields changed- removed
Input schema / properties / protocol_id / titleRemoved value: -"Protocol Id" - removed
Input schema / properties / title / titleRemoved value: -"Title" - removed
Output schema / $defs / ErrorMessage / properties / error_message / titleRemoved value: -"Error Message" - removed
Output schema / $defs / ErrorMessage / titleRemoved value: -"ErrorMessage" - removed
Output schema / $defs / Protocol / properties / created_on / titleRemoved value: -"Created On" - removed
Output schema / $defs / Protocol / properties / description / titleRemoved value: -"Description" - removed
Output schema / $defs / Protocol / properties / doi / titleRemoved value: -"Doi" - removed
Output schema / $defs / Protocol / properties / id / titleRemoved value: -"Id" - removed
Output schema / $defs / Protocol / properties / published_on / titleRemoved value: -"Published On" - removed
Output schema / $defs / Protocol / properties / title / titleRemoved value: -"Title" - removed
Output schema / $defs / Protocol / properties / url / titleRemoved value: -"Url" - removed
Output schema / $defs / Protocol / titleRemoved value: -"Protocol" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
10 tool updates
- First observed
add_protocol_step - First observed
create_protocol - First observed
delete_protocol_step - First observed
get_my_protocols - First observed
get_protocol - First observed
get_protocol_steps - First observed
search_public_protocols - First observed
set_protocol_steps - First observed
update_protocol_description - First observed
update_protocol_title
TDQS
Each tool has a clearly distinct purpose: create, read, update, delete for protocols and steps, plus search. No overlapping functionality.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., create_protocol, get_protocol_steps). No deviations.
10 tools is well-scoped for managing protocols and steps, covering CRUD operations and search without excess.
Missing explicit delete_protocol tool and individual step update (only add, delete, replace all). Users cannot delete a protocol entirely, which is a notable gap.
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
AI-powered bioprotocol optimization — generate, search, and manage lab protocols via MCP
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Related MCP Servers
- FlicenseDqualityDmaintenanceA server built on mcp-framework that enables integration with Claude Desktop through the Model Context Protocol.11-
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server for Claude Desktop that connects to 302AI's API services, allowing users to integrate and leverage 302AI capabilities through a structured communication interface.91821MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that allows Claude AI to interact with custom tools, enabling extension of Claude's capabilities through the MCP framework.-
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that allows integration with Claude Desktop by creating and managing custom tools that can be executed through the MCP framework.88-
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/hqn21/protocols-io-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server