MCP Nexus
Allows task and project management via Todoist API through the MCP Nexus middleware.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Nexusbrowse available services"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Nexus
Browse-first MCP middleware — an LLM-friendly nexus for discovering and invoking MCP tools across multiple services.
AI agents use this as a single MCP endpoint to browse, inspect, and call tools from many upstream MCP servers — without flooding their context with every tool schema upfront.
How It Works
Instead of connecting every MCP server directly (and loading all their tool schemas at session start), agents connect to one nexus server and discover tools on demand:
browse_services → [{id: "todoist", name: "Todoist"}, {id: "outlook", ...}]
browse_tools("todoist") → ["todoist__get-task", "todoist__create-task", ...]
search_tools("send email") → [{name: "outlook__search-emails", serviceId: "outlook"}, ...]
get_schemas(["todoist__get-task"]) → [full input schema]
call_tool("todoist__get-task", {id: "123"}) → resultAgents can either browse (list services → list tools) or search (find tools by keyword or semantic similarity across all services at once).
Related MCP server: MCPFind
Quick Start
Prerequisites
Node.js 22+
Install & Run
# Install dependencies
npm install
# Copy a config (or create your own)
cp mcp-nexus.example.yaml mcp-nexus.yaml
# Start in dev mode (with hot reload)
npm run dev
# Or with a custom config path and verbose logging
npx tsx src/index.ts --config ./mcp-nexus.example.yaml --verboseVerify It's Running
# Health check
curl http://localhost:8050/healthConfiguration
Create a mcp-nexus.yaml file:
port: 8050
auth:
enabled: false # Set to true and provide a token in production
token: ""
allowedOrigins: # Optional — restrict CORS to these origins when auth is on
- https://openwebui.local
connectors:
httpReuseIdleTimeoutSeconds: 300 # Reap idle upstream HTTP sessions after N seconds
recoveryIntervalSeconds: 30 # Probe failed sources every N seconds (0 = disabled)
search:
type: lexical # "lexical" (keyword matching) or "semantic" (embedding-based)
maxResults: 20
# semantic: # Uncomment to enable semantic search
# provider: built-in # "built-in" (local), "ollama", or "openai-compatible"
# model: Xenova/all-MiniLM-L6-v2
# batchSize: 32
# # For ollama: provider: ollama, baseUrl: http://ollama:11434, model: nomic-embed-text
# # For openai-compatible: provider: openai-compatible, baseUrl: https://api.openai.com, model: text-embedding-3-small, apiKeyEnv: OPENAI_API_KEY
sources:
- id: todoist
name: Todoist
description: Task and project management
transport: http
url: http://todoist-mcp:8081/mcp
filter: ["*"] # Glob patterns — only index matching tools
- id: outlook
name: Outlook
description: Email and calendar
transport: stdio
command: npx
args: ["-y", "@softeria/ms-365-mcp-server"]
env:
API_KEY: "your-key"
preloadedTools:
- search-emails
- list-foldersConfig Reference
Field | Description |
| HTTP port for the MCP endpoint (default: 8050) |
| Require |
| Static bearer token (override via |
| Optional list of origins allowed via CORS when auth is enabled. If omitted, the request |
| Idle timeout before a cached upstream HTTP session is reaped (default: 300) |
| Interval (seconds) for background recovery probes of failed sources. 0 = disabled (default: 30) |
| Search strategy: |
| Max results returned by |
| Embedding provider: |
| Model name (provider-specific; defaults vary by provider) |
| Base URL for |
| Name of env var containing the API key (required for |
| Batch size for embedding generation at index time (default: 32) |
| Where to cache the downloaded model ( |
| Unique identifier for the source (used in namespaced tool names) |
|
|
| Upstream MCP server URL (required for HTTP transport) |
| Executable to spawn (required for stdio transport) |
| Optional glob patterns to curate which tools are indexed |
| Optional array of non-prefixed tool names to surface directly in |
Search
The search_tools tool lets agents find tools by query instead of browsing every service. Two strategies are available, configured at startup via search.type:
Lexical (default)
Keyword matching against tool names and descriptions. Fast, no dependencies. Best for queries like "send email" or "ebay orders" — concise terms that appear in the tool metadata.
search:
type: lexical
maxResults: 20Semantic
Embedding-based similarity search. Understands natural-language intent like "I want to send an email" or "find tools for managing my inbox". Requires an embedding provider.
search:
type: semantic
maxResults: 20
semantic:
provider: built-in # local model, no external dependencies
model: Xenova/all-MiniLM-L6-v2
batchSize: 32
modelCachePath: /app/data/model-cacheEmbedding Providers
Provider | Description | Config |
| Local model via Transformers.js (all-MiniLM-L6-v2, 384d) | No external dependencies. Downloads model on first run. |
| Local Ollama instance (nomic-embed-text, 768d) | Requires |
| Any OpenAI-compatible API (text-embedding-3-small, 1536d) | Requires |
If the semantic provider fails at query time (e.g. Ollama is down), the search engine falls back to lexical automatically. The response includes strategy and fellBackToLexical fields so the agent can tell what happened.
Docker
# Build
npm run docker:build
# Run
docker run -d \
--name mcp-nexus \
-p 8050:8050 \
-v ./mcp-nexus.yaml:/app/mcp-nexus.yaml \
-e MCP_NEXUS_AUTH_TOKEN=your-token \
mcp-nexusOr use the provided Dockerfile directly:
docker build -t mcp-nexus .MCP Tools
The nexus exposes these tools to connected AI agents:
Tool | What it does |
| List all available upstream services with descriptions and tool counts |
| List all tools for a specific service (namespaced names) |
| Search for tools by keyword (lexical) or natural language (semantic) |
| Get full input schemas for one or more tools in bulk |
| Call a tool on an upstream service (passes through the result) |
| Diagnostic — shows index summary, source availability, and error info |
Additionally, any tools listed under preloadedTools on a source will appear directly in the tools/list response alongside the built-in nexus tools — no browsing needed.
Architecture
AI Agent ──Streamable HTTP──▶ mcp-nexus ──HTTP/stdio──▶ todoist, outlook, ...
│
In-memory index
Session managementTransport: MCP Streamable HTTP (2025-11-05)
Auth: Optional bearer token, with optional CORS origin allowlist
Health:
GET /healthendpoint for monitoring (Uptime Kuma, etc.)HTTP connection reuse: keep-alive sessions per source, reaped after an idle timeout
Project Structure
src/
index.ts Entry point with CLI args
config.ts YAML loader with Zod validation
types.ts Shared types and interfaces
logger.ts Structured logger
namespace.ts Tool name namespacing (<sourceId>__<toolName>)
glob-utils.ts Glob pattern matching for tool filtering
indexer.ts Startup index — fetches tools/list from all sources
recovery.ts Background recovery probes for failed sources
nexus-server.ts MCP server — tool definitions and request handling
sources/
http-source.ts HTTP transport client (Streamable HTTP)
stdio-source.ts Stdio transport client (subprocess, JSON-RPC)
search/
index.ts SearchEngine — strategy dispatch + fallback
types.ts Search config, result, and provider interfaces
lexical-search.ts Keyword matching (token-based scoring)
semantic-search.ts Embedding similarity search
providers/
builtin.ts Transformers.js (all-MiniLM-L6-v2, local)
ollama.ts Ollama embedding API (nomic-embed-text)
openai.ts OpenAI-compatible embedding APIScripts
Command | Description |
| Run with hot reload via |
| Run without watch |
| Compile TypeScript to |
| Build Docker image |
| Run Docker container |
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Aidan-Kay/mcp-nexus'
If you have feedback or need assistance with the MCP directory API, please join our Discord server