Skip to main content
Glama

πŸ¦€ MCP Rust Docs Server

MCP Protocol Rust Docs TypeScript Bun License: Apache 2.0

A Model Context Protocol (MCP) server for fetching Rust crate documentation from docs.rs using the rustdoc JSON API

Features β€’ Installation β€’ Usage β€’ Building β€’ Development β€’ Notes β€’ Contributing β€’ License

✨ Features

  • πŸš€ Fast Documentation Fetching - Direct access to rustdoc JSON API for comprehensive crate documentation

  • πŸ” Item-Level Lookup - Query specific structs, functions, traits, and more within crates

  • πŸ’Ύ Smart Caching - Built-in LRU cache with SQLite backend for optimal performance

  • 🎯 Version Support - Fetch docs for specific versions or use semver ranges

  • πŸ–₯️ Cross-Platform - Standalone executables for Linux, macOS, and Windows

  • πŸ“¦ Zero Dependencies - Single executable with everything bundled

  • πŸ”§ TypeScript - Full type safety with modern ES modules

  • πŸ—œοΈ Compression Support - Automatic Zstd decompression for efficient data transfer

Related MCP server: Rust Docs MCP Server

πŸ“¦ Installation

Using Bun

bun install bun run build:bytecode # or bun run build:all for all platforms

Using Pre-built Executables

Download the latest release for your platform from the Releases page:

Linux

  • x64/AMD64 (GLIBC): mcp-docsrs-linux-x64 - For Ubuntu, Debian, Fedora, etc.

  • ARM64 (GLIBC): mcp-docsrs-linux-arm64 - For ARM64 systems, AWS Graviton

  • x64/AMD64 (MUSL): mcp-docsrs-linux-x64-musl - For Alpine Linux, Docker containers (requires libstdc++)

  • ARM64 (MUSL): mcp-docsrs-linux-arm64-musl - For Alpine on ARM64, minimal containers (requires libstdc++)

macOS

  • Intel: mcp-docsrs-darwin-x64 - For Intel-based Macs

  • Apple Silicon: mcp-docsrs-darwin-arm64 - For M1/M2/M3 Macs

Windows

  • x64: mcp-docsrs-windows-x64.exe - For 64-bit Windows

Using Docker

Pull and run the latest multi-arch image (supports both x64 and ARM64):

# Pull the latest image docker pull ghcr.io/vexxvakan/mcp-docsrs:latest # Run the server docker run --rm -i ghcr.io/vexxvakan/mcp-docsrs:latest # Run with custom configuration docker run --rm -i ghcr.io/vexxvakan/mcp-docsrs:latest \ --cache-ttl 7200000 --max-cache-size 200

Available tags:

  • latest - Latest stable release (multi-arch)

  • v1.0.0 - Specific version (multi-arch)

  • x64 - Latest x64/AMD64 build

  • arm64 - Latest ARM64 build

πŸš€ Usage

Starting the Server

Using npm or Bun

# Production mode npm start # or bun start # Development mode with hot reload npm run dev # or bun run dev

Using Executable

# Show help mcp-docsrs --help # Run with default settings mcp-docsrs # Run with custom configuration mcp-docsrs --cache-ttl 7200000 --max-cache-size 200

πŸ› οΈ Available Tools

lookup_crate_docs

Fetches comprehensive documentation for an entire Rust crate.

Parameters:

Parameter

Type

Required

Description

crateName

string

βœ…

Name of the Rust crate

version

string

❌

Specific version or semver range (e.g., "1.0.0", "~4")

target

string

❌

Target platform (e.g., "i686-pc-windows-msvc")

formatVersion

string

❌

Rustdoc JSON format version

Example:

{ "tool": "lookup_crate_docs", "arguments": { "crateName": "serde", "version": "latest" } }

lookup_item_docs

Fetches documentation for a specific item within a crate.

Parameters:

Parameter

Type

Required

Description

crateName

string

βœ…

Name of the Rust crate

itemPath

string

βœ…

Path to the item (e.g., "struct.MyStruct", "fn.my_function")

version

string

❌

Specific version or semver range

target

string

❌

Target platform

Example:

{ "tool": "lookup_item_docs", "arguments": { "crateName": "tokio", "itemPath": "runtime.Runtime" } }

search_crates

Search for Rust crates on crates.io with fuzzy/partial name matching.

Parameters:

Parameter

Type

Required

Description

query

string

βœ…

Search query for crate names (supports partial matches)

limit

number

❌

Maximum number of results to return (default: 10)

Example:

{ "tool": "search_crates", "arguments": { "query": "serde", "limit": 5 } }

πŸ“Š Resources

The server provides resources for querying and inspecting the cache database:

cache://stats

Returns cache statistics including total entries, size, and oldest entry.

Example:

{ "totalEntries": 42, "totalSize": 1048576, "oldestEntry": "2024-01-15T10:30:00.000Z" }

cache://entries?limit={limit}&offset={offset}

Lists cached entries with metadata. Supports pagination.

Parameters:

  • limit - Number of entries to return (default: 100)

  • offset - Number of entries to skip (default: 0)

Example:

[ { "key": "serde/latest/x86_64-unknown-linux-gnu", "timestamp": "2024-01-15T14:20:00.000Z", "ttl": 3600000, "expiresAt": "2024-01-15T15:20:00.000Z", "size": 524288 } ]

cache://query?sql={sql}

Execute SQL queries on the cache database (SELECT queries only for safety).

Example:

cache://query?sql=SELECT key, timestamp FROM cache WHERE key LIKE '%tokio%' ORDER BY timestamp DESC

Note: SQL queries in the URI should be URL-encoded. The server will automatically decode them.

cache://config

Returns the current server configuration including all runtime parameters.

Example response:

{ "cacheTtl": 7200000, "maxCacheSize": 200, "requestTimeout": 30000, "dbPath": "/Users/vexx/Repos/mcp-docsrs/.cache" }

βš™οΈ Configuration

Configure the server using environment variables or command-line arguments:

Variable

CLI Flag

Default

Description

CACHE_TTL

--cache-ttl

3600000

Cache time-to-live in milliseconds

MAX_CACHE_SIZE

--max-cache-size

100

Maximum number of cached entries

REQUEST_TIMEOUT

--request-timeout

30000

HTTP request timeout in milliseconds

DB_PATH

--db-path

:memory:

Path to SQLite database file (use

:memory:

for in-memory)

Example:

# Environment variables CACHE_TTL=7200000 MAX_CACHE_SIZE=200 npm start # Command-line arguments (executable) ./mcp-docsrs --cache-ttl 7200000 --max-cache-size 200 # Use persistent database to cache documentation between sessions ./mcp-docsrs --db-path ~/.mcp-docsrs # Or with environment variable DB_PATH=~/.mcp-docsrs npm start

πŸ”Œ MCP Configuration

Add to your MCP configuration file:

{ "mcpServers": { "rust-docs": { "command": "node", "args": ["/path/to/mcp-docsrs/dist/index.js"] } } }

Or using the executable:

{ "mcpServers": { "rust-docs": { "command": "/path/to/mcp-docsrs" } } }

Or using Docker:

{ "mcpServers": { "rust-docs": { "command": "docker", "args": ["run", "--rm", "-i", "ghcr.io/vexxvakan/mcp-docsrs:latest"] } } }

πŸ—οΈ Building

Prerequisites

  • Bun v1.2.14 or later

  • macOS, Linux, or Windows

Build Commands

# Build for current platform bun run build # Build with bytecode compilation (standalone, requires Bun runtime) bun run build:bytecode # Build for all platforms (7 targets, all with bytecode for fast startup) bun run build:all # Linux builds (GLIBC - standard) bun run build:linux-x64 # Linux x64/AMD64 bun run build:linux-arm64 # Linux ARM64 # Linux builds (MUSL - for Alpine/containers) bun run build:linux-x64-musl # Linux x64/AMD64 (Alpine) bun run build:linux-arm64-musl # Linux ARM64 (Alpine) # macOS builds bun run build:darwin-x64 # macOS Intel bun run build:darwin-arm64 # macOS Apple Silicon # Windows build bun run build:windows-x64 # Windows x64

Build Output

All executables are created in the dist/ directory with bytecode compilation for fast startup:

File

Platform

Type

Size

mcp-docsrs-linux-x64

Linux x64/AMD64

GLIBC + Bytecode

99MB

mcp-docsrs-linux-arm64

Linux ARM64

GLIBC + Bytecode

93MB

mcp-docsrs-linux-x64-musl

Linux x64/AMD64

MUSL (static) + Bytecode

92MB

mcp-docsrs-linux-arm64-musl

Linux ARM64

MUSL (static) + Bytecode

88MB

mcp-docsrs-darwin-x64

macOS Intel

Bytecode

64MB

mcp-docsrs-darwin-arm64

macOS Apple Silicon

Bytecode

58MB

mcp-docsrs-windows-x64.exe

Windows x64

Bytecode

113MB

πŸ‘¨β€πŸ’» Development

Development Workflow

# Install dependencies bun install # Run in development mode bun run dev # Run tests bun test # Lint code bun run lint # Type checking bun run typecheck # Check build sizes (updates README table) bun run check:sizes # Run after building

Testing

The project includes comprehensive tests for all major components:

# Run all tests bun test # Run tests in watch mode bun test --watch # Run specific test file bun test cache.test.ts # Run tests with full error logging (including expected errors) LOG_EXPECTED_ERRORS=true bun test

Test Output

Tests are configured to provide clean output by default:

  • βœ… Expected errors (like CrateNotFoundError in 404 tests) show as green checkmarks: βœ“ Expected CrateNotFoundError thrown

  • ❌ Unexpected errors are shown with full stack traces in red

  • ℹ️ Info logs are shown to track test execution

This makes it easy to distinguish between:

  • Tests that verify error handling (expected errors)

  • Actual test failures (unexpected errors)

To see full error details for debugging, set LOG_EXPECTED_ERRORS=true.

Project Structure

mcp-docsrs/ β”œβ”€β”€ src/ # Source code β”‚ β”œβ”€β”€ cli.ts # CLI entry point with argument parsing β”‚ β”œβ”€β”€ index.ts # MCP server entry point β”‚ β”œβ”€β”€ server.ts # MCP server implementation with tool/resource handlers β”‚ β”œβ”€β”€ cache.ts # LRU cache with SQLite persistence β”‚ β”œβ”€β”€ docs-fetcher.ts # HTTP client for docs.rs JSON API β”‚ β”œβ”€β”€ rustdoc-parser.ts # Parser for rustdoc JSON format β”‚ β”œβ”€β”€ errors.ts # Custom error types and error handling β”‚ β”œβ”€β”€ types.ts # TypeScript types and Zod schemas β”‚ └── tools/ # MCP tool implementations β”‚ β”œβ”€β”€ index.ts # Tool exports and registration β”‚ β”œβ”€β”€ lookup-crate.ts # Fetch complete crate documentation β”‚ β”œβ”€β”€ lookup-item.ts # Fetch specific item documentation β”‚ └── search-crates.ts # Search crates on crates.io β”œβ”€β”€ test/ # Test files β”‚ β”œβ”€β”€ cache.test.ts # Cache functionality tests β”‚ β”œβ”€β”€ cache-status.test.ts # Cache status and metrics tests β”‚ β”œβ”€β”€ docs-fetcher.test.ts # API client tests β”‚ β”œβ”€β”€ integration.test.ts # End-to-end integration tests β”‚ β”œβ”€β”€ persistent-cache.test.ts # SQLite cache persistence tests β”‚ β”œβ”€β”€ rustdoc-parser.test.ts # JSON parser tests β”‚ └── search-crates.test.ts # Crate search tests β”œβ”€β”€ scripts/ # Development and testing scripts β”‚ β”œβ”€β”€ test-crates-search.ts # Manual crate search testing β”‚ β”œβ”€β”€ test-mcp.ts # MCP server testing β”‚ β”œβ”€β”€ test-persistent-cache.ts # Cache persistence testing β”‚ β”œβ”€β”€ test-resources.ts # Resource endpoint testing β”‚ └── test-zstd.ts # Zstandard compression testing β”œβ”€β”€ plans/ # Project planning documents β”‚ └── feature-recommendations.md # Future feature ideas β”œβ”€β”€ dist/ # Build output (platform executables) β”œβ”€β”€ .github/ # GitHub Actions workflows β”‚ β”œβ”€β”€ workflows/ # CI/CD pipeline definitions β”‚ └── ... # Various automation configs β”œβ”€β”€ CLAUDE.md # AI assistant instructions β”œβ”€β”€ README.md # Project documentation β”œβ”€β”€ LICENSE # Apache 2.0 license β”œβ”€β”€ package.json # Project dependencies and scripts β”œβ”€β”€ tsconfig.json # TypeScript configuration β”œβ”€β”€ biome.json # Code formatter/linter config └── bun.lock # Bun package lock file

πŸ“ Notes

  • πŸ“… The rustdoc JSON feature on docs.rs started on 2025-05-23, so releases before that date won't have JSON available

  • πŸ”„ The server automatically handles redirects and format version compatibility

  • ⚑ Cached responses significantly improve performance for repeated lookups

  • πŸ“¦ Built executables include all dependencies - no runtime installation required

  • ⚠️ MUSL builds limitation: Due to a known Bun issue, MUSL builds are not fully static and require libstdc++ to run. For Docker/Alpine deployments, install libstdc++ with: apk add libstdc++

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add some amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

πŸ™ Acknowledgments

  • docs.rs for providing the Rust documentation API

  • Model Context Protocol for the MCP specification

  • The Rust community for excellent documentation standards

πŸ“„ License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.


Made with ❀️ for the Rust community

Report Bug β€’ Request Feature

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vexxvakan/mcp-docsrs'

If you have feedback or need assistance with the MCP directory API, please join our Discord server