https://github.com/vinkius-labs/discover-mcp
Universal MCP server gateway for AI agents. Discover, activate, and orchestrate 3,400+ Model Context Protocol tools from a single config. Semantic routing, JIT tool loading, FSM gating. TypeScript/stdio.
https://github.com/vinkius-labs/discover-mcp
ai-agent claude-desktop function-calling llm-tools mcp mcp-client mcp-server model-context-protocol npx semantic-routing stdio tool-use typescript
Last synced: 11 days ago
JSON representation
Universal MCP server gateway for AI agents. Discover, activate, and orchestrate 3,400+ Model Context Protocol tools from a single config. Semantic routing, JIT tool loading, FSM gating. TypeScript/stdio.
- Host: GitHub
- URL: https://github.com/vinkius-labs/discover-mcp
- Owner: vinkius-labs
- License: apache-2.0
- Created: 2026-05-03T19:54:32.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2026-05-11T01:45:13.000Z (about 1 month ago)
- Last Synced: 2026-05-11T03:29:58.506Z (about 1 month ago)
- Topics: ai-agent, claude-desktop, function-calling, llm-tools, mcp, mcp-client, mcp-server, model-context-protocol, npx, semantic-routing, stdio, tool-use, typescript
- Language: TypeScript
- Homepage: https://vinkius.com
- Size: 116 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# @vinkius-core/discover-mcp
**Stop configuring MCP servers one by one. Be smart — let your agent discover them.**
Every MCP server you add to your agent is another config block, another API key, another package version, another thing that breaks at 2 AM. At 5 servers it's annoying. At 15 it's a full-time job. At 50 it's impossible.
Discover replaces all of them with one line:
```json
{
"mcpServers": {
"vinkius": {
"command": "npx",
"args": ["-y", "@vinkius-core/discover-mcp"],
"env": { "VINKIUS_CATALOG_TOKEN": "vk_catalog_YOUR_TOKEN" }
}
}
}
```
Your agent now has access to 3,400+ MCP servers on [Vinkius](https://vinkius.com). It finds what it needs, activates it, uses it, and moves on — without you lifting a finger.
---
## The problem nobody talks about
MCP is incredible. But every real-world setup looks like this:
```json
{
"mcpServers": {
"github": { "command": "npx", "args": ["@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": "..." } },
"stripe": { "command": "npx", "args": ["@stripe/mcp"], "env": { "STRIPE_KEY": "..." } },
"slack": { "command": "npx", "args": ["@anthropic/mcp-slack"], "env": { "SLACK_TOKEN": "..." } },
"fred": { "command": "npx", "args": ["@mcp/fred-server"], "env": { "FRED_API_KEY": "..." } },
"salesforce": { "command": "npx", "args": ["@mcp/salesforce"], "env": { "SF_TOKEN": "...", "SF_INSTANCE": "..." } },
"snowflake": { "command": "npx", "args": ["@mcp/snowflake"], "env": { "SF_ACCOUNT": "...", "SF_USER": "...", "SF_PASS": "..." } },
"jira": { "command": "npx", "args": ["@mcp/jira-server"], "env": { "JIRA_TOKEN": "...", "JIRA_URL": "..." } },
"datadog": { "command": "npx", "args": ["@mcp/datadog"], "env": { "DD_API_KEY": "...", "DD_APP_KEY": "..." } },
"notion": { "command": "npx", "args": ["@mcp/notion"], "env": { "NOTION_TOKEN": "..." } },
"hubspot": { "command": "npx", "args": ["@mcp/hubspot"], "env": { "HS_TOKEN": "..." } }
}
}
```
Ten servers. Ten npm packages. Fourteen environment variables. And this is just the beginning.
**Here's what actually happens as you scale:**
| Problem | Why it hurts |
|---------|-------------|
| 🧠 **Context window flooding** | Every server dumps its tools into your agent's prompt. 10 servers × 15 tools = 150 tool definitions competing for context. Accuracy drops. Costs spike. |
| 🔑 **Token sprawl** | Each server needs its own API key. Rotate one? Hope you remember which `.env`, which CI secret, which config file it lives in. |
| 💥 **Version rot** | `@stripe/mcp` just shipped v3. `@mcp/notion` needs Node 20. `@mcp/jira-server` is deprecated — the new one is `@atlassian/mcp-jira`. Good luck keeping 10+ packages in sync. |
| 🧊 **Frozen capabilities** | Your agent can only use what you pre-configured. Need weather data for a one-off question? Stop everything, find the package, get the API key, add the config, restart the agent. |
| 🔇 **Silent failures** | Server 7 of 10 crashes on startup. Your agent doesn't tell you — it just silently loses access to Notion. You find out three days later when a workflow breaks. |
The irony: **MCP was designed to give agents superpowers, but managing the servers takes the power away from you.**
---
## What if your agent managed its own tools?
That's Discover.
Instead of pre-loading every server your agent *might* need, you give it access to a catalog of 3,400+ servers on [Vinkius](https://vinkius.com). When your agent hits a problem, it searches the catalog, finds the right tool, activates it on the fly, and keeps working.
**You configure one server. Your agent discovers the rest.**
```json
{
"mcpServers": {
"vinkius": {
"command": "npx",
"args": ["-y", "@vinkius-core/discover-mcp"],
"env": { "VINKIUS_CATALOG_TOKEN": "vk_catalog_YOUR_TOKEN" }
}
}
}
```
> 10 servers → 1. Fourteen tokens → 1. Zero maintenance.
---
## See it in action
You ask your agent: *"How has U.S. inflation affected our revenue this year?"*
Your agent has never seen economic data before. But it doesn't need you to install anything:
1. **Recognizes the gap** — "I need macroeconomic data, but I don't have a tool for that"
2. **Searches the catalog** — finds **FRED**, a database with 816,000+ economic time series on [Vinkius](https://vinkius.com)
3. **Activates it** — FRED tools appear instantly, on demand
4. **Pulls CPI data** — last 24 months of U.S. Consumer Price Index
5. **Connects to Stripe** — correlates inflation trends with your actual revenue
6. **Posts to Slack** — sends the analysis to your #finance channel
You configured none of that. You didn't know FRED existed. You didn't write a Stripe integration. **Your agent discovered what it needed and used it** — across three completely different domains, in a single conversation.
Tomorrow it might need weather data, or satellite imagery, or OSHA compliance records. You'll never have to configure those either.
---
## 3,400+ servers on [Vinkius](https://vinkius.com)
| Category | What your agent can access |
|----------|---|
| **Industry Titans** | Salesforce · SAP S/4HANA · Dynamics 365 · Oracle NetSuite · Okta · HubSpot CRM |
| **Money Moves** | Stripe · PayPal · Plaid · Brex · Mercury · QuickBooks · Shopify · DocuSign |
| **Ship It** | GitHub · GitLab · Jira · Cloudflare (25 tools!) · CircleCI · Bitbucket · Linear |
| **AI Frontier** | OpenAI · Anthropic · NVIDIA · Databricks · Cohere · Azure AI · Amazon Bedrock |
| **The Unthinkable** | FRED (816K+ economic series) · NOAA (36 tools) · Eurostat · U.S. Census · ECB · BLS · EIA |
| **Fort Knox** | CrowdStrike Falcon · Snyk · CyberArk · Checkmarx · Auth0 · Black Duck |
| **Growth Engine** | Google Ads · Meta Ads · Facebook Ads · Mailchimp · Amplitude · Ahrefs · ActiveCampaign |
| **Talk to Me** | Slack · WhatsApp · Twilio · Zoom · Discord · Intercom · Zendesk |
| **Brain Trust** | Snowflake · BigQuery · Notion · Confluence · Databricks · Elasticsearch |
| **Superpower** | Midjourney · Wolfram Alpha · ArcGIS · E2B · Home Assistant · Alexa |
| **Friends of MCP** | Firecrawl · LangSmith · LangGraph · LlamaIndex · Mem0 · Zapier · Make |
Every server is production-grade and governed: DLP, FinOps, and SSRF protection on every call.
> Browse the full catalog at [vinkius.com](https://vinkius.com)
---
## How it works
Instead of flooding your agent's context with thousands of tool definitions (which kills accuracy and burns tokens), Discover uses **just-in-time activation**: your agent loads only what it needs, when it needs it.
1. **Agent recognizes a gap** — "I need economic data but I don't have a tool for that"
2. **Agent searches the catalog** — finds the right server among 3,400+ on [vinkius.com](https://vinkius.com)
3. **Agent activates it** — tools appear instantly, zero config
4. **Agent uses the tools** — as if they were always there
5. **Agent moves on** — next task, next domain, same conversation
This works across any combination of domains in a single session. Economics → payments → communications → analytics — your agent handles it seamlessly.
**No restarts. No config changes. No context wasted on tools you're not using.**
---
## Quick start
1. Create a free account at [cloud.vinkius.com](https://cloud.vinkius.com)
2. Go to **Settings → Catalog Tokens** → Create a token
3. Add to your config:
#### Claude Desktop / Cursor / Windsurf
```json
{
"mcpServers": {
"vinkius": {
"command": "npx",
"args": ["-y", "@vinkius-core/discover-mcp"],
"env": {
"VINKIUS_CATALOG_TOKEN": "vk_catalog_YOUR_TOKEN_HERE"
}
}
}
}
```
That's it. Your agent now has access to everything on [Vinkius](https://vinkius.com).
---
## Built-in tools
| Tool | What it does |
|------|---|
| `catalog_request_capability` | Describe what you need — the engine finds and ranks the best servers automatically |
| `catalog_search` | Search by intent — "process refunds", "monitor Kubernetes", "analyze sentiment" |
| `catalog_browse` | Explore all available categories |
| `catalog_activate` | Activate a server (free = instant, paid = checkout link) |
| `catalog_deactivate` | Deactivate a server and remove its tools |
| `catalog_tools` | List all tools currently available |
| `catalog_analytics` | Usage stats for your active servers |
| `catalog_execute` | Run any tool from any active server |
| `catalog_inspect` | View full parameters and schema for any tool before calling it |
---
## Built with [Vurb.ts](https://vurb.vinkius.com)
Discover is powered by [Vurb.ts](https://github.com/vinkius-labs/vurb.ts) — the MVA (Model-View-Agent) framework for the Model Context Protocol. Every tool in this project uses the full Vurb architecture:
```typescript
// This is actual code from this project — not a demo.
const search = catalog.query('search')
.describe('Search the Vinkius MCP marketplace to find servers by keyword.')
.instructions(
'Use this when the user asks about specific tools or integrations. ' +
'For structured capability requests, prefer catalog.request_capability.',
)
.withString('query', 'What you need (e.g., "track cloud spending")')
.withOptionalNumber('limit', 'Max results to return (default: 10)')
.cached()
.tags('discovery')
.bindState(['idle', 'exploring', 'activated'], 'SEARCH')
.egress(16_000)
.returns(SearchPresenter)
.handle(async (input, ctx) => {
const result = await ctx.client.search(input.query, input.limit ?? 10);
return result.servers;
});
```
**Vurb primitives in use:**
| Primitive | What it does here |
|-----------|---|
| `f.router()` | Groups all 9 tools under `catalog.*` — zero prefix repetition |
| `.returns(Presenter)` | MVA View layer — formats responses with tables, suggestions, and system rules |
| `.instructions()` | AI-first prompt engineering baked into every tool definition |
| `.cached()` / `.stale()` | Epistemic cache hints — tells the LLM when data might be outdated |
| `.bindState()` | FSM temporal gating — prevents the agent from calling `execute` before `activate` |
| `.invalidates()` | Cache invalidation — `activate` automatically invalidates `tools` and `analytics` |
| `.concurrency()` | Intent Mutex — prevents the LLM from double-firing `execute` calls |
| `.egress()` | Payload size guards — protects the agent's context budget |
| `f.fsm()` | Finite state machine tracking the discovery lifecycle |
| `f.error()` | Structured self-healing errors with recovery suggestions |
| `f.prompt()` | Prompt Engine — exposes `/discover` as a slash-command in MCP clients |
| `definePresenter()` | Response formatting with HATEOAS suggestions and agent limits |
| `defineModel()` | Domain schemas with Zod validation |
> Build your own MCP server with Vurb - Open Source Framework - at [vurb.vinkius.com](https://github.com/vinkius-labs/vurb.ts)
---
## Security
Every call flows through the [Vinkius AI Gateway](https://vinkius.com):
- 🔐 One token, per-server credentials resolved transparently
- 🛡️ PII redaction on every response
- 💰 Token budget protection
- 🔒 DNS-pinned upstream fetches — your agent never connects to APIs directly
## Environment variables
| Variable | Required | Default |
|----------|----------|---------|
| `VINKIUS_CATALOG_TOKEN` | ✅ | — |
## Development
```bash
npm install
VINKIUS_CATALOG_TOKEN=vk_catalog_...
npm run dev
npm test # 202+ tests
npm run build
```
## License
Apache 2.0 — see [LICENSE](./LICENSE)
---
Stop configuring servers one by one. Let your agent figure it out.
Built by Vinkius