Content
# Package Documentation MCP Server
An MCP (Model Context Protocol) server that provides LLMs with efficient access to package documentation across multiple programming languages and language server protocol (LSP) capabilities.
**_Note: I am not actively maintaining the codebase at present. While it doesn't provide access to private package documentation - the [Context7](https://github.com/upstash/context7) MCP server and service meets my needs which are mostly for public package documentation. I personally use Context7 via my [mcp-devtools](https://github.com/sammcj/mcp-devtools) MCP server which is actively maintained._**
## Features
- **Multi-Language Support**:
  - Go packages via `go doc`
  - Python libraries via built-in `help()`
  - NPM packages via registry documentation (including private registries)
  - Rust crates via crates.io and docs.rs
- **Smart Documentation Parsing**:
  - Structured output with description, usage, and examples
  - Focused information to avoid context overload
  - Support for specific symbol/function lookups
  - Fuzzy and exact search capabilities across documentation
- **Advanced Search Features**:
  - Search within package documentation
  - Fuzzy matching for flexible queries
  - Context-aware results with relevance scoring
  - Symbol extraction from search results
- **Language Server Protocol (LSP) Support**:
  - Hover information for code symbols
  - Code completions
  - Diagnostics (errors and warnings)
  - Currently supports TypeScript/JavaScript
  - Extensible for other languages
- **Performance Optimised**:
  - Built-in caching
  - Efficient parsing
  - Minimal memory footprint
## Installation
Note: I do not recommend using `npx -y` to run your MCP servers in production as you're esentially trusting whatever package you're downloading off the internet at that moment in time. I highly recommend cloning the repository locally or building into a container image.
```bash
npx -y mcp-package-docs
```
## Usage
### As an MCP Server
1. Add to your MCP settings configuration:
```json
{
  "mcpServers": {
    "package-docs": {
      "command": "npx",
      "args": ["-y", "mcp-package-docs"],
      "env": {
        "ENABLE_LSP": "true" // Optional: Enable Language Server Protocol support
      }
    }
  }
}
```
2. The LSP functionality includes default configurations for common language servers:
- TypeScript/JavaScript: `typescript-language-server --stdio`
- HTML: `vscode-html-language-server --stdio`
- CSS: `vscode-css-language-server --stdio`
- JSON: `vscode-json-language-server --stdio`
You can override these defaults if needed:
```json
{
  "mcpServers": {
    "package-docs": {
      "command": "npx",
      "args": ["-y", "mcp-package-docs"],
      "env": {
        "ENABLE_LSP": "true",
        "TYPESCRIPT_SERVER": "{\"command\":\"/custom/path/typescript-language-server\",\"args\":[\"--stdio\"]}"
      }
    }
  }
}
```
3. The server provides the following tools:
#### lookup_go_doc / describe_go_package
Fetches Go package documentation
```typescript
{
  "name": "describe_go_package",
  "arguments": {
    "package": "encoding/json", // required
    "symbol": "Marshal"        // optional
  }
}
```
#### lookup_python_doc / describe_python_package
Fetches Python package documentation
```typescript
{
  "name": "describe_python_package",
  "arguments": {
    "package": "requests",    // required
    "symbol": "get"          // optional
  }
}
```
#### describe_rust_package
Fetches Rust crate documentation from crates.io and docs.rs
```typescript
{
  "name": "describe_rust_package",
  "arguments": {
    "package": "serde",      // required: crate name
    "version": "1.0.219"     // optional: specific version
  }
}
```
#### search_package_docs
Search within package documentation
```typescript
{
  "name": "search_package_docs",
  "arguments": {
    "package": "requests",    // required: package name
    "query": "authentication", // required: search query
    "language": "python",     // required: "go", "python", "npm", "swift", or "rust"
    "fuzzy": true            // optional: enable fuzzy matching (default: true)
  }
}
```
#### lookup_npm_doc / describe_npm_package
Fetches NPM package documentation from both public and private registries. Automatically uses the appropriate registry based on your .npmrc configuration.
```typescript
{
  "name": "describe_npm_package",
  "arguments": {
    "package": "axios",      // required - supports both scoped (@org/pkg) and unscoped packages
    "version": "1.6.0"       // optional
  }
}
```
The tool reads your ~/.npmrc file to determine the correct registry for each package:
- Uses scoped registry configurations (e.g., @mycompany:registry=...)
- Supports private registries (GitHub Packages, GitLab, Nexus, Artifactory, etc.)
- Falls back to the default npm registry if no custom registry is configured
Example .npmrc configurations:
```npmrc
registry=https://nexus.mycompany.com/repository/npm-group/
@mycompany:registry=https://nexus.mycompany.com/repository/npm-private/
@mycompany-ct:registry=https://npm.pkg.github.com/
```
### Language Server Protocol (LSP) Tools
When LSP support is enabled, the following additional tools become available:
#### get_hover
Get hover information for a position in a document
```typescript
{
  "name": "get_hover",
  "arguments": {
    "languageId": "typescript", // required: language identifier (e.g., "typescript", "javascript")
    "filePath": "src/index.ts", // required: path to the source file
    "content": "const x = 1;",  // required: content of the file
    "line": 0,                  // required: zero-based line number
    "character": 6,             // required: zero-based character position
    "projectRoot": "/path/to/project" // optional: project root directory
  }
}
```
#### get_completions
Get completion suggestions for a position in a document
```typescript
{
  "name": "get_completions",
  "arguments": {
    "languageId": "typescript", // required: language identifier
    "filePath": "src/index.ts", // required: path to the source file
    "content": "const arr = []; arr.",  // required: content of the file
    "line": 0,                  // required: zero-based line number
    "character": 16,            // required: zero-based character position
    "projectRoot": "/path/to/project" // optional: project root directory
  }
}
```
#### get_diagnostics
Get diagnostic information (errors, warnings) for a document
```typescript
{
  "name": "get_diagnostics",
  "arguments": {
    "languageId": "typescript", // required: language identifier
    "filePath": "src/index.ts", // required: path to the source file
    "content": "const x: string = 1;",  // required: content of the file
    "projectRoot": "/path/to/project" // optional: project root directory
  }
}
```
### Example Usage in an LLM
#### Looking up Documentation
```typescript
// Looking up Go documentation
const goDocResult = await use_mcp_tool({
  server_name: "package-docs",
  tool_name: "describe_go_package",
  arguments: {
    package: "encoding/json",
    symbol: "Marshal"
  }
});
// Looking up Python documentation
const pythonDocResult = await use_mcp_tool({
  server_name: "package-docs",
  tool_name: "describe_python_package",
  arguments: {
    package: "requests",
    symbol: "post"
  }
});
// Looking up Rust documentation
const rustDocResult = await use_mcp_tool({
  server_name: "package-docs",
  tool_name: "describe_rust_package",
  arguments: {
    package: "serde"
  }
});
// Searching within documentation
const searchResult = await use_mcp_tool({
  server_name: "package-docs",
  tool_name: "search_package_docs",
  arguments: {
    package: "serde",
    query: "serialize",
    language: "rust",
    fuzzy: true
  }
});
// Using LSP for hover information (when LSP is enabled)
const hoverResult = await use_mcp_tool({
  server_name: "package-docs",
  tool_name: "get_hover",
  arguments: {
    languageId: "typescript",
    filePath: "src/index.ts",
    content: "const axios = require('axios');\naxios.get",
    line: 1,
    character: 7
  }
});
```
## Requirements
- Node.js >= 20
- Go (for Go package documentation)
- Python 3 (for Python package documentation)
- Internet connection (for NPM package documentation and Rust crate documentation)
- Language servers (for LSP functionality):
  - TypeScript/JavaScript: `npm install -g typescript-language-server typescript`
  - HTML/CSS/JSON: `npm install -g vscode-langservers-extracted`
## Development
```bash
# Install dependencies
npm i
# Build
npm run build
# Watch mode
npm run watch
```
## Contributing
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
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
                                    
                                    
                                
                            Connection Info
You Might Also Like
MarkItDown MCP
                                            
                                                
                                                    MarkItDown-MCP is a lightweight server for converting URIs to Markdown.
                                                
                                            
                                        
                                    Context 7
                                            
                                                
                                                    Context7 MCP provides up-to-date code documentation for any prompt.
                                                
                                            
                                        
                                    
                                    Continue
chunkhound
                                            
                                                
                                                    Chunkhound: Deep research tool for code and files.
                                                
                                            
                                        
                                    AutoDocs
chunkhound
                                            
                                                
                                                    Chunkhound transforms your codebase into a searchable knowledge base using...