nanocode-mcp
README.md
# nanocode MCP Server
A lightweight, fast, and secure Model Context Protocol (MCP) server that exposes coding agent tools for file manipulation, code searching, and shell command execution.
## Overview
**nanocode-mcp** is an MCP server designed to give AI assistants and MCP clients the ability to interact with your local filesystem and execute shell commands. Built with [FastMCP](https://github.com/jlowin/fastmcp), it provides a streamlined set of tools for coding tasks.
Based on [nanocode](https://github.com/1rgs/nanocode) by 1rgs.
- **Author & Maintainer**: The A-Tech Corporation PTY LTD
- **License**: Open Source
## Features
### Available Tools
| Tool | Description |
|------|-------------|
| `read_file` | Read file contents with line numbers, supports offset and limit |
| `write_file` | Write content to a file (creates or overwrites) |
| `edit_file` | Edit a file by replacing text (find and replace) |
| `glob_search` | Find files by glob pattern, sorted by modification time |
| `grep_search` | Search files for regex patterns |
| `run_bash` | Execute shell commands with timeout support |
| `semantic_search` | Search codebase using natural language queries (requires Ollama) |
| `reindex_codebase` | Manually trigger a full re-index of the codebase |
### Semantic Search
The `semantic_search` tool enables natural language code search using vector embeddings. It indexes your codebase in the background and allows you to search for code using descriptive queries.
**Requirements:**
- [Ollama](https://ollama.com/) installed and running
- `nomic-embed-text` model: `ollama pull nomic-embed-text`
**How it works:**
- On startup, the server indexes supported file types in the background
- Index is persisted to `.nanocode-mcp/vector_store.json`
- Truncates files to ~6000 chars to stay within embedding model context limits
**Supported file types:** `.py`, `.js`, `.ts`, `.jsx`, `.tsx`, `.json`, `.md`, `.txt`, `.yaml`, `.yml`, `.toml`, `.ini`, `.cfg`, `.sh`, `.bash`, `.zsh`, `.html`, `.css`, `.scss`, `.sql`, `.xml`, `.go`, `.rs`, `.java`, `.c`, `.cpp`, `.h`, `.hpp`
| `semantic_search` | Search codebase using natural language queries (requires Ollama) |
| `reindex_codebase` | Manually trigger a full re-index of the codebase |
### Semantic Search
The server includes a semantic search feature that indexes your codebase and enables natural language queries. It uses local embeddings via Ollama with the `nomic-embed-text` model.
**Setup:**
1. Install Ollama: https://ollama.com/
2. Pull the embedding model:
```bash
ollama pull nomic-embed-text
```
The server automatically indexes supported file types in the background on startup. Indexed files include: `.py`, `.js`, `.ts`, `.jsx`, `.tsx`, `.json`, `.md`, `.txt`, `.yaml`, `.yml`, `.toml`, `.ini`, `.cfg`, `.sh`, `.bash`, `.zsh`, `.html`, `.css`, `.scss`, `.sql`, `.xml`, `.go`, `.rs`, `.java`, `.c`, `.cpp`, `.h`, `.hpp`
**Example:**
```
semantic_search("find authentication logic")
```
## Installation
### Prerequisites
- Python 3.10 or higher
- `fastmcp` package
- [Ollama](https://ollama.com/) with `nomic-embed-text` model (for semantic search)
### Setup
1. Clone the repository
2. Install dependencies:
```bash
pip install -r requirements.txt
```
> **Note:** `openai` is only required for the CLI test client.
3. Install fastmcp:
```bash
pip install fastmcp
```
## Usage
### Running the Server
Start the MCP server using stdio transport (default):
```bash
python mcp_server.py
```
For HTTP transport:
```bash
python -c "from mcp_server import mcp; mcp.run(transport='http', host='0.0.0.0', port=8000)"
```
### Integrating with MCP Clients
#### Claude Desktop
Add to your Claude Desktop configuration file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"nanocode": {
"command": "python",
"args": ["C:/path/to/mcp_server.py"]
}
}
}
```
#### Other MCP Clients
For clients that support MCP over stdio, simply run:
```bash
python /path/to/mcp_server.py
```
### CLI Test Client
A CLI-based test client is included for easy testing with [Ollama](https://ollama.com/).
**Prerequisites:**
1. Install Ollama: https://ollama.com/
2. Pull the model:
```bash
ollama pull qwen2.5:4b
```
3. Install additional dependency:
```bash
pip install openai
```
**Run the client:**
```bash
python client.py
```
**Features:**
- Interactive chat interface with colored output
- Automatic tool calling via the AI agent
- Type `tools` to list available MCP tools
- Type `exit` or `quit` to stop
**Example session:**
```
You: List all Python files in the current directory
[Tool Call] glob_search({'pattern': '**/*.py'})
[Result] ./mcp_server.py
./client.py
Assistant: I found 2 Python files in the current directory:
- mcp_server.py
- client.py
```
## Tool Reference
### `read_file`
Read file contents with line numbers.
**Parameters:**
- `path` (string): File path to read
- `offset` (int, optional): Starting line number (0-indexed, default: 0)
- `limit` (int, optional): Maximum lines to read (default: all)
**Returns:** File content with line numbers prefixed
---
### `write_file`
Write content to a file, creating or overwriting it.
**Parameters:**
- `path` (string): File path to write
- `content` (string): Content to write
**Returns:** `"ok"` on success
---
### `edit_file`
Edit a file by replacing text.
**Parameters:**
- `path` (string): File path to edit
- `old_string` (string): Text to find and replace (must exist)
- `new_string` (string): Replacement text
- `replace_all` (bool, optional): Replace all occurrences (default: false)
**Returns:** `"ok"` on success, error message if not found or not unique
---
### `glob_search`
Find files matching a glob pattern, sorted by modification time (newest first).
**Parameters:**
- `pattern` (string): Glob pattern (e.g., `**/*.py`)
- `path` (string, optional): Base directory (default: current directory)
**Returns:** Newline-separated list of matching files
---
### `grep_search`
Search files for a regex pattern.
**Parameters:**
- `pattern` (string): Regex pattern to search
- `path` (string, optional): Base directory (default: current directory)
**Returns:** Matching lines as `filepath:line_number:content` (max 50 results)
---
### `run_bash`
Execute a shell command.
**Parameters:**
- `command` (string): Shell command to execute
- `timeout` (int, optional): Timeout in seconds (default: 30)
**Returns:** Command output (stdout and stderr combined)
---
### `semantic_search`
Search the codebase using natural language queries via vector embeddings.
**Parameters:**
- `query` (string): Natural language query describing what to search for
- `limit` (int, optional): Maximum results to return (default: 5)
**Returns:** Ranked search results with file paths, similarity scores, and context snippets
**Requires:** Ollama running with `nomic-embed-text` model
---
### `reindex_codebase`
Manually trigger a full re-index of the codebase for semantic search.
**Parameters:** None
**Returns:** Status message about the re-indexing operation
---
### `semantic_search`
Search the codebase using natural language queries via vector embeddings.
**Parameters:**
- `query` (string): Natural language query describing what to search for
- `limit` (int, optional): Maximum results to return (default: 5)
**Returns:** Ranked search results with file paths, similarity scores, and context snippets
**Requires:** Ollama running with `nomic-embed-text` model
---
### `reindex_codebase`
Manually trigger a full re-index of the codebase for semantic search.
**Parameters:** None
**Returns:** Status message about the re-indexing operation
---
### `semantic_search`
Search the codebase using natural language queries.
**Parameters:**
- `query` (string): Natural language query describing what to search for
- `limit` (int, optional): Maximum results to return (default: 5)
**Returns:** Ranked search results with file paths, similarity scores, and context snippets
**Requires:** Ollama with `nomic-embed-text` model running
---
### `reindex_codebase`
Manually trigger a full re-index of the codebase.
**Parameters:** None
**Returns:** Status message about the re-indexing operation
**Note:** Re-indexing runs in the background and clears the existing index
## Security Considerations
⚠️ **Warning**: This server provides direct filesystem access and shell command execution capabilities. Use with caution:
- Only connect to trusted MCP clients
- Review commands before execution in sensitive environments
- Consider running in a containerized or sandboxed environment
- The `run_bash` tool has timeout protection but no command restrictions
## Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
## License
Open Source - see LICENSE file for details.
---
**Made with ❤️ by [The A-Tech Corporation PTY LTD](https://theatechcorporation.com)**
---
## Feedback & Community
Found this MCP server genuinely useful? I'd love to hear from you.
- **Email**: [hamish@atech.industries](mailto:hamish@atech.industries)
- **Join our free Open Source AI Builders Club on Skool**: [https://www.skool.com/open-source-ai-builders-club/about?ref=da946a67c5c646e991b96ea9ce7ad9e4](https://www.skool.com/open-source-ai-builders-club/about?ref=da946a67c5c646e991b96ea9ce7ad9e4)
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues