Hyperledger Fabric MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Hyperledger Fabric MCP Serverquery the blockchain for all assets"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 installConfiguration
Option 1: Environment Variables
Copy the template and configure:
cp env.template .envEdit .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 appUserOr set environment variables and run:
export PRIVATE_KEY_PATH=./path/to/private.key
export CERTIFICATE_PATH=./path/to/cert.pem
npm run create-walletBuild & Run
Stdio Mode (Default)
# Build TypeScript
npm run build
# Run the server
npm start
# Or build and run together
npm run devHTTP Mode (for Web Clients)
Run the MCP server as an HTTP server with SSE support:
MCP_TRANSPORT=http MCP_PORT=8080 npm startAvailable Tools
1. invoke_chaincode
Submit a transaction to the blockchain.
Parameters:
function(string): Chaincode function nameargs(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 nameargs(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 chaincodesequence(number): The sequence number of the chaincode definitionversion(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_readinessProject 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 # DependenciesTroubleshooting
"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 toolscheck_commit_readinessC
Check if a chaincode definition is ready to be committed
| Name | Required | Description | Default |
|---|---|---|---|
| chaincodeName | Yes | The name of the chaincode | |
| sequence | Yes | The sequence number of the chaincode definition | |
| version | Yes | The version of the chaincode |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| chaincodeName | Yes | The name of the chaincode to query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| blockNumber | Yes | The block number to retrieve |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| channelName | Yes | The name of the channel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| chaincodeName | Yes | The name of the chaincode to query |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| assetId | Yes | The ID of the asset to get history for |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| function | Yes | The chaincode function to invoke | |
| args | Yes | Arguments to pass to the chaincode function |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| function | Yes | The chaincode function to query | |
| args | Yes | Arguments to pass to the chaincode function |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It 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.
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.
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.
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.
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.
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.
12 tool updates
v1.0.0- First observed
check_commit_readiness - First observed
get_approved_chaincode - First observed
get_block_info - First observed
get_blockchain_info - First observed
get_channel_info - First observed
get_committed_chaincode - First observed
get_installed_chaincodes - First observed
get_transaction_history - First observed
invoke_chaincode - First observed
list_channels - First observed
list_enrolled_identities - First observed
query_chaincode
TDQS
Scored across 12 tools
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.
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.
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.
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
Related MCP Connectors
Provide AI agents and automation tools with contextual access to blockchain data including balance…
Manage your blockchain infrastructure across 80+ chains with your agents.
AI agent infrastructure for discovery, authorization, execution, identity, and signed receipts.
Connect AI agents to financial institution origination, analytics, and compliance workflows.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with blockchain data and smart contracts through Curvegrid's MultiBaas platform, providing seamless access to blockchain operations and contract functionality.-
- AlicenseNot gradedqualityDmaintenanceEnables 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 npm6MIT

anchain-data-mcpofficial
AlicenseAqualityCmaintenanceEnables AI assistants to access AnChain.AI blockchain intelligence APIs for risk assessment, sanctions screening, and transaction analysis on blockchain addresses and transactions.206AGPL 3.0
Bink MCP Serverofficial
FlicenseNot gradedqualityDmaintenanceEnables 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.-