TAP-MCP: Model Context Protocol Server for TAP
A Model Context Protocol (MCP) server that provides AI applications with standardized access to Transaction Authorization Protocol (TAP) functionality. This enables LLMs and AI agents to create, manage, and monitor TAP transactions through a well-defined interface.
Overview
TAP-MCP is a thin wrapper around TAP Node that exposes transaction authorization functionality through the Model Context Protocol standard. This enables AI applications to:
- Agent Management: Create TAP agents with auto-generated DIDs and manage cryptographic identities
- Transaction Creation: Initiate transfers, payments, and other TAP operations
- Agent-Specific Message Monitoring: Access transaction history and message details from individual agent storage
- Multi-Recipient Message Delivery: Full DIDComm compliance with delivery to all recipients in the
tofield - Schema Access: Get JSON schemas for TAP message types
- Per-Agent Storage: Each agent has isolated SQLite storage at
~/.tap/{sanitized_did}/transactions.db
Key design principles:
- Agents are cryptographic identities (DIDs) without predefined roles
- Roles (SettlementAddress, Exchange, Compliance, etc.) are specified per transaction
- Party associations are transaction-specific, not stored with agents
- Automatic DID generation ensures globally unique identifiers
- All transaction and message operations require an
agent_didparameter to specify which agent signs the message - Agent-Specific Storage: Each agent has its own isolated SQLite database for transactions and messages
Installation
Prerequisites
- Rust 1.70+ with Cargo
- SQLite 3.0+
- TAP ecosystem components (tap-node, tap-agent, tap-msg)
Build from Source
# Clone the repository
# Build the project
# Install globally (optional)
Quick Start
1. Basic Usage
Run the MCP server with default settings:
The server will:
- Use
~/.tapas the TAP root directory - Create DID-based storage (if --agent-did is provided)
- Listen for MCP requests on stdin/stdout
2. Custom Configuration
# Use specific agent DID for organized storage
# This creates database at ~/.tap/did_web_example.com/transactions.db
# Use custom TAP root directory
# Enable debug logging
# Show all options
3. Integration with AI Applications
TAP-MCP uses stdio transport, making it compatible with MCP clients like Claude Desktop:
Available Tools
TAP-MCP provides 8 comprehensive tools covering the complete TAP transaction lifecycle:
Agent Management
tap_create_agent
Create a new TAP agent with auto-generated DID. Agents are cryptographic identities; roles and party associations are specified per transaction.
Returns:
tap_list_agents
List all configured agents from ~/.tap/keys.json.
Transaction Creation
tap_create_transfer
Initiate a new TAP transfer transaction (TAIP-3). Requires specifying which agent will sign the message.
Transaction Actions
tap_authorize
Authorize a TAP transaction (TAIP-4). The agent_did specifies which agent signs the authorization.
tap_reject
Reject a TAP transaction (TAIP-4). The agent_did specifies which agent signs the rejection.
tap_cancel
Cancel a TAP transaction (TAIP-5). The agent_did specifies which agent signs the cancellation.
tap_settle
Settle a TAP transaction (TAIP-6). The agent_did specifies which agent signs the settlement.
Transaction Management
tap_list_transactions
List transactions with filtering and pagination support. Shows only transactions from the specified agent's storage.
Available Resources
tap://agents
Read-only access to agent information.
tap://agents # All agents with their DIDs and labels
tap://messages
Access to transaction messages and history from agent-specific storage.
tap://messages?agent_did=did:key:z6Mk... # Messages for specific agent (required)
tap://messages?agent_did=did:key:z6Mk...&direction=incoming # Filter by direction
tap://messages?agent_did=did:key:z6Mk...&direction=outgoing # Outgoing messages only
tap://messages?agent_did=did:key:z6Mk...&thread_id=abc123 # Filter by thread
tap://messages?agent_did=did:key:z6Mk...&type=Transfer # Filter by message type
tap://messages?agent_did=did:key:z6Mk...&limit=100&offset=50 # Pagination
tap://messages/msg-id-123 # Specific message
Important: The agent_did parameter is required when accessing messages to specify which agent's storage to query. If not provided, you'll get an error message asking you to specify the agent. By default, both incoming and outgoing messages are shown unless you filter by direction.
tap://schemas
JSON schemas for TAP message types.
tap://schemas # All schemas
Configuration
Environment Variables
TAP_ROOT: Default TAP root directory (default:~/.tap)TAP_DB_PATH: Database file path (default:$TAP_ROOT/tap-node.db)RUST_LOG: Logging level (debug, info, warn, error)
Directory Structure
~/.tap/ # TAP root directory
├── keys.json # Agent keys storage
├── did_key_z6MkpGuzuD38tpgZKPfm/ # Auto-generated agent directory
│ └── transactions.db # SQLite database for this agent
├── did_web_example.com/ # Manual agent directory
│ └── transactions.db # SQLite database for this agent
└── logs/ # Log files directory
Automatic Storage Initialization: When you create a new agent using tap_create_agent, TAP-MCP automatically:
- Generates a unique DID for the agent
- Creates a sanitized directory name from the DID (replacing
:with_) - Initializes a dedicated SQLite database for that agent's transactions
- Registers the agent with the TAP Node for message processing
Agent-Specific Storage: Each transaction operation (create, authorize, reject, cancel, settle, list) uses the storage database specific to the agent_did parameter. This ensures:
- Complete transaction isolation between different agents
- Scalable storage architecture as each agent manages its own data
- Clear audit trails per agent identity
- No cross-contamination of transaction data between agents
- Multi-agent transaction storage: transactions involving multiple agents are stored in all participating agents' databases
- Multi-recipient message delivery: messages are delivered to ALL recipients specified in the
tofield following DIDComm specification
Examples
Creating a Complete Transfer Flow
- Create agents for both parties:
# Create settlement agent for originator
| \
# Create compliance agent for beneficiary
| \
- Initiate transfer: (Note: Use the DID from the created agent)
|
- Authorize the transfer:
|
- Settle the transaction:
|
- Monitor transactions:
# List all transactions for a specific agent
| \
# List recent transfers for an agent
| \
# Get specific transaction details via resources (requires agent_did)
# List recent messages for an agent (shows both incoming and outgoing by default)
# List only incoming messages for an agent
Alternative Workflow: Rejecting a Transaction
If a transaction needs to be rejected instead of authorized:
# Reject with reason
|
Canceling a Transaction
Either party can cancel a transaction before settlement:
# Cancel transaction
|
Integration Examples
Claude Desktop
To configure Claude Desktop to use TAP-MCP, you need to add the server configuration to your Claude Desktop settings. The configuration file location depends on your operating system:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
Option 1: Using the built binary (recommended for production)
First, build and install TAP-MCP:
Then add this configuration to your Claude Desktop config file:
Option 2: Using cargo run (for development)
Add this configuration to your Claude Desktop config file:
Configuration Options
--agent-did: (Optional) Specify an agent DID for organized storage. Creates database at~/.tap/{sanitized-did}/--tap-root: (Optional) Custom TAP root directory (default:~/.tap)--debug: Enable debug loggingTAP_ROOT: Environment variable alternative to--tap-rootRUST_LOG: Control log level (debug, info, warn, error)
Complete Example Configuration
Verifying the Configuration
After updating your Claude Desktop configuration:
- Restart Claude Desktop for the changes to take effect
- Check the Claude Desktop logs (usually in the app's menu under "View" → "Developer" → "Developer Tools")
- Test the connection by asking Claude: "List the available TAP tools"
You should see tools like tap_create_agent, tap_create_transfer, tap_authorize, etc.
Troubleshooting Claude Desktop Integration
If TAP-MCP doesn't appear in Claude Desktop:
- Check the config file syntax - ensure valid JSON formatting
- Verify file paths - make sure the
commandandmanifest-pathare correct - Check permissions - ensure Claude Desktop can execute the command
- Review logs - check Claude Desktop's developer console for error messages
- Test manually - try running the exact command from terminal first:
# Test the command manually
# Or if using the binary
Once configured, you can interact with TAP through Claude Desktop by asking questions like:
- "Create a new TAP agent for settlement services"
- "Show me recent TAP transactions"
- "Help me authorize a transfer transaction"
Python MCP Client
# Initialize the session
await
# List available tools
= await
# Create an agent
= await
# Create a transfer transaction
= await
# Authorize the transaction
= await
# List recent transactions
= await
Troubleshooting
Common Issues
-
Database Connection Errors
# Ensure TAP Node has initialized the database -
Permission Errors
# Check file permissions -
Missing Dependencies
# Rebuild with all features
Debug Mode
Enable detailed logging for troubleshooting:
RUST_LOG=debug
Testing the Connection
Test basic MCP connectivity:
# Send a simple initialize request
|
Development
Running Tests
# Run all tests
# Run with output
# Run specific test
Adding New Tools
- Create tool implementation in
src/tools/ - Add to tool registry in
src/tools/mod.rs - Add JSON schema in
src/tools/schema.rs - Update documentation
Contributing
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Related Projects
- TAP-RS - Core TAP implementation in Rust
- Model Context Protocol - MCP specification and tools
- Claude Desktop - AI assistant with MCP support
Support
- GitHub Issues: Report bugs and request features
- Documentation: TAP Protocol Documentation
- Community: TAP Discord Server