mcpb/examples/calculator-rust
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Bryan Thompson cc4aa751b6
feat: add Rust binary calculator example
First example of the binary server type — a compiled Rust MCP server
packaged as an MCPB. Based on the official Rust SDK calculator example
(rmcp 1.2.0, 2 tools: sum/sub, ~80 LOC).

Includes Cargo.toml, Dockerfile for Docker-based builds, .mcpbignore
to exclude source from the bundle, and README with build/pack/test
instructions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 16:36:47 -05:00
..
src feat: add Rust binary calculator example 2026-03-13 16:36:47 -05:00
.gitignore feat: add Rust binary calculator example 2026-03-13 16:36:47 -05:00
.mcpbignore feat: add Rust binary calculator example 2026-03-13 16:36:47 -05:00
Cargo.toml feat: add Rust binary calculator example 2026-03-13 16:36:47 -05:00
Dockerfile feat: add Rust binary calculator example 2026-03-13 16:36:47 -05:00
manifest.json feat: add Rust binary calculator example 2026-03-13 16:36:47 -05:00
README.md feat: add Rust binary calculator example 2026-03-13 16:36:47 -05:00

Calculator Rust Binary Example

Demonstrates packaging a compiled Rust binary as an MCP Bundle using the binary server type. Based on the official Rust MCP SDK calculator example.

What is Binary Server Type?

Unlike node or uv server types where the source code is bundled and executed by a runtime, the binary server type packages a pre-compiled native executable. This is useful for:

  • Rust, Go, C/C++ MCP servers
  • Performance-sensitive workloads
  • Servers with no runtime dependencies

The tradeoff is that binaries are platform-specific — you need a separate build for each target OS/architecture.

Structure

calculator-rust/
├── manifest.json       # server.type = "binary"
├── Cargo.toml          # Rust project
├── Dockerfile          # Build via Docker
├── .mcpbignore         # Exclude source from bundle
├── .gitignore          # Exclude build artifacts
└── src/
    └── main.rs         # Calculator MCP server (~80 LOC)

After building, the server/ directory is created with the compiled binary.

Building

Native (requires Rust 1.85+)

cd examples/calculator-rust
cargo build --release
mkdir -p server
cp target/release/mcp-calculator server/

Docker (no local Rust required)

cd examples/calculator-rust
docker build -t mcp-calculator .
# Extract the binary (linux only)
docker create --name calc mcp-calculator
docker cp calc:/mcp-calculator server/mcp-calculator
docker rm calc
chmod +x server/mcp-calculator

Packing

mcpb pack examples/calculator-rust

The .mcpbignore file excludes source code and build artifacts — only manifest.json and server/mcp-calculator end up in the bundle.

Testing

# MCP protocol handshake
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' \
  | ./server/mcp-calculator

# Tool call
(printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n'
printf '{"jsonrpc":"2.0","method":"notifications/initialized"}\n'
printf '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"sum","arguments":{"a":3,"b":4}}}\n'
sleep 1) | ./server/mcp-calculator

Expected: sum(3, 4) returns {"text":"7"}.

Tools

  • sum — Calculate the sum of two numbers
  • sub — Calculate the difference of two numbers

Notes

  • Binary size: ~2.5 MB (stripped, LTO enabled)
  • The Cargo.toml uses edition = "2024" (Rust 1.85+)
  • Logs are written to stderr via tracing, so they don't interfere with MCP's stdio transport
  • Uses the rmcp crate (official Rust MCP SDK)