Claude-powered MCP server in Rust (starter template)

A minimal, production-ready Model Context Protocol
(MCP) server, written in Rust, backed by Anthropic's Claude API through the
crimson-crab SDK. It exposes three
tools: ask_claude (send a prompt, get Claude's reply), count_tokens (price a
prompt without running it), and list_models (enumerate the models your API key
can use).
Use it as the reference starting point for building your own Claude-powered MCP
tools in Rust.
Use this template
Click Use this template on GitHub, or generate a fresh project with
cargo generate:
cargo generate --git https://github.com/singhpratech/crimson-crab-mcp-template
You can also just clone it:
git clone https://github.com/singhpratech/crimson-crab-mcp-template
Quickstart
export ANTHROPIC_API_KEY=sk-ant-...
cargo run
The server communicates over stdio, so running it directly just waits for an MCP
client to connect. All logging goes to stderr — stdout is reserved for the MCP
protocol. Set RUST_LOG=debug for more verbose logs.
To build an optimized binary you can point a client at:
Wire it into Claude Desktop
Add an entry to your Claude Desktop MCP config
(claude_desktop_config.json), pointing at the built binary and passing your API
key through the environment:
{
"mcpServers": {
"claude-via-crimson-crab": {
"command": "/absolute/path/to/target/release/crimson-crab-mcp-template",
"env": {
"ANTHROPIC_API_KEY": "sk-ant-..."
}
}
}
}
Restart Claude Desktop; the ask_claude, count_tokens, and list_models
tools will then be available.
ask_claude
| Parameter | Type | Required | Description |
|---|
prompt | string | yes | The prompt to send to Claude. |
system | string | no | Optional system prompt. |
Builds a Claude Messages request (defaulting to the claude-opus-5 model),
calls the API, and returns the concatenated text of Claude's reply.
count_tokens
| Parameter | Type | Required | Description |
|---|
prompt | string | yes | The prompt whose token count you want. |
system | string | no | Optional system prompt to include in the count. |
model | string | no | Model id to count against (counts are model-specific). |
Returns the number of input tokens the prompt would consume, without running
it — useful for estimating cost before an expensive call.
list_models
| Parameter | Type | Required | Description |
|---|
limit | number | no | Maximum number of models to return. |
Returns the id, display name, and release date of each Claude model available
to the configured API key.
Errors from all tools are returned as MCP tool errors rather than panicking.
The Claude client is built once at startup and reused across calls.
Built with crimson-crab
This template is built with crimson-crab
— a production-grade Rust SDK for Anthropic's Claude API. Source:
https://github.com/singhpratech/crimson-crab.
License
Licensed under either of
at your option.
crimson-crab is an independent open-source project and is not affiliated with Anthropic.