rmrfslashbin/manuals-mcp-server
If you are the rightful owner of manuals-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
A standalone MCP server for querying hardware and software documentation libraries.
Manuals MCP Server
Standalone MCP server for querying hardware and software documentation libraries
A Model Context Protocol (MCP) server that provides structured access to any documentation library. Built for hardware and software manuals, with support for GPIO pinouts, protocol specifications, device specs, and full-text search.
Key Features
- Standalone & Portable - Works with any documentation library, not tied to a specific repo
- GPIO Pinout Queries - Get formatted pinout tables with alternate functions and interface filtering (I2C, SPI, UART, PWM)
- Full-Text Search - Search across all documentation with SQLite FTS5
- Cross-Domain Support - Index hardware devices, software libraries, and protocol specifications
- MCPB Bundle Format - One-click installation via Claude Desktop or Claude Code
Installation
Option A: MCPB Bundle (Recommended)
Download the latest .mcpb bundle from releases and install:
claude mcp install manuals-mcp-server-1.0.0.mcpb
Or install via Claude Desktop's MCP server manager GUI.
Option B: From Source
git clone https://github.com/rmrfslashbin/manuals-mcp-server
cd manuals-mcp-server
npm install
npm run build
Configuration
The server requires two paths to be configured:
- MANUALS_DOCS_PATH - Path to your documentation library root
- MANUALS_DB_PATH - Path to SQLite database (auto-created, optional)
Project-Level Configuration
Create .mcp.json in your documentation repository:
{
"mcpServers": {
"manuals": {
"command": "node",
"args": ["/path/to/manuals-mcp-server/dist/index.js"],
"env": {
"MANUALS_DOCS_PATH": "/path/to/your/docs",
"MANUALS_DB_PATH": "/path/to/manuals-mcp-server/data/manuals.db"
},
"description": "Hardware & Software Documentation Library"
}
}
}
When Claude Code opens this directory, the MCP server auto-connects.
User-Level Configuration (Global)
Add via Claude Code CLI for access across all projects:
claude mcp add --transport stdio manuals --scope user \
-- node /path/to/manuals-mcp-server/dist/index.js
Then set environment variables in ~/.claude.json:
{
"mcpServers": {
"manuals": {
"env": {
"MANUALS_DOCS_PATH": "/path/to/your/docs",
"MANUALS_DB_PATH": "/path/to/manuals-mcp-server/data/manuals.db"
}
}
}
}
Claude Desktop Configuration
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"manuals": {
"command": "node",
"args": ["/path/to/manuals-mcp-server/dist/index.js"],
"env": {
"MANUALS_DOCS_PATH": "/path/to/your/docs",
"MANUALS_DB_PATH": "/path/to/manuals-mcp-server/data/manuals.db"
}
}
}
}
Building the Index
After configuration, build the search index:
# Using environment variable
MANUALS_DOCS_PATH=/path/to/docs npm run index
# Using command-line argument
npm run index -- --docs-path /path/to/docs
# View help
npm run index -- --help
The indexer scans for:
*_Reference.md- Device/software documentation*_Protocol.md- Protocol specifications
Available Tools
get_pinout
Get GPIO pinout information for a hardware device.
Parameters:
device(string): Device name or ID (e.g., "raspberry-pi-4", "esp32-s3")interface(string, optional): Filter by interface (i2c, spi, uart, pwm, gpio, all)
Example:
Get the I2C pins for Raspberry Pi 4
Returns formatted ASCII pinout table with GPIO numbers, alternate functions, and pull resistor configuration.
search
Full-text search across all indexed documentation.
Parameters:
query(string): Search querydomain(string, optional): Filter by domain (hardware, software, protocol, all)type(string, optional): Filter by device typelimit(number, optional): Max results (default: 10)
Example:
Search for devices with I2C interface
Returns ranked results with device metadata, tags, specs, and file paths.
list_hardware
List all available hardware devices, organized by category.
Example:
Show me all available hardware
get_stats
Get statistics about the indexed documentation.
Example:
How many devices are indexed?
Documentation Format
The server expects markdown files with YAML frontmatter:
---
manufacturer: Company Name
model: MODEL-NUMBER
category: sbc/raspberry-pi
version: v1.0
date: 2024-03-12
tags: [wifi, bluetooth, gpio, i2c, spi]
datasheets:
- datasheets/filename.pdf
specs:
cpu: "Quad-core ARM Cortex-A72 @ 1.5GHz"
ram: "1GB/2GB/4GB/8GB LPDDR4"
power: "USB-C 5V @ 3A"
---
# Device Name
Documentation content here...
## GPIO Pinout
| Physical Pin | GPIO | Name | Default Pull | Alt Functions |
|--------------|------|------|--------------|---------------|
| 8 | 14 | TXD0 | Low | UART0 TX, ... |
| 10 | 15 | RXD0 | Low | UART0 RX, ... |
Important: YAML frontmatter MUST be at the very beginning of the file (byte 0).
Architecture
manuals-mcp-server/
├── manifest.json # MCPB bundle manifest
├── src/
│ ├── index.ts # MCP server entry point
│ ├── types/
│ │ └── index.ts # TypeScript definitions
│ ├── db/
│ │ ├── schema.ts # SQLite schema + initialization
│ │ └── queries.ts # Database operations
│ ├── indexer/
│ │ ├── markdown-parser.ts # Parse frontmatter + tables
│ │ └── builder.ts # Build index from docs
│ └── tools/
│ ├── hardware.ts # Hardware-specific tools
│ └── search.ts # Search tools
├── scripts/
│ ├── build-index.ts # CLI for indexing docs
│ └── pack-mcpb.js # Create .mcpb bundle
├── data/
│ └── manuals.db # SQLite database (generated)
└── dist/ # Compiled JavaScript (generated)
Database Schema
SQLite with FTS5 full-text search:
- devices - Main device/artifact table (id, domain, type, name, path, metadata)
- pinouts - GPIO pin information (device_id, physical_pin, gpio_num, alt_functions)
- specifications - Device specs (device_id, key, value, unit)
- cross_references - Links between devices (from_device_id, to_device_id, relationship)
- search_fts - FTS5 virtual table (device_id, name, content, tags)
Indexes on domain, type, GPIO numbers for fast queries.
Development
Build & Test Locally
npm install
npm run build
npm run index -- --docs-path /path/to/test/docs
npm start # Run MCP server directly
Watch Mode
npm run dev # Auto-rebuild on changes
npm run index:watch # Auto-rebuild index on doc changes
Create MCPB Bundle
npm run pack
Creates manuals-mcp-server-1.0.0.mcpb in the root directory.
Type Checking
npm run typecheck
Clean Build Artifacts
npm run clean
Example Documentation Repositories
This server can index any documentation library. Examples:
- Hardware Reference Library - Raspberry Pi, ESP32, sensors, displays, power supplies
- Software Library Docs - APIs, frameworks, tools, libraries
- Protocol Specifications - I2C, SPI, UART, MQTT, Modbus
- Mixed Documentation - Hardware + software + protocols (recommended)
Troubleshooting
"No devices found"
Ensure you've built the index:
npm run index -- --docs-path /path/to/docs
Check that markdown files have YAML frontmatter at byte 0.
"Cannot find module" errors
Rebuild the project:
npm run build
Database locked
Only one server instance can access the database at a time. Close other instances.
MCP server not appearing
- Verify paths are absolute (not relative)
- Check
npm run buildsucceeded - Review Claude logs:
- macOS:
~/Library/Logs/Claude/ - Look for MCP connection errors
- macOS:
Index build fails
npm run index -- --docs-path /path/to/docs --help
Verify YAML frontmatter is at the top of markdown files.
Extending the Server
Adding a New Tool
- Create tool in
src/tools/ - Define input schema with Zod
- Register in
src/index.tsListToolsRequestSchema - Add handler in CallToolRequestSchema
Example:
// src/tools/my-tool.ts
import { z } from 'zod';
export const MyToolSchema = z.object({
param: z.string().describe("Parameter description")
});
export function myTool(db: Database, args: z.infer<typeof MyToolSchema>) {
// Query database, process results
return {
content: [{
type: 'text',
text: 'Tool result'
}]
};
}
Adding Database Tables
Modify src/db/schema.ts:
db.exec(`
CREATE TABLE IF NOT EXISTS my_table (
id INTEGER PRIMARY KEY,
device_id TEXT NOT NULL,
data TEXT,
FOREIGN KEY (device_id) REFERENCES devices(id)
)
`);
Update clearDatabase() and indexer in src/indexer/builder.ts.
Future Enhancements
- Vector embeddings for semantic search (pgvector, ChromaDB)
- PDF text extraction (pdf.js, pdfplumber)
- Multi-language code example extraction
- Version management for software docs (semver)
- Diagram/image indexing (OCR, image embeddings)
- Web interface for browsing documentation
- REST API endpoint (in addition to MCP)
Contributing
Contributions welcome! Please:
- Use TypeScript with proper types
- Define tool schemas with Zod
- Use prepared statements for database queries
- Update tests (when implemented)
- Follow existing code style
License
MIT License - Copyright (c) 2025 Robert Sigler
See for details.
Author
Robert Sigler Email: code@sigler.io GitHub: @rmrfslashbin
Links
- Repository: https://github.com/rmrfslashbin/manuals-mcp-server
- Issues: https://github.com/rmrfslashbin/manuals-mcp-server/issues
- MCP Protocol: https://modelcontextprotocol.io
- MCPB Format: https://github.com/modelcontextprotocol/mcpb
A standalone MCP server for any documentation library