Skip to main content
Glama
hqn21

protocols-io-mcp-server

by hqn21

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 keyword

  • get_protocol - Get basic protocol information by ID

  • get_protocol_steps - Get detailed steps for a specific protocol

  • get_my_protocols - Retrieve all protocols from your account

Protocol Creation and Management

  • create_protocol - Create a new protocol with title and description

  • update_protocol_title - Update the title of an existing protocol

  • update_protocol_description - Update the description of an existing protocol

Step Management

  • set_protocol_steps - Replace all steps in a protocol

  • add_protocol_step - Add a single step to the end of a protocol

  • delete_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

  1. Visit protocols.io/developers

  2. Sign in to your account

  3. Navigate to the API Clients section

  4. Click ADD CLIENT to create a new application

  5. 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/callback

      • Copy 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:latest

The server will be accessible at http://0.0.0.0:8000/mcp with HTTP transport

Install via pip

pip install protocols-io-mcp

Set 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 8000

CLI 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:

  1. Make sure you have installed the protocols-io-mcp package globally using pip.

  2. Change the command field in your claude_desktop_config.json to the full path of the protocols-io-mcp executable. You can find the path by running:

    which protocols-io-mcp
  3. Your 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:

pytest

License

This project is licensed under the MIT License. See the LICENSE file for details.

Available Tools

10 tools
add_protocol_stepA

Add a step to the end of the steps list for a specific protocol by its protocol ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
protocol_idYesUnique identifier for the protocol
stepYesStep to be added to the protocol

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTitle of the new protocol (plain text only)
descriptionYesDescription of the new protocol (plain text only)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
protocol_idYesUnique identifier for the protocol
step_idYesUnique identifier for the step to be deleted

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
protocol_idYesUnique identifier for the protocol

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
protocol_idYesUnique identifier for the protocol

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYesKeyword to search for protocols
pageNoPage number for pagination, starting from 1

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
protocol_idYesUnique identifier for the protocol
stepsYesList of steps to set for the protocol

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
protocol_idYesUnique identifier for the protocol
descriptionYesNew description for the protocol (plain text only)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
protocol_idYesUnique identifier for the protocol
titleYesNew title for the protocol (plain text only)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 10 tool updatesv1.0.3
    • Changedadd_protocol_step23 fields changed
      • removedInput schema / $defs / Material / properties / name / title
        Removed value: -"Name"
      • removedInput schema / $defs / Material / properties / quantity / title
        Removed value: -"Quantity"
      • removedInput schema / $defs / Material / properties / unit / title
        Removed value: -"Unit"
      • removedInput schema / $defs / Material / title
        Removed value: -"Material"
      • removedInput schema / $defs / ProtocolStepInput / properties / description / title
        Removed value: -"Description"
      • removedInput schema / $defs / ProtocolStepInput / properties / materials / title
        Removed value: -"Materials"
      • removedInput schema / $defs / ProtocolStepInput / properties / reference_protocol_ids / title
        Removed value: -"Reference Protocol Ids"
      • removedInput schema / $defs / ProtocolStepInput / title
        Removed value: -"ProtocolStepInput"
      • removedInput schema / properties / protocol_id / title
        Removed value: -"Protocol Id"
      • removedInput schema / properties / step / title
        Removed value: -"Step"
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Material / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / $defs / Material / properties / quantity / title
        Removed value: -"Quantity"
      • removedOutput schema / $defs / Material / properties / unit / title
        Removed value: -"Unit"
      • removedOutput schema / $defs / Material / title
        Removed value: -"Material"
      • removedOutput schema / $defs / ProtocolStep / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / ProtocolStep / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ProtocolStep / properties / materials / title
        Removed value: -"Materials"
      • removedOutput schema / $defs / ProtocolStep / properties / reference_protocol_ids / title
        Removed value: -"Reference Protocol Ids"
      • removedOutput schema / $defs / ProtocolStep / title
        Removed value: -"ProtocolStep"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedcreate_protocol14 fields changed
      • removedInput schema / properties / description / title
        Removed value: -"Description"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Protocol / properties / created_on / title
        Removed value: -"Created On"
      • removedOutput schema / $defs / Protocol / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / Protocol / properties / doi / title
        Removed value: -"Doi"
      • removedOutput schema / $defs / Protocol / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / Protocol / properties / published_on / title
        Removed value: -"Published On"
      • removedOutput schema / $defs / Protocol / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / $defs / Protocol / properties / url / title
        Removed value: -"Url"
      • removedOutput schema / $defs / Protocol / title
        Removed value: -"Protocol"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changeddelete_protocol_step15 fields changed
      • removedInput schema / properties / protocol_id / title
        Removed value: -"Protocol Id"
      • removedInput schema / properties / step_id / title
        Removed value: -"Step Id"
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Material / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / $defs / Material / properties / quantity / title
        Removed value: -"Quantity"
      • removedOutput schema / $defs / Material / properties / unit / title
        Removed value: -"Unit"
      • removedOutput schema / $defs / Material / title
        Removed value: -"Material"
      • removedOutput schema / $defs / ProtocolStep / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / ProtocolStep / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ProtocolStep / properties / materials / title
        Removed value: -"Materials"
      • removedOutput schema / $defs / ProtocolStep / properties / reference_protocol_ids / title
        Removed value: -"Reference Protocol Ids"
      • removedOutput schema / $defs / ProtocolStep / title
        Removed value: -"ProtocolStep"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_my_protocols12 fields changed
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Protocol / properties / created_on / title
        Removed value: -"Created On"
      • removedOutput schema / $defs / Protocol / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / Protocol / properties / doi / title
        Removed value: -"Doi"
      • removedOutput schema / $defs / Protocol / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / Protocol / properties / published_on / title
        Removed value: -"Published On"
      • removedOutput schema / $defs / Protocol / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / $defs / Protocol / properties / url / title
        Removed value: -"Url"
      • removedOutput schema / $defs / Protocol / title
        Removed value: -"Protocol"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_protocol13 fields changed
      • removedInput schema / properties / protocol_id / title
        Removed value: -"Protocol Id"
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Protocol / properties / created_on / title
        Removed value: -"Created On"
      • removedOutput schema / $defs / Protocol / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / Protocol / properties / doi / title
        Removed value: -"Doi"
      • removedOutput schema / $defs / Protocol / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / Protocol / properties / published_on / title
        Removed value: -"Published On"
      • removedOutput schema / $defs / Protocol / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / $defs / Protocol / properties / url / title
        Removed value: -"Url"
      • removedOutput schema / $defs / Protocol / title
        Removed value: -"Protocol"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_protocol_steps14 fields changed
      • removedInput schema / properties / protocol_id / title
        Removed value: -"Protocol Id"
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Material / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / $defs / Material / properties / quantity / title
        Removed value: -"Quantity"
      • removedOutput schema / $defs / Material / properties / unit / title
        Removed value: -"Unit"
      • removedOutput schema / $defs / Material / title
        Removed value: -"Material"
      • removedOutput schema / $defs / ProtocolStep / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / ProtocolStep / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ProtocolStep / properties / materials / title
        Removed value: -"Materials"
      • removedOutput schema / $defs / ProtocolStep / properties / reference_protocol_ids / title
        Removed value: -"Reference Protocol Ids"
      • removedOutput schema / $defs / ProtocolStep / title
        Removed value: -"ProtocolStep"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsearch_public_protocols18 fields changed
      • removedInput schema / properties / keyword / title
        Removed value: -"Keyword"
      • removedInput schema / properties / page / title
        Removed value: -"Page"
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Protocol / properties / created_on / title
        Removed value: -"Created On"
      • removedOutput schema / $defs / Protocol / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / Protocol / properties / doi / title
        Removed value: -"Doi"
      • removedOutput schema / $defs / Protocol / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / Protocol / properties / published_on / title
        Removed value: -"Published On"
      • removedOutput schema / $defs / Protocol / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / $defs / Protocol / properties / url / title
        Removed value: -"Url"
      • removedOutput schema / $defs / Protocol / title
        Removed value: -"Protocol"
      • removedOutput schema / $defs / ProtocolSearchResult / properties / current_page / title
        Removed value: -"Current Page"
      • removedOutput schema / $defs / ProtocolSearchResult / properties / protocols / title
        Removed value: -"Protocols"
      • removedOutput schema / $defs / ProtocolSearchResult / properties / total_pages / title
        Removed value: -"Total Pages"
      • removedOutput schema / $defs / ProtocolSearchResult / title
        Removed value: -"ProtocolSearchResult"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedset_protocol_steps23 fields changed
      • removedInput schema / $defs / Material / properties / name / title
        Removed value: -"Name"
      • removedInput schema / $defs / Material / properties / quantity / title
        Removed value: -"Quantity"
      • removedInput schema / $defs / Material / properties / unit / title
        Removed value: -"Unit"
      • removedInput schema / $defs / Material / title
        Removed value: -"Material"
      • removedInput schema / $defs / ProtocolStepInput / properties / description / title
        Removed value: -"Description"
      • removedInput schema / $defs / ProtocolStepInput / properties / materials / title
        Removed value: -"Materials"
      • removedInput schema / $defs / ProtocolStepInput / properties / reference_protocol_ids / title
        Removed value: -"Reference Protocol Ids"
      • removedInput schema / $defs / ProtocolStepInput / title
        Removed value: -"ProtocolStepInput"
      • removedInput schema / properties / protocol_id / title
        Removed value: -"Protocol Id"
      • removedInput schema / properties / steps / title
        Removed value: -"Steps"
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Material / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / $defs / Material / properties / quantity / title
        Removed value: -"Quantity"
      • removedOutput schema / $defs / Material / properties / unit / title
        Removed value: -"Unit"
      • removedOutput schema / $defs / Material / title
        Removed value: -"Material"
      • removedOutput schema / $defs / ProtocolStep / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / ProtocolStep / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ProtocolStep / properties / materials / title
        Removed value: -"Materials"
      • removedOutput schema / $defs / ProtocolStep / properties / reference_protocol_ids / title
        Removed value: -"Reference Protocol Ids"
      • removedOutput schema / $defs / ProtocolStep / title
        Removed value: -"ProtocolStep"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedupdate_protocol_description14 fields changed
      • removedInput schema / properties / description / title
        Removed value: -"Description"
      • removedInput schema / properties / protocol_id / title
        Removed value: -"Protocol Id"
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Protocol / properties / created_on / title
        Removed value: -"Created On"
      • removedOutput schema / $defs / Protocol / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / Protocol / properties / doi / title
        Removed value: -"Doi"
      • removedOutput schema / $defs / Protocol / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / Protocol / properties / published_on / title
        Removed value: -"Published On"
      • removedOutput schema / $defs / Protocol / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / $defs / Protocol / properties / url / title
        Removed value: -"Url"
      • removedOutput schema / $defs / Protocol / title
        Removed value: -"Protocol"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedupdate_protocol_title14 fields changed
      • removedInput schema / properties / protocol_id / title
        Removed value: -"Protocol Id"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / $defs / ErrorMessage / properties / error_message / title
        Removed value: -"Error Message"
      • removedOutput schema / $defs / ErrorMessage / title
        Removed value: -"ErrorMessage"
      • removedOutput schema / $defs / Protocol / properties / created_on / title
        Removed value: -"Created On"
      • removedOutput schema / $defs / Protocol / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / Protocol / properties / doi / title
        Removed value: -"Doi"
      • removedOutput schema / $defs / Protocol / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / Protocol / properties / published_on / title
        Removed value: -"Published On"
      • removedOutput schema / $defs / Protocol / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / $defs / Protocol / properties / url / title
        Removed value: -"Url"
      • removedOutput schema / $defs / Protocol / title
        Removed value: -"Protocol"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
  2. 10 tool updates
    • First observedadd_protocol_step
    • First observedcreate_protocol
    • First observeddelete_protocol_step
    • First observedget_my_protocols
    • First observedget_protocol
    • First observedget_protocol_steps
    • First observedsearch_public_protocols
    • First observedset_protocol_steps
    • First observedupdate_protocol_description
    • First observedupdate_protocol_title

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: create, read, update, delete for protocols and steps, plus search. No overlapping functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., create_protocol, get_protocol_steps). No deviations.

Tool Count5/5

10 tools is well-scoped for managing protocols and steps, covering CRUD operations and search without excess.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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