Algorand MCP Server
# MCP Server with Algorand Integration
This server provides blockchain transaction capabilities for the Algorand network along with general utility tools.
## Overview
This MCP server provides the following tools to AI assistants:
### General Tools
- **echo**: Echo back any message (useful for testing connectivity)
- **calculate**: Perform basic mathematical calculations
- **get_current_time**: Get the current time in any timezone
### Algorand Blockchain Tools
- **generate_algorand_account**: Generate a new Algorand account with address and mnemonic
- **get_account_info**: Get account information including balance and assets
- **send_payment**: Send Algo payment transaction
- **create_asset**: Create a new Algorand Standard Asset (ASA)
- **opt_in_to_asset**: Opt into an Algorand Standard Asset
- **transfer_asset**: Transfer an Algorand Standard Asset
- **get_asset_info**: Get information about an asset
- **get_transaction**: Get transaction details by transaction ID
## Security Features
### Mnemonic Phrase Protection
- **Encryption**: Built-in AES-256-GCM encryption for mnemonic phrases
- **Secure Storage**: Methods for encrypting/decrypting wallet credentials
- **Memory Safety**: Sensitive data is handled securely and not logged
### Network Configuration
- **Testnet Default**: Safely defaults to Algorand testnet
- **Environment-based**: Network configuration through environment variables
- **Production Ready**: Supports mainnet for production use
## Prerequisites
- Node.js 18+
- npm or yarn
- TypeScript
## Installation
1. Clone or download this project
2. Install dependencies:
```bash
npm install
```
3. Copy environment configuration:
```bash
cp .env.example .env
```
4. Configure your Algorand network in `.env` (defaults to testnet)
## Development
### Building the Project
```bash
npm run build
```
### Running the Server
```bash
npm start
```
### Development Mode
For development with automatic rebuilding:
```bash
npm run dev
```
## Configuration
### For VSCode
```json
{
"mcpServers": {
"algorand-mcp-server": {
"command": "node",
"args": ["path/to/your/project/dist/index.js"]
}
}
}
```
### For VS Code Debugging
The project includes a `.vscode/mcp.json` configuration file for debugging within VS Code. You can use this with the MCP extension for VS Code.
## Available Tools
### echo
- **Description**: Echo back the provided message
- **Parameters**:
- `message` (string, required): The message to echo back
### calculate
- **Description**: Perform basic mathematical calculations
- **Parameters**:
- `expression` (string, required): Mathematical expression to evaluate
### get_current_time
- **Description**: Get the current time in a specified timezone
- **Parameters**:
- `timezone` (string, optional): Timezone identifier (defaults to UTC)
## Project Structure
```
├── src/
│ └── index.ts # Main server implementation
├── dist/ # Compiled JavaScript output
├── .vscode/
│ └── mcp.json # VS Code MCP configuration
├── .github/
│ └── copilot-instructions.md # GitHub Copilot instructions
├── package.json # Node.js package configuration
├── tsconfig.json # TypeScript configuration
└── README.md # This file
```
## Development Guide
### Adding New Tools
1. Define the tool schema in the `TOOLS` array
2. Create a Zod schema for input validation
3. Add a case in the `CallToolRequestSchema` handler
4. Implement the tool logic with proper error handling
### Example Tool Implementation
```typescript
const MyToolArgsSchema = z.object({
input: z.string(),
});
// Add to TOOLS array
{
name: 'my_tool',
description: 'Description of what the tool does',
inputSchema: {
type: 'object',
properties: {
input: {
type: 'string',
description: 'Input parameter description',
},
},
required: ['input'],
},
}
// Add to request handler
case 'my_tool': {
const parsed = MyToolArgsSchema.parse(args);
// Implement tool logic here
return {
content: [
{
type: 'text',
text: `Result: ${parsed.input}`,
},
],
};
}
```
## Security Considerations
- Input validation is performed using Zod schemas
- The `calculate` tool uses `eval()` for demonstration purposes only - in production, use a safer math evaluation library
- Always validate and sanitize inputs before processing
## Contributing
1. Fork the repository
2. Create a feature branch
3. Implement your changes with proper tests
4. Submit a pull request
## License
ISC License - see package.json for details
## Resources
- [Model Context Protocol Documentation](https://modelcontextprotocol.io/)
- [MCP SDK Reference](https://github.com/modelcontextprotocol/typescript-sdk)
TDQS
Scored across 14 tools
Most tools have distinct purposes within the Algorand blockchain domain, such as asset management (create_asset, get_asset_info, opt_in_to_asset, transfer_asset) and account operations (generate_algorand_account, get_account_info, fund_testnet). However, there is some overlap: 'calculate' and 'echo' are generic utilities that don't clearly relate to Algorand and could be confused with external tools, and 'get_current_time' is a general-purpose tool that doesn't fit the blockchain focus, creating minor ambiguity.
The naming is mostly consistent with a verb_noun pattern (e.g., create_asset, get_account_info, transfer_asset), which aids readability. However, there are minor deviations: 'calculate' and 'echo' use only verbs without nouns, and 'load_wallet' and 'store_wallet' use a verb_noun format but differ slightly from others like 'generate_algorand_account' which includes the domain name. Overall, the pattern is clear but not perfectly uniform.
With 14 tools, the count is well-scoped for an Algorand blockchain server, covering key operations such as account management, asset handling, transactions, and wallet storage. Each tool appears to serve a specific purpose without redundancy, making the set comprehensive yet manageable for typical blockchain tasks.
The toolset provides good coverage for core Algorand functionalities, including asset creation, transfer, and account operations, with no major gaps in the blockchain lifecycle. However, there are minor omissions: tools for smart contract interactions or more advanced transaction types (like atomic transfers) are missing, and the inclusion of generic tools like 'calculate' and 'echo' doesn't enhance the domain-specific completeness, though agents can likely work around this.