Skip to main content
Glama
adityajoshi12

Hyperledger Fabric MCP Server

Hyperledger Fabric MCP Server

A Model Context Protocol (MCP) server that enables AI assistants to interact with Hyperledger Fabric blockchain networks.

Features

  • Query Chaincode - Execute read-only queries on smart contracts

  • Invoke Chaincode - Submit transactions to the blockchain

  • Get Block Info - Retrieve detailed information about specific blocks

  • Get Blockchain Info - Get network statistics (block height, hashes)

  • Get Transaction History - View history for specific assets

  • List Enrolled Identities - View wallet identities

  • Chaincode Lifecycle Management - Query installed, approved, and committed chaincodes

  • Commit Readiness Check - Verify chaincode definitions before committing

  • Channel Management - List channels and get channel information

  • Multiple Transport Modes - Supports both stdio and HTTP/SSE (for web clients)

Related MCP server: AI Network MCP Server

Prerequisites

  • Node.js v18+

  • A running Hyperledger Fabric network

  • Valid connection profile JSON

  • Enrolled user identity (certificate + private key)

Installation

npm install

Configuration

Option 1: Environment Variables

Copy the template and configure:

cp env.template .env

Edit .env with your settings:

# Fabric Network Configuration
FABRIC_CHANNEL=mychannel
FABRIC_CHAINCODE=basic
FABRIC_MSP_ID=Org1MSP
FABRIC_WALLET_PATH=./wallet
FABRIC_CONNECTION_PROFILE=./connection-profile.json
FABRIC_USER_ID=appUser

# Transport Configuration (optional)
MCP_TRANSPORT=stdio    # "stdio" or "http"
MCP_PORT=3000          # HTTP port (only used when MCP_TRANSPORT=http)

Option 2: Claude Desktop Config

Add environment variables directly in claude_desktop_config.json:

{
  "mcpServers": {
    "hyperledger-fabric": {
      "command": "npx",
      "args": ["-y", "@adityajoshi12/fabric-mcp-server"],
      "env": {
        "FABRIC_CHANNEL": "mychannel",
        "FABRIC_CHAINCODE": "basic",
        "FABRIC_MSP_ID": "Org1MSP",
        "FABRIC_WALLET_PATH": "/path/to/wallet",
        "FABRIC_CONNECTION_PROFILE": "/path/to/connection-profile.json",
        "FABRIC_USER_ID": "appUser"
      }
    }
  }
}

Wallet Setup

Create a wallet from your certificate and private key:

npm run create-wallet -- ./path/to/private.key ./path/to/cert.pem Org1MSP appUser

Or set environment variables and run:

export PRIVATE_KEY_PATH=./path/to/private.key
export CERTIFICATE_PATH=./path/to/cert.pem
npm run create-wallet

Build & Run

Stdio Mode (Default)

# Build TypeScript
npm run build

# Run the server
npm start

# Or build and run together
npm run dev

HTTP Mode (for Web Clients)

Run the MCP server as an HTTP server with SSE support:

MCP_TRANSPORT=http MCP_PORT=8080 npm start

Available Tools

1. invoke_chaincode

Submit a transaction to the blockchain.

Parameters:

  • function (string): Chaincode function name

  • args (array): Arguments to pass

Example:

CreateAsset with args: ["asset1", "blue", "20", "john", "500"]

2. query_chaincode

Query the blockchain (read-only).

Parameters:

  • function (string): Chaincode function name

  • args (array): Arguments to pass

Example:

GetAllAssets with args: []
ReadAsset with args: ["asset1"]

3. get_block_info

Get information about a specific block.

Parameters:

  • blockNumber (number): The block number to retrieve

4. get_blockchain_info

Get blockchain statistics including total blocks and hashes.

Parameters: None

5. get_transaction_history

Get transaction history for an asset (requires chaincode support).

Parameters:

  • assetId (string): The asset ID

6. list_enrolled_identities

List all identities in the wallet.

Parameters: None

7. get_installed_chaincodes

Get list of chaincodes installed on the peer.

Parameters: None

8. get_approved_chaincode

Get the approved chaincode definition for an organization.

Parameters:

  • chaincodeName (string): The name of the chaincode

9. get_committed_chaincode

Get the committed chaincode definition on the channel.

Parameters:

  • chaincodeName (string): The name of the chaincode

10. check_commit_readiness

Check if a chaincode definition is ready to be committed.

Parameters:

  • chaincodeName (string): The name of the chaincode

  • sequence (number): The sequence number of the chaincode definition

  • version (string): The version of the chaincode

11. list_channels

List all channels the peer has joined.

Parameters: None

12. get_channel_info

Get information about a specific channel.

Parameters:

  • channelName (string): The name of the channel

Example Usage with AI Assistant

"How many blocks are in the network?"
→ Uses get_blockchain_info

"List all assets"
→ Uses query_chaincode with GetAllAssets

"Create an asset with ID 1001, color red, size 20, owner john, value 500"
→ Uses invoke_chaincode with CreateAsset

"Show me block 10"
→ Uses get_block_info with blockNumber 10

"What chaincodes are installed?"
→ Uses get_installed_chaincodes

"Is the 'basic' chaincode committed?"
→ Uses get_committed_chaincode with chaincodeName "basic"

"List all channels"
→ Uses list_channels

"Check commit readiness for chaincode 'mycc' version 1.0"
→ Uses check_commit_readiness

Project Structure

fabric-mcp-server/
├── app.ts              # Main MCP server
├── create-wallet.ts    # Wallet creation utility
├── dist/               # Compiled JavaScript
├── wallet/             # Identity wallet
├── env.template        # Environment template
├── tsconfig.json       # TypeScript config
└── package.json        # Dependencies

Troubleshooting

"Identity not found in wallet"

Run npm run create-wallet with your credentials.

"Cannot find module" error

Ensure you've run npm run build and the path in config is absolute.

Connection errors

Verify your connection profile paths and that the Fabric network is running.

Usage

Using npx (without installing)

{
  "mcpServers": {
    "hyperledger-fabric": {
      "command": "npx",
      "args": ["-y", "fabric-mcp-server"],
      "env": {
        "FABRIC_CHANNEL": "mychannel",
        "FABRIC_CHAINCODE": "basic",
        "FABRIC_MSP_ID": "Org1MSP",
        "FABRIC_WALLET_PATH": "/path/to/wallet",
        "FABRIC_CONNECTION_PROFILE": "/path/to/connection-profile.json",
        "FABRIC_USER_ID": "appUser"
      }
    }
  }
}

Installing locally

npm install -g fabric-mcp-server
{
  "mcpServers": {
    "hyperledger-fabric": {
      "command": "fabric-mcp-server",
      "env": {
        "FABRIC_CHANNEL": "mychannel",
        "FABRIC_CHAINCODE": "basic",
        "FABRIC_MSP_ID": "Org1MSP",
        "FABRIC_WALLET_PATH": "/path/to/wallet",
        "FABRIC_CONNECTION_PROFILE": "/path/to/connection-profile.json",
        "FABRIC_USER_ID": "appUser"
      }
    }
  }
}

Using SSE

{
  "mcpServers": {
    "hyperledger-fabric": {
      "url": "http://localhost:3000/mcp",
    }
  }
}

License

ISC

Available Tools

12 tools
check_commit_readinessC

Check if a chaincode definition is ready to be committed

ParametersJSON Schema
NameRequiredDescriptionDefault
chaincodeNameYesThe name of the chaincode
sequenceYesThe sequence number of the chaincode definition
versionYesThe version of the chaincode

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read-only check but doesn't disclose permissions needed, rate limits, error conditions, or what 'ready' means operationally. This is inadequate for a tool with potential complexity.

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, efficient sentence that directly states the tool's purpose without redundancy. It's appropriately sized and front-loaded, with every word contributing to clarity.

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 no annotations, no output schema, and a tool that likely returns a readiness status, the description is incomplete. It doesn't explain what 'ready' entails, the format of the result, or error handling, leaving significant gaps for agent understanding.

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 parameters are well-documented in the schema. The description adds no additional meaning beyond implying these parameters identify the chaincode definition to check, aligning with but not enhancing the schema.

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 verb ('Check') and resource ('chaincode definition'), specifying what the tool does. It distinguishes from siblings like 'get_approved_chaincode' or 'get_committed_chaincode' by focusing on readiness assessment rather than retrieval, but doesn't explicitly contrast them.

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?

The description provides no guidance on when to use this tool versus alternatives like 'get_approved_chaincode' or 'get_committed_chaincode'. It lacks context about prerequisites, timing in the deployment workflow, or exclusions, leaving usage unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_approved_chaincodeC

Get the approved chaincode definition for an organization

ParametersJSON Schema
NameRequiredDescriptionDefault
chaincodeNameYesThe name of the chaincode to query

TDQS

C2.9/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 states the tool retrieves information ('Get'), implying a read-only operation, but doesn't specify permissions required, rate limits, or what the output format looks like. This is insufficient for a tool with no 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, clear sentence with no wasted words. It's front-loaded with the core purpose, making it efficient and easy to parse.

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 complexity of blockchain operations, no annotations, and no output schema, the description is incomplete. It doesn't explain what an 'approved chaincode definition' entails, how it differs from committed chaincodes, or what the return value includes, leaving significant gaps for an AI agent.

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, with the single parameter 'chaincodeName' documented as 'The name of the chaincode to query'. The description adds no additional semantic details beyond this, so it meets the baseline score of 3 where the schema does the heavy lifting.

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 ('Get') and resource ('approved chaincode definition for an organization'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_committed_chaincode' or 'query_chaincode', which prevents a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives like 'get_committed_chaincode' or 'query_chaincode'. It lacks context about prerequisites, such as whether the chaincode must be installed or committed first, leaving usage unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_blockchain_infoB

Get blockchain information including total block count, current block hash, and previous block hash

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/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 the full burden of behavioral disclosure. It states this is a read operation ('Get'), implying it's non-destructive, but fails to mention any constraints like permissions required, rate limits, network dependencies, or error conditions. For a tool with zero annotation coverage, this leaves significant gaps in understanding its operational behavior.

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, efficient sentence that directly states the tool's purpose and enumerates the key information returned. It is front-loaded with the core action and avoids any redundant or extraneous details, making it highly concise and well-structured.

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 the tool's simplicity (0 parameters, no annotations, no output schema), the description adequately covers the basic purpose and output data points. However, it lacks context on behavioral aspects like error handling or performance, and does not clarify differentiation from sibling tools, which could hinder the agent's ability to use it correctly in a broader workflow.

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?

The input schema has 0 parameters with 100% coverage, so the schema fully documents the lack of inputs. The description appropriately adds no parameter details, as none are needed. This aligns with the baseline expectation for zero-parameter tools, where the description focuses on output semantics instead.

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 ('Get') and the resource ('blockchain information'), specifying three concrete data points: total block count, current block hash, and previous block hash. However, it does not explicitly differentiate this tool from its sibling 'get_block_info', which might retrieve information about a specific block rather than overall blockchain metadata.

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?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_block_info' (for specific block details) and 'get_channel_info' (possibly for channel-level data), the agent lacks explicit direction on selecting this tool for high-level blockchain metadata over other informational tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_block_infoC

Get information about a specific block

ParametersJSON Schema
NameRequiredDescriptionDefault
blockNumberYesThe block number to retrieve

TDQS

C2.9/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 the full burden. It states it 'gets information,' implying a read-only operation, but doesn't disclose behavioral traits such as error handling (e.g., invalid block numbers), performance aspects (e.g., latency), or output format. This leaves significant gaps for a tool with no 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, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it highly concise and well-structured for quick understanding.

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 complexity of blockchain tools, no annotations, and no output schema, the description is incomplete. It doesn't explain what information is returned (e.g., block details, transactions), potential errors, or how it fits into the broader context of sibling tools. This leaves the agent with insufficient guidance for effective use.

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, with 'blockNumber' clearly documented as 'The block number to retrieve.' The description adds no additional meaning beyond this, such as format details or constraints. Given the high schema coverage, the baseline score of 3 is appropriate, as the schema handles the parameter documentation adequately.

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 ('Get information') and resource ('about a specific block'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_blockchain_info' or 'get_transaction_history', which might also retrieve block-related information, so it doesn't achieve full distinction.

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?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_blockchain_info' (likely broader blockchain data) and 'get_transaction_history' (transaction-focused), there's no indication of context, prerequisites, or exclusions for this specific block retrieval tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_channel_infoC

Get information about a specific channel

ParametersJSON Schema
NameRequiredDescriptionDefault
channelNameYesThe name of the channel

TDQS

C2.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 states it 'gets information' but doesn't disclose behavioral traits such as read-only vs. mutative nature, permission requirements, rate limits, or error handling. This leaves critical gaps for a tool in a blockchain context.

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 zero waste. It's appropriately sized and front-loaded, efficiently conveying the core purpose without unnecessary elaboration, earning full marks for conciseness.

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 complexity of blockchain tools and lack of annotations or output schema, the description is incomplete. It doesn't explain what information is returned, error conditions, or how it fits with siblings, leaving the agent with insufficient context for reliable use.

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%, with the parameter 'channelName' fully documented in the schema. The description adds no meaning beyond this, as it doesn't elaborate on parameter usage or constraints. Baseline 3 is appropriate since the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get information about a specific channel' states the action (get) and resource (channel), but it's vague about what 'information' entails. It doesn't differentiate from siblings like 'list_channels' or 'get_blockchain_info', leaving ambiguity about scope.

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. With siblings like 'list_channels' (for listing) and 'get_blockchain_info' (for broader info), the description lacks context for selection, offering no explicit when/when-not or alternative references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_committed_chaincodeC

Get the committed chaincode definition on the channel

ParametersJSON Schema
NameRequiredDescriptionDefault
chaincodeNameYesThe name of the chaincode to query

TDQS

C2.9/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 the full burden. It states it's a 'Get' operation, implying read-only behavior, but lacks details on permissions, error handling, or response format. For a tool in a blockchain context with potential complexity, this is insufficient.

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 wasted words, making it highly concise and front-loaded. It efficiently conveys the core purpose without unnecessary elaboration.

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 lack of annotations and output schema, and the tool's role in a complex blockchain environment, the description is too minimal. It doesn't address what 'committed chaincode definition' entails, potential outputs, or interaction nuances, leaving significant gaps for an AI agent.

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%, with the parameter 'chaincodeName' fully documented in the schema. The description doesn't add any extra meaning beyond implying it queries a specific chaincode, so it meets the baseline but doesn't enhance parameter understanding.

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 ('Get') and resource ('committed chaincode definition on the channel'), making the purpose understandable. However, it doesn't explicitly differentiate from siblings like 'get_approved_chaincode' or 'query_chaincode', which might have overlapping query functions, so it misses the highest score.

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?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_approved_chaincode' and 'query_chaincode' available, there's no indication of specific contexts, prerequisites, or exclusions for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_installed_chaincodesB

Get list of chaincodes installed on the peer

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/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 indicates a read operation ('Get list'), but lacks details on permissions, rate limits, error conditions, or output format. This leaves significant gaps for an agent to understand how to use it effectively.

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 wasted words. It's front-loaded with the core purpose and efficiently conveys the essential information without unnecessary elaboration.

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 lack of annotations and output schema, the description is incomplete. It doesn't explain what the returned list contains (e.g., format, fields), potential errors, or dependencies. For a tool in a complex domain like blockchain, more context is needed for effective use.

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?

The tool has 0 parameters, and the input schema has 100% description coverage, so there are no parameters to document. The description doesn't need to add parameter semantics, but it could have mentioned if any implicit parameters exist (e.g., peer context). Baseline is 4 for zero parameters.

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 ('Get list') and resource ('chaincodes installed on the peer'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_approved_chaincode' or 'get_committed_chaincode', which prevents a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives like 'get_approved_chaincode' or 'get_committed_chaincode', nor does it mention prerequisites or context for usage. It states what the tool does but not when it's appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_transaction_historyC

Get the transaction history for a specific asset

ParametersJSON Schema
NameRequiredDescriptionDefault
assetIdYesThe ID of the asset to get history for

TDQS

C2.9/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 the full burden. It states 'Get' implies a read operation, but lacks details on permissions, rate limits, pagination, or return format. For a blockchain tool with potential complexity, this minimal disclosure is insufficient.

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 zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded for a simple tool.

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 no annotations and no output schema, the description is incomplete. It doesn't explain what the transaction history includes (e.g., format, fields), behavioral traits, or how it fits among sibling tools. For a tool in a complex blockchain environment, more context is needed.

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%, with the single parameter 'assetId' well-documented in the schema. The description adds no additional meaning beyond implying it's for a 'specific asset', which aligns with the schema but doesn't provide extra context like asset format or examples.

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 verb 'Get' and the resource 'transaction history for a specific asset', making the purpose understandable. However, it doesn't differentiate from sibling tools like 'query_chaincode' or 'get_block_info', which might also retrieve transaction-related data in this blockchain context.

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?

The description provides no guidance on when to use this tool versus alternatives. In a server with many blockchain-related tools (e.g., 'query_chaincode', 'get_block_info'), it doesn't specify scenarios, prerequisites, or exclusions for selecting this tool over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

invoke_chaincodeC

Invoke a transaction on the Hyperledger Fabric chaincode

ParametersJSON Schema
NameRequiredDescriptionDefault
functionYesThe chaincode function to invoke
argsYesArguments to pass to the chaincode function

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. 'Invoke a transaction' suggests a write/mutation operation, but the description doesn't clarify permissions required, whether this is destructive, what happens on failure, or any rate limits. This is inadequate for a tool that likely modifies blockchain state.

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, efficient sentence with zero wasted words. It's appropriately sized and front-loaded with the essential information about what the tool does.

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?

For a tool that likely performs blockchain mutations with no annotations and no output schema, the description is insufficient. It doesn't explain what 'invoke' means in Hyperledger Fabric context, what gets returned, or how this differs from query operations among the sibling tools.

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 schema already documents both parameters thoroughly. The description adds no additional parameter context beyond what's in the schema, maintaining the baseline score for high schema coverage.

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 ('invoke a transaction') and target resource ('on the Hyperledger Fabric chaincode'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'query_chaincode' which might also interact with chaincode but for different purposes.

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?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'query_chaincode' and 'get_transaction_history' available, there's no indication whether this is for write operations, read operations, or specific types of chaincode interactions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_channelsB

List all channels the peer has joined

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. While 'List all channels' implies a read operation, it doesn't specify whether this requires authentication, what format the output takes, whether results are paginated, or any rate limits. For a tool with zero annotation coverage, this is insufficient behavioral context.

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, efficient sentence with zero wasted words. It's appropriately sized for a simple list operation and front-loads the core functionality immediately. Every word earns its place in conveying the tool's purpose.

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 the tool's simplicity (no parameters, no output schema, no annotations), the description is minimally adequate but has clear gaps. It states what the tool does but lacks behavioral context about authentication, output format, or usage guidelines. For a read operation in a blockchain context, more context about what 'channels the peer has joined' means would be helpful.

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?

The tool has zero parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, and doesn't need to compensate for any parameter documentation gaps.

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 ('List all') and resource ('channels the peer has joined'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from potential sibling channel-related tools (like 'get_channel_info'), which would require explicit differentiation for a score of 5.

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?

The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when this tool is appropriate versus other channel-related tools like 'get_channel_info', or any contextual limitations. It simply states what the tool does without usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_enrolled_identitiesB

List all identities enrolled in the wallet

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/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 states it's a list operation but doesn't cover critical aspects like whether it's read-only, pagination behavior, rate limits, authentication requirements, or what 'enrolled' means in this context. The description is too minimal for a tool in a blockchain environment.

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, efficient sentence with zero wasted words. It's appropriately sized for a simple list operation and gets straight to the point without unnecessary elaboration.

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 complexity of blockchain/wallet systems and the lack of both annotations and output schema, the description is insufficient. It doesn't explain what constitutes an 'identity' or 'enrolled,' doesn't describe the return format, and provides no behavioral context. For a tool in this domain, more completeness is needed.

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?

The input schema has 0 parameters with 100% coverage, so there are no parameters to document. The description appropriately doesn't discuss parameters, maintaining focus on the tool's purpose. This meets the baseline expectation for parameter-less tools.

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 ('List all') and the resource ('identities enrolled in the wallet'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'query_chaincode' or 'get_transaction_history', which might also involve identity-related queries in this blockchain/wallet context.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context, or exclusions, leaving the agent to infer usage based on the name alone. This is a significant gap given the sibling tools include various query and retrieval functions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_chaincodeB

Query the Hyperledger Fabric chaincode (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
functionYesThe chaincode function to query
argsYesArguments to pass to the chaincode function

TDQS

B3.2/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 discloses 'read-only' behavior, which is helpful, but fails to mention other critical traits like authentication requirements, rate limits, error handling, or what the query returns (e.g., data format, success/failure). For a tool with no annotations, this is insufficient.

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, efficient sentence with zero waste. It front-loads the key information ('query the Hyperledger Fabric chaincode') and adds a clarifying note ('read-only'), making it appropriately sized and well-structured.

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 no annotations, no output schema, and a tool that performs queries (which could have complex behaviors), the description is incomplete. It lacks details on return values, error cases, or operational constraints, making it inadequate for an agent to use the tool effectively without guesswork.

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 schema fully documents both parameters ('function' and 'args'). The description adds no additional meaning beyond implying these are for querying chaincode, which is already clear from the schema. Baseline 3 is appropriate as the schema does the heavy lifting.

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 ('query') and resource ('Hyperledger Fabric chaincode'), making the purpose understandable. It distinguishes from siblings like 'invoke_chaincode' by specifying 'read-only', but doesn't fully differentiate from other read operations like 'get_blockchain_info' or 'get_transaction_history' that might also query data.

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 read-only queries on chaincode, suggesting when to use it (for querying) versus alternatives like 'invoke_chaincode' (for writes). However, it lacks explicit guidance on when to choose this over other read tools (e.g., 'get_transaction_history') or prerequisites, leaving some ambiguity.

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.

  1. 12 tool updatesv1.0.0
    • First observedcheck_commit_readiness
    • First observedget_approved_chaincode
    • First observedget_block_info
    • First observedget_blockchain_info
    • First observedget_channel_info
    • First observedget_committed_chaincode
    • First observedget_installed_chaincodes
    • First observedget_transaction_history
    • First observedinvoke_chaincode
    • First observedlist_channels
    • First observedlist_enrolled_identities
    • First observedquery_chaincode

TDQS

A3.5/5.0

Scored across 12 tools

Disambiguation5/5

Every tool has a clearly distinct purpose targeting specific resources or actions in the Hyperledger Fabric domain, such as checking commit readiness, getting blockchain info, invoking chaincode, or listing channels. There is no overlap or ambiguity between tools, making it easy for an agent to select the correct one.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern, using verbs like 'check', 'get', 'invoke', 'list', and 'query' paired with specific nouns. This uniformity enhances readability and predictability, with no deviations in style or convention.

Tool Count5/5

With 12 tools, the server is well-scoped for managing Hyperledger Fabric operations, covering key areas like chaincode, channels, blocks, and identities. Each tool serves a distinct function, and the count is neither too sparse nor overwhelming for the domain.

Completeness4/5

The tool set provides comprehensive coverage for core Hyperledger Fabric workflows, including querying, invoking, and managing chaincode, channels, and blockchain data. A minor gap exists in lifecycle management, such as creating or deleting channels or chaincodes, but agents can likely work around this with the available tools.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with blockchain data and smart contracts through Curvegrid's MultiBaas platform, providing seamless access to blockchain operations and contract functionality.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with the AI Network blockchain by managing accounts, submitting transactions, and reading database values. It supports registering Hyper Agents and accessing a Layer 2 DAG-based shared agent memory system based on staking status.
    681 npm
    6
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to perform blockchain operations like wallet management, token info, DeFi swaps, cross-chain bridging, and price checking across Ethereum, BNB Chain, and Solana.
    -