N-to-1 MCP Orchestration. Unified gateway for multiple MCP servers with intelligent tool discovery.
io.github.portel-dev/ncp MCP Server
N-to-1 MCP orchestration via a unified gateway that performs intelligent tool discovery across multiple MCP servers. The package is identified as @portel/ncp (npm) and is distributed with GitHub releases. It is positioned as an MCP client/server orchestration layer for coordinating tools.
๐ ๏ธ Key Features
N-to-1 MCP orchestration
Unified gateway for multiple MCP servers
Intelligent tool discovery
๐ Use Cases
Coordinate calls across multiple MCP servers through a single gateway
Integrate MCP tools into agent workflows targeting AI platforms
Use in MCP-client setups where multiple tool sources must be unified
โก Developer Benefits
Centralizes access to tools from multiple MCP servers
Supports MCP tool discovery for easier integration in clients
Relevant topics include mcp, mcp-server, and mcp-client
โ ๏ธ Limitations
Description does not specify supported transports, authentication, or runtime behavior beyond tool discovery and orchestration
Your MCPs, supercharged. Find any tool instantly, execute with code mode, run on schedule, discover skills, load Photons, ready for any client. Smart loading saves tokens and energy.
Related Portel project:Photon turns TypeScript methods into reliable agent-facing capabilities: MCP tools, embedded app UIs, CLI commands, web routes, schedules, webhooks, retries, and Beam interfaces. NCP helps agents discover and operate tools; Photon helps developers build the tools and apps agents can trust.
๐ What is NCP?
Instead of your AI juggling 50+ tools scattered across different MCPs, NCP gives it a single, unified interface with code mode execution, scheduling, skills discovery, and custom Photons.
Your AI sees just 2-3 simple tools:
find - Search for any tool, skill, or Photon: "I need to read a file" โ finds the right tool automatically
run - Execute tools individually (when code mode is disabled)
Behind the scenes, NCP manages all 50+ tools + skills + Photons: routing requests, discovering the right capability, executing code, scheduling tasks, managing health, and caching responses.
Why this matters:
Your AI stops analyzing "which tool do I use?" and starts doing actual work
Code mode lets AI write multi-step TypeScript workflows combining tools, skills, and scheduling
Skills provide domain expertise: canvas design, PDF manipulation, document generation, more
Photons enable custom TypeScript MCPs without npm publishing
97% fewer tokens burned on tool confusion (2,500 vs 103,000 for 80 tools)
5x faster responses (sub-second tool selection vs 5-8 seconds)
Your AI becomes focused. Not desperate.
๐ NEW: Project-level configuration - each project can define its own MCPs automatically
What's MCP? The Model Context Protocol by Anthropic lets AI assistants connect to external tools and data sources. Think of MCPs as "plugins" that give your AI superpowers like file access, web search, databases, and more.
You gave your AI assistant 50 tools to be more capable. Instead, you got desperation:
Paralyzed by choice ("Should I use read_file or get_file_content?")
Exhausted before starting ("I've spent my context limit analyzing which tool to use")
Costs explode (50+ tool schemas burn tokens before any real work happens)
Asks instead of acts (used to be decisive, now constantly asks for clarification)
๐งธ Why Too Many Tools Break the System
Think about it like this:
A child with one toy โ Treasures it, masters it, creates endless games with it
A child with 50 toys โ Can't hold them all, gets overwhelmed, stops playing entirely
Your AI is that child. MCPs are the toys. More isn't always better.
The most creative people thrive with constraints, not infinite options. A poet given "write about anything" faces writer's block. Given "write a haiku about rain"? Instant inspiration.
Your AI is the same. Give it one perfect tool โ Instant action. Give it 50 tools โ Cognitive overload. NCP provides just-in-time tool discovery so your AI gets exactly what it needs, when it needs it.
For advanced users or MCP clients not listed above:
Step 1: Install NCP
bash
npm install -g @portel/ncp
Step 2: Import existing MCPs (optional)
bash
ncp config import # Paste your config JSON when prompted
Step 3: Configure your MCP client
Add to your client's MCP configuration:
json
{"mcpServers":{"ncp":{"command":"ncp"}}}
โ Done! Your AI now sees just 2 tools instead of 50+.
๐งช Test Drive: See the Difference Yourself
Want to experience what your AI experiences? NCP has a human-friendly CLI:
๐ Smart Discovery
bash
# Ask like your AI would ask:
ncp find "I need to read a file"
ncp find "help me send an email"
ncp find "search for something online"
Notice: NCP understands intent, not just keywords. Just like your AI needs.
๐ Ecosystem Overview
bash
# See your complete MCP ecosystem:
ncp list --depth 2
# Get help anytime:
ncp --help
โก Direct Testing
bash
# Test any tool safely:
ncp run filesystem read_file --path "/tmp/test.txt"
Why this matters: You can debug and test tools directly, just like your AI would use them.
โ Verify Everything Works
bash
# 1. Check NCP is installed correctly
ncp --version
# 2. Confirm your MCPs are imported
ncp list
# 3. Test tool discovery
ncp find "file"# 4. Test a simple tool (if you have filesystem MCP)
ncp run filesystem read_file --path "/tmp/test.txt" --dry-run
โ Success indicators:
NCP shows version number
ncp list shows your imported MCPs
ncp find returns relevant tools
Your AI client shows only NCP in its tool list
๐ช From Tools to Automation: The Real Power
You've seen find (discover tools) and code (execute TypeScript). Individually, they're useful. Together with scheduling, they become an automation powerhouse.
A Real Example: The MCP Conference Scraper
We wanted to stay on top of MCP-related conferences and workshops for an upcoming release. Instead of manually checking websites daily, we asked Claude:
"Set up a daily scraper that finds MCP conferences and saves them to a CSV file"
What Claude did:
Used code to write the automation:
typescript
// Search the web for MCP conferencesconst results = await web.search({
query: "Model Context Protocol conference 2025"
});
// Read each result and extract detailsfor (const url of results) {
const content = await web.read({ url });
// Extract title, deadline, description...// Save to ~/.ncp/mcp-conferences.csv
}
Used schedule to automate it:
bash
ncp schedule create code:run "every day at 9am" \
--name "MCP Conference Scraper" \
--catchup-missed
How to set this up yourself:
First, install the web photon (provides search and read capabilities):
bash
# Install from the official photons repo
ncp photon add https://raw.githubusercontent.com/portel-dev/photons/main/web.photon.ts
Then ask Claude to create the scraper - it will use the web photon automatically.
What happens now:
Every morning at 9am, the scraper runs automatically
Searches for new MCP events and adds them to the CSV
If our laptop was closed at 9am, it catches up when we open it
We wake up to fresh conference data - no manual work
The insight:find and code let AI write automation. schedule makes it run forever. That's the powerhouse.
๐ก Why NCP Transforms Your AI Experience
๐ง From Desperation to Delegation
Desperate Assistant: "I see 50 tools... which should I use... let me think..."
Executive Assistant: "I need file access. Done." (NCP handles the details)
๐ Scale to zero - Servers automatically sleep when not needed
Note: Hibernation is a server-side feature. NCP's standard HTTP/SSE client automatically works with both traditional and hibernation-enabled servers without any special configuration.
Photon Runtime (CLI vs DXT)
The TypeScript Photon runtime is enabled by default, but the toggle lives in different places depending on how you run NCP:
CLI / npm installs: Edit ~/.ncp/settings.json (or run ncp config) and set enablePhotonRuntime: true or false. You can also override adโhoc with NCP_ENABLE_PHOTON_RUNTIME=true ncp find "photon".
DXT / client bundles (Claude Desktop, Cursor, etc.): These builds ignore~/.ncp/settings.json. Configure photons by setting the env var inside the client config:
If you disable the photon runtime, internal MCPs continue to work, but .photon.ts files are ignored until you re-enable the flag.
Import from Anywhere
bash
# From clipboard (any JSON config)
ncp config import
# From specific file
ncp config import "~/my-mcp-config.json"# From Claude Desktop (auto-detected paths)
ncp config import
๐ Troubleshooting
Import Issues
bash
# Check what was imported
ncp list
# Validate health of imported MCPs
ncp config validate
# See detailed import logs
DEBUG=ncp:* ncp config import
AI Not Using Tools
Check connection:ncp list (should show your MCPs)
Test discovery:ncp find "your query"
Validate config: Ensure your AI client points to ncp command
Performance Issues
bash
# Check MCP health (unhealthy MCPs slow everything down)
ncp list --depth 1
# Clear cache if neededrm -rf ~/.ncp/cache
# Monitor with debug logs
DEBUG=ncp:* ncp find "test"
๐ Why We Built This
Like Yin and Yang, everything relies on the balance of things.
Compute gives us precision and certainty.
AI gives us creativity and probability.
We believe breakthrough products emerge when you combine these forces in the right ratio.
How NCP embodies this balance:
What NCP Does
AI (Creativity)
Compute (Precision)
The Balance
Tool Discovery
Understands "read a file" semantically
Routes to exact tool deterministically
Natural request โ Precise execution
Orchestration
Flexible to your intent
Reliable tool execution
Natural flow โ Certain outcomes
Health Monitoring
Adapts to patterns
Monitors connections, auto-failover
Smart adaptation โ Reliable uptime
Neither pure AI (too unpredictable) nor pure compute (too rigid).
Your AI stays creative. NCP handles the precision.
๐ Deep Dive: How It Works
Want the technical details? Token analysis, architecture diagrams, and performance benchmarks: