A generic MCP (Model Context Protocol) server that provides Claude or Amp with access to multiple local repositories and Salesforce data. Built for Nuon but designed to be reusable for any collection of repositories.
This MCP server allows Claude (or any LLM CLI) to:
- Search across multiple repositories simultaneously
- Read files from any configured repository
- List files matching patterns
- Explore directory structures
- Reference actual code and documentation during conversations
- Search and read Salesforce data (Opportunities, Accounts, Contacts, Leads, etc.)
Instead of Claude guessing or using potentially outdated training data, it can fetch live, accurate information from your actual repositories and Salesforce org.
- Python 3.10+
- ripgrep (
rg) - For fast file searching- macOS:
brew install ripgrep - Linux:
apt-get install ripgreporyum install ripgrep - Windows:
choco install ripgrep
- macOS:
- Claude Code CLI - The MCP client
git clone <this-repo>
cd nuon-mcp
# Create a virtual environment
python -m venv venv
# Activate the virtual environment
# On Linux/macOS:
source venv/bin/activate
# On Windows:
# venv\Scripts\activate
# Install dependencies
pip install -r requirements.txtCopy the example configuration and edit it with your repository paths:
cp config.example.yaml config.yamlEdit config.yaml with your actual repository paths:
repositories:
- label: examples
path: /Users/you/dev/example-app-configs
description: Example app configurations
- label: nuon-docs
path: /Users/you/dev/nuon/docs
description: Official Nuon documentation
# Add more repositories as neededImportant: Use absolute paths. The ~ character will be expanded automatically.
Add the server to your Claude configuration (use the Python from your virtual environment):
claude mcp add --scope user --transport stdio nuon-local -- /absolute/path/to/nuon-mcp/venv/bin/python /absolute/path/to/nuon-mcp/server.pyOn Windows:
claude mcp add --scope user --transport stdio nuon-local -- /absolute/path/to/nuon-mcp/venv/Scripts/python.exe /absolute/path/to/nuon-mcp/server.pyReplace /absolute/path/to/nuon-mcp/ with the actual path to your installation.
If you've configured Salesforce in your config.yaml, you need to pass the environment variables when adding the MCP server:
claude mcp add -e SF_CLIENT_ID=your_client_id \
-e SF_CLIENT_SECRET=your_client_secret \
-e SF_LOGIN_URL=https://login.salesforce.com \
--scope user --transport stdio nuon-local -- \
/absolute/path/to/nuon-mcp/venv/bin/python /absolute/path/to/nuon-mcp/server.pyReplace your_client_id and your_client_secret with your actual Salesforce Connected App credentials.
Note: If you've already added the MCP server without environment variables, remove it first with claude mcp remove nuon -s user before re-adding with the -e flags.
Start a new Claude session and try:
list all available sources
You should see all your configured repositories.
amp mcp add nuon -- /absolute/path/to/nuon-mcp/venv/bin/python /absolute/path/to/nuon-mcp/server.pyThen start Amp and test with similar commands as Claude.
Each repository in config.yaml has three fields:
- label: short-name # Used to reference this repo in tools
path: /absolute/path # Full path to the repository
description: What it is # Human-readable description- label: A short, memorable identifier (e.g., "examples", "docs", "main-app")
- path: Absolute path to the repository root
- description: Brief description of what the repository contains
You can add as many repositories as needed - there's no hard limit.
Add a Salesforce source to config.yaml:
- type: salesforce
label: my-salesforce
description: Salesforce production org
objects:
- Opportunity
- Account
- Contact
- Lead
- Task
- EventRequired environment variables:
SF_CLIENT_ID- Your Connected App client IDSF_CLIENT_SECRET- Your Connected App client secretSF_LOGIN_URL-https://login.salesforce.com(orhttps://test.salesforce.comfor sandbox)
Once configured, you can search across both filesystem repositories and Salesforce data simultaneously.
You have two options for sharing this MCP server with a team:
Create a .mcp.json file in your project repository:
{
"mcpServers": {
"nuon": {
"type": "stdio",
"command": "python",
"args": ["/shared/path/to/nuon-mcp/server.py"]
}
}
}When team members clone the repo and run claude, they'll be prompted once to approve the configuration, then it works automatically.
Each developer runs the claude mcp add command individually with their own local paths.
Once configured, you can ask Claude to:
Show me all available repositories
Search all repos for "rds"
Search the examples repo for "rds setup"
Compare the Coder and BYOC Nuon configs and explain the differences
Find all examples that use RDS and show me the patterns
Search everywhere for "Q4 planning" - check both meeting notes and opportunities
Show me all Acme Corp references in my notes and Salesforce
The server exposes these tools to Claude:
| Tool | Description |
|---|---|
list_sources |
Show all configured repositories |
search_all |
Search across all repositories |
search_repo |
Search a specific repository |
read_file |
Read a file from a repository |
list_files |
List files matching a glob pattern |
get_directory_tree |
Show directory structure |
- Language: Python 3
- Dependencies: MCP SDK, PyYAML, aiohttp (for Salesforce)
- Search: Uses ripgrep for filesystem repositories, SOQL for Salesforce
- Source Types: Filesystem repositories and Salesforce orgs
- Security: Read-only operations, path validation prevents directory traversal
Install ripgrep (rg):
- macOS:
brew install ripgrep - Linux:
apt-get install ripgrep - Windows:
choco install ripgrep
Make sure you've copied config.example.yaml to config.yaml in the same directory as server.py.
Check that:
- The paths in
config.yamlare absolute paths - The directories actually exist
- You have read permissions
Check the startup output for validation errors:
python server.pyYou should see:
Starting Nuon MCP Server...
Loading repositories:
✓ examples: /path/to/repo (142 files)
✓ nuon-docs: /path/to/docs (38 files)
Server ready. 2 repositories loaded.
Connect Claude to:
- Example app configurations
- Official documentation
- Reference applications (BYOC, split-plane, etc.)
Now when building new apps, Claude can reference actual working examples and current docs instead of guessing.
This is a generic MCP server - use it for any collection of repositories:
- Your company's monorepo + docs + example apps
- Multiple microservice repositories
- Documentation sites + code repositories
- Open source projects you work on
For more detailed information, see the readme/ directory:
- MCP_EXPLAINED.md - What is MCP and how does it work?
- HOW_TOOLS_WORK.md - How Claude discovers and uses tools
- USING_WITH_NOTES.md - Use this server with personal notes, not just code
- CONFIG_FILES_EXPLAINED.md - Understanding the configuration files
- TROUBLESHOOTING.md - Common issues and solutions
This is designed to be simple and extensible. To add new tools:
- Add the tool definition in
list_tools() - Add the handler in
call_tool() - Follow the existing patterns for path validation and error handling
[Add your license here]
Built for Nuon.co to help users leverage Claude for building new applications with accurate, live access to examples and documentation.