feat: MCP server catalog core -- signed, validated, resolvable (#10, #61) #65

Merged
the_og merged 3 commits from feat/10-catalog-core into main 2026-07-12 17:55:49 -04:00
Showing only changes of commit 88e93edc6c - Show all commits
+54 -62
View File
@@ -2,6 +2,7 @@
"schema": 1, "schema": 1,
"version": 1, "version": 1,
"updated": "2026-07-12", "updated": "2026-07-12",
"signed_at": "2026-07-12T21:35:19Z",
"servers": [ "servers": [
{ {
"id": "filesystem", "id": "filesystem",
@@ -16,7 +17,7 @@
"command": "npx", "command": "npx",
"args": [ "args": [
"-y", "-y",
"@modelcontextprotocol/server-filesystem", "@modelcontextprotocol/server-filesystem@2026.7.10",
"<ALLOWED_DIR>" "<ALLOWED_DIR>"
] ]
}, },
@@ -25,7 +26,8 @@
}, },
"env_required": {}, "env_required": {},
"docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem", "docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem",
"notes": "Part of the official modelcontextprotocol/servers reference monorepo (star count is for the whole repo). Clients that support MCP 'roots' can also grant directories dynamically instead of via args." "notes": "Part of the official modelcontextprotocol/servers reference monorepo (star count is for the whole repo). Clients that support MCP 'roots' can also grant directories dynamically instead of via args.",
"last_release": "2026-07-10"
}, },
{ {
"id": "fetch", "id": "fetch",
@@ -39,13 +41,14 @@
"config": { "config": {
"command": "uvx", "command": "uvx",
"args": [ "args": [
"mcp-server-fetch" "mcp-server-fetch@2026.7.10"
] ]
}, },
"placeholders": {}, "placeholders": {},
"env_required": {}, "env_required": {},
"docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/fetch", "docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/fetch",
"notes": "Can access local/internal IPs, so treat as a mild security risk on untrusted networks. Add '--ignore-robots-txt' or '--user-agent=...' as extra args if needed." "notes": "Can access local/internal IPs, so treat as a mild security risk on untrusted networks. Add '--ignore-robots-txt' or '--user-agent=...' as extra args if needed.",
"last_release": "2026-07-10"
}, },
{ {
"id": "memory", "id": "memory",
@@ -60,13 +63,14 @@
"command": "npx", "command": "npx",
"args": [ "args": [
"-y", "-y",
"@modelcontextprotocol/server-memory" "@modelcontextprotocol/server-memory@2026.7.4"
] ]
}, },
"placeholders": {}, "placeholders": {},
"env_required": {}, "env_required": {},
"docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/memory", "docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/memory",
"notes": "Stores entities/relations as a local JSON knowledge graph (path configurable via MEMORY_FILE_PATH env var)." "notes": "Stores entities/relations as a local JSON knowledge graph (path configurable via MEMORY_FILE_PATH env var).",
"last_release": "2026-07-04"
}, },
{ {
"id": "sequential-thinking", "id": "sequential-thinking",
@@ -81,13 +85,14 @@
"command": "npx", "command": "npx",
"args": [ "args": [
"-y", "-y",
"@modelcontextprotocol/server-sequential-thinking" "@modelcontextprotocol/server-sequential-thinking@2026.7.4"
] ]
}, },
"placeholders": {}, "placeholders": {},
"env_required": {}, "env_required": {},
"docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking", "docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking",
"notes": "Set DISABLE_THOUGHT_LOGGING=true to stop it from printing each thought step to the console." "notes": "Set DISABLE_THOUGHT_LOGGING=true to stop it from printing each thought step to the console.",
"last_release": "2026-07-04"
}, },
{ {
"id": "git", "id": "git",
@@ -101,7 +106,7 @@
"config": { "config": {
"command": "uvx", "command": "uvx",
"args": [ "args": [
"mcp-server-git", "mcp-server-git@2026.7.10",
"--repository", "--repository",
"<REPO_PATH>" "<REPO_PATH>"
] ]
@@ -111,7 +116,8 @@
}, },
"env_required": {}, "env_required": {},
"docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/git", "docs_url": "https://github.com/modelcontextprotocol/servers/tree/main/src/git",
"notes": "Operates on a local checkout only; it does not talk to GitHub/GitLab APIs (pair with the GitHub or GitLab server for that)." "notes": "Operates on a local checkout only; it does not talk to GitHub/GitLab APIs (pair with the GitHub or GitLab server for that).",
"last_release": "2026-07-10"
}, },
{ {
"id": "github", "id": "github",
@@ -130,7 +136,7 @@
"--rm", "--rm",
"-e", "-e",
"GITHUB_PERSONAL_ACCESS_TOKEN", "GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server" "ghcr.io/github/github-mcp-server:v1.0.1"
] ]
}, },
"placeholders": {}, "placeholders": {},
@@ -152,13 +158,14 @@
"config": { "config": {
"command": "npx", "command": "npx",
"args": [ "args": [
"@playwright/mcp@latest" "@playwright/mcp@0.0.78"
] ]
}, },
"placeholders": {}, "placeholders": {},
"env_required": {}, "env_required": {},
"docs_url": "https://github.com/microsoft/playwright-mcp#readme", "docs_url": "https://github.com/microsoft/playwright-mcp#readme",
"notes": "Maintained by the Playwright team at Microsoft. Add '--isolated' for a throwaway profile, or '--browser firefox|webkit|msedge' to change engine. A persistent browser profile is used by default so logins carry over between sessions." "notes": "Maintained by the Playwright team at Microsoft. Add '--isolated' for a throwaway profile, or '--browser firefox|webkit|msedge' to change engine. A persistent browser profile is used by default so logins carry over between sessions.",
"last_release": "2026-07-09"
}, },
{ {
"id": "chrome-devtools", "id": "chrome-devtools",
@@ -173,13 +180,14 @@
"command": "npx", "command": "npx",
"args": [ "args": [
"-y", "-y",
"chrome-devtools-mcp@latest" "chrome-devtools-mcp@1.5.0"
] ]
}, },
"placeholders": {}, "placeholders": {},
"env_required": {}, "env_required": {},
"docs_url": "https://github.com/ChromeDevTools/chrome-devtools-mcp#readme", "docs_url": "https://github.com/ChromeDevTools/chrome-devtools-mcp#readme",
"notes": "Maintained by the Google Chrome DevTools team; only officially supports Google Chrome / Chrome for Testing. Exposes the browser's content to the MCP client, so avoid sensitive sites while connected. Add '--slim --headless' for a minimal 3-tool basic-automation mode." "notes": "Maintained by the Google Chrome DevTools team; only officially supports Google Chrome / Chrome for Testing. Exposes the browser's content to the MCP client, so avoid sensitive sites while connected. Add '--slim --headless' for a minimal 3-tool basic-automation mode.",
"last_release": "2026-07-03"
}, },
{ {
"id": "postgres", "id": "postgres",
@@ -193,8 +201,8 @@
"config": { "config": {
"command": "uvx", "command": "uvx",
"args": [ "args": [
"postgres-mcp", "postgres-mcp@0.3.0",
"--access-mode=unrestricted" "--access-mode=restricted"
] ]
}, },
"placeholders": {}, "placeholders": {},
@@ -202,7 +210,8 @@
"DATABASE_URI": "" "DATABASE_URI": ""
}, },
"docs_url": "https://github.com/crystaldba/postgres-mcp#readme", "docs_url": "https://github.com/crystaldba/postgres-mcp#readme",
"notes": "The official reference Postgres server was archived by the MCP team; this community server (Crystal DBA) is the most capable/most-referenced replacement, adding index tuning and EXPLAIN-plan analysis. Use --access-mode=restricted for read-only/production use. Docker image also available (crystaldba/postgres-mcp)." "notes": "The official reference Postgres server was archived by the MCP team; this community server (Crystal DBA) is the most capable/most-referenced replacement, adding index tuning and EXPLAIN-plan analysis. Use --access-mode=restricted for read-only/production use. Docker image also available (crystaldba/postgres-mcp). Catalog ships --access-mode=restricted (read-only); switch to unrestricted yourself if you want writes.",
"last_release": "2025-05-16"
}, },
{ {
"id": "n8n", "id": "n8n",
@@ -216,7 +225,7 @@
"config": { "config": {
"command": "npx", "command": "npx",
"args": [ "args": [
"n8n-mcp" "n8n-mcp@2.63.2"
] ]
}, },
"placeholders": {}, "placeholders": {},
@@ -226,7 +235,8 @@
"N8N_API_KEY": "" "N8N_API_KEY": ""
}, },
"docs_url": "https://github.com/czlonkowski/n8n-mcp", "docs_url": "https://github.com/czlonkowski/n8n-mcp",
"notes": "Set MCP_MODE=stdio (required for Claude Desktop, prevents debug logs from breaking the protocol). N8N_API_URL/N8N_API_KEY are optional \u2014 without them you still get full node documentation, validation, and template search; with them you get live workflow create/update/execute against your own n8n instance. A hosted free-tier alternative exists at dashboard.n8n-mcp.com." "notes": "Set MCP_MODE=stdio (required for Claude Desktop, prevents debug logs from breaking the protocol). N8N_API_URL/N8N_API_KEY are optional without them you still get full node documentation, validation, and template search; with them you get live workflow create/update/execute against your own n8n instance. A hosted free-tier alternative exists at dashboard.n8n-mcp.com.",
"last_release": "2026-07-09"
}, },
{ {
"id": "notion", "id": "notion",
@@ -241,7 +251,7 @@
"command": "npx", "command": "npx",
"args": [ "args": [
"-y", "-y",
"@notionhq/notion-mcp-server" "@notionhq/notion-mcp-server@2.4.1"
] ]
}, },
"placeholders": {}, "placeholders": {},
@@ -249,7 +259,8 @@
"NOTION_TOKEN": "" "NOTION_TOKEN": ""
}, },
"docs_url": "https://developers.notion.com/docs/mcp", "docs_url": "https://developers.notion.com/docs/mcp",
"notes": "Notion is prioritizing its hosted remote MCP (OAuth, https://mcp.notion.com/mcp) and may eventually sunset this local package, but the stdio server still works today and is the simplest way to get a static config with an internal-integration token." "notes": "Notion is prioritizing its hosted remote MCP (OAuth, https://mcp.notion.com/mcp) and may eventually sunset this local package, but the stdio server still works today and is the simplest way to get a static config with an internal-integration token.",
"last_release": "2026-06-22"
}, },
{ {
"id": "obsidian", "id": "obsidian",
@@ -263,7 +274,7 @@
"config": { "config": {
"command": "uvx", "command": "uvx",
"args": [ "args": [
"mcp-obsidian" "mcp-obsidian@0.2.2"
] ]
}, },
"placeholders": {}, "placeholders": {},
@@ -273,7 +284,8 @@
"OBSIDIAN_PORT": "" "OBSIDIAN_PORT": ""
}, },
"docs_url": "https://github.com/MarkusPfundstein/mcp-obsidian", "docs_url": "https://github.com/MarkusPfundstein/mcp-obsidian",
"notes": "Requires the Obsidian Local REST API community plugin installed and enabled in Obsidian; copy the API key from the plugin settings. OBSIDIAN_HOST defaults to 127.0.0.1 and OBSIDIAN_PORT to 27124 if omitted." "notes": "Requires the Obsidian Local REST API community plugin installed and enabled in Obsidian; copy the API key from the plugin settings. OBSIDIAN_HOST defaults to 127.0.0.1 and OBSIDIAN_PORT to 27124 if omitted.",
"last_release": "2025-04-01"
}, },
{ {
"id": "brave-search", "id": "brave-search",
@@ -288,7 +300,7 @@
"command": "npx", "command": "npx",
"args": [ "args": [
"-y", "-y",
"@brave/brave-search-mcp-server", "@brave/brave-search-mcp-server@2.0.85",
"--transport", "--transport",
"stdio" "stdio"
] ]
@@ -298,7 +310,8 @@
"BRAVE_API_KEY": "" "BRAVE_API_KEY": ""
}, },
"docs_url": "https://github.com/brave/brave-search-mcp-server", "docs_url": "https://github.com/brave/brave-search-mcp-server",
"notes": "Official Brave server; replaced the old archived modelcontextprotocol/servers brave-search entry (now in modelcontextprotocol/servers-archived). Get an API key from the Brave Search API dashboard." "notes": "Official Brave server; replaced the old archived modelcontextprotocol/servers brave-search entry (now in modelcontextprotocol/servers-archived). Get an API key from the Brave Search API dashboard.",
"last_release": "2026-06-15"
}, },
{ {
"id": "tavily", "id": "tavily",
@@ -312,8 +325,7 @@
"config": { "config": {
"command": "npx", "command": "npx",
"args": [ "args": [
"-y", "tavily-mcp@0.2.21"
"tavily-mcp@latest"
] ]
}, },
"placeholders": {}, "placeholders": {},
@@ -321,30 +333,8 @@
"TAVILY_API_KEY": "" "TAVILY_API_KEY": ""
}, },
"docs_url": "https://github.com/tavily-ai/tavily-mcp", "docs_url": "https://github.com/tavily-ai/tavily-mcp",
"notes": "Tavily also offers a hosted remote MCP endpoint (mcp.tavily.com) with OAuth as an alternative to running the local npx server." "notes": "Tavily also offers a hosted remote MCP endpoint (mcp.tavily.com) with OAuth as an alternative to running the local npx server.",
}, "last_release": "2026-07-10"
{
"id": "firecrawl",
"display": "Firecrawl",
"description": "Turn any website into clean, LLM-ready data with scraping, crawling, and search tools.",
"category": "search",
"homepage": "https://github.com/firecrawl/firecrawl-mcp-server",
"stars": 6924,
"official": true,
"setup": "basic",
"config": {
"command": "npx",
"args": [
"-y",
"firecrawl-mcp"
]
},
"placeholders": {},
"env_required": {
"FIRECRAWL_API_KEY": ""
},
"docs_url": "https://github.com/firecrawl/firecrawl-mcp-server",
"notes": "Repo moved from mendableai/firecrawl-mcp-server to firecrawl/firecrawl-mcp-server. A keyless free tier works for scrape/search with rate limits; set FIRECRAWL_API_URL instead of the key to point at a self-hosted Firecrawl instance."
}, },
{ {
"id": "home-assistant", "id": "home-assistant",
@@ -365,7 +355,7 @@
"HA_URL", "HA_URL",
"-e", "-e",
"HA_TOKEN", "HA_TOKEN",
"voska/hass-mcp" "voska/hass-mcp:0.5.0"
] ]
}, },
"placeholders": {}, "placeholders": {},
@@ -379,7 +369,7 @@
{ {
"id": "kubernetes", "id": "kubernetes",
"display": "Kubernetes", "display": "Kubernetes",
"description": "Lets Claude inspect and manage Kubernetes/OpenShift resources \u2014 pods, deployments, logs, Helm releases \u2014 using your local kubeconfig.", "description": "Lets Claude inspect and manage Kubernetes/OpenShift resources pods, deployments, logs, Helm releases using your local kubeconfig.",
"category": "infra", "category": "infra",
"homepage": "https://github.com/containers/kubernetes-mcp-server", "homepage": "https://github.com/containers/kubernetes-mcp-server",
"stars": 1626, "stars": 1626,
@@ -389,13 +379,14 @@
"command": "npx", "command": "npx",
"args": [ "args": [
"-y", "-y",
"kubernetes-mcp-server@latest" "kubernetes-mcp-server@0.0.64"
] ]
}, },
"placeholders": {}, "placeholders": {},
"env_required": {}, "env_required": {},
"docs_url": "https://github.com/containers/kubernetes-mcp-server#readme", "docs_url": "https://github.com/containers/kubernetes-mcp-server#readme",
"notes": "Not an official Kubernetes SIG project, but a Go-native (no kubectl dependency) implementation maintained under the 'containers' GitHub org (Podman/Red Hat-adjacent) that's widely regarded as the most capable K8s MCP server, supporting Kubernetes and OpenShift. Uses your existing ~/.kube/config automatically; add --read-only to prevent writes." "notes": "Not an official Kubernetes SIG project, but a Go-native (no kubectl dependency) implementation maintained under the 'containers' GitHub org (Podman/Red Hat-adjacent) that's widely regarded as the most capable K8s MCP server, supporting Kubernetes and OpenShift. Uses your existing ~/.kube/config automatically; add --read-only to prevent writes.",
"last_release": "2026-07-10"
}, },
{ {
"id": "aws-api-mcp-server", "id": "aws-api-mcp-server",
@@ -409,13 +400,14 @@
"config": { "config": {
"command": "uvx", "command": "uvx",
"args": [ "args": [
"awslabs.aws-api-mcp-server@latest" "awslabs.aws-api-mcp-server@1.3.46"
] ]
}, },
"placeholders": {}, "placeholders": {},
"env_required": {}, "env_required": {},
"docs_url": "https://awslabs.github.io/mcp/servers/aws-api-mcp-server", "docs_url": "https://awslabs.github.io/mcp/servers/aws-api-mcp-server",
"notes": "AWS credentials are NOT set in this MCP config \u2014 configure them beforehand via `aws configure` (or set AWS_API_MCP_PROFILE_NAME to pick a named profile) so boto3's standard credential chain can find them. Optional env vars: AWS_REGION (default us-east-1), READ_OPERATIONS_ONLY=true to block all mutating AWS calls. AWS notes this server is being superseded by a newer unified AWS MCP server referenced in their agent-toolkit docs." "notes": "AWS credentials are NOT set in this MCP config configure them beforehand via `aws configure` (or set AWS_API_MCP_PROFILE_NAME to pick a named profile) so boto3's standard credential chain can find them. Optional env vars: AWS_REGION (default us-east-1), READ_OPERATIONS_ONLY=true to block all mutating AWS calls. AWS notes this server is being superseded by a newer unified AWS MCP server referenced in their agent-toolkit docs.",
"last_release": "2026-06-25"
}, },
{ {
"id": "grafana", "id": "grafana",
@@ -429,7 +421,7 @@
"config": { "config": {
"command": "uvx", "command": "uvx",
"args": [ "args": [
"mcp-grafana" "mcp-grafana@0.17.1"
], ],
"env": { "env": {
"GRAFANA_URL": "<GRAFANA_URL>" "GRAFANA_URL": "<GRAFANA_URL>"
@@ -442,7 +434,8 @@
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "" "GRAFANA_SERVICE_ACCOUNT_TOKEN": ""
}, },
"docs_url": "https://grafana.com/docs/grafana/latest/developer-resources/mcp/", "docs_url": "https://grafana.com/docs/grafana/latest/developer-resources/mcp/",
"notes": "Requires Grafana 9.0+ for full functionality \u2014 datasource-related tools may not work correctly on older versions." "notes": "Requires Grafana 9.0+ for full functionality datasource-related tools may not work correctly on older versions.",
"last_release": "2026-07-07"
}, },
{ {
"id": "slack", "id": "slack",
@@ -457,6 +450,5 @@
"docs_url": "https://docs.slack.dev/changelog/2026/02/17/slack-mcp/", "docs_url": "https://docs.slack.dev/changelog/2026/02/17/slack-mcp/",
"notes": "Slack's own MCP server went GA Feb 17, 2026 (streamable HTTP at https://mcp.slack.com/mcp, OAuth). No stdio one-liner is published because it's a hosted, permissioned connector. A well-known community alternative, korotovsky/slack-mcp-server (~1.6k GitHub stars, MIT, not an official Slack product), supports stdio/SSE/HTTP with bot or browser-session tokens and no app-install requirement if a stdio option is preferred." "notes": "Slack's own MCP server went GA Feb 17, 2026 (streamable HTTP at https://mcp.slack.com/mcp, OAuth). No stdio one-liner is published because it's a hosted, permissioned connector. A well-known community alternative, korotovsky/slack-mcp-server (~1.6k GitHub stars, MIT, not an official Slack product), supports stdio/SSE/HTTP with bot or browser-session tokens and no app-install requirement if a stdio option is preferred."
} }
], ]
"signed_at": "2026-07-12T00:00:00Z"
} }