From f5ae1395bcf4717ca09180260fed5fc27f32d3f6 Mon Sep 17 00:00:00 2001 From: calmini Date: Wed, 23 Apr 2025 15:33:43 +0800 Subject: [PATCH] chore: unified argument definition in server configure & register some more servers --- mcp-registry/servers/actors-mcp-server.json | 4 +- mcp-registry/servers/agentql-mcp.json | 14 +- mcp-registry/servers/agentrpc.json | 4 +- mcp-registry/servers/alicloud-hologres.json | 12 +- .../servers/apimatic-validator-mcp.json | 4 +- mcp-registry/servers/bicscan-mcp.json | 6 +- mcp-registry/servers/chatsum.json | 4 +- mcp-registry/servers/chronulus-mcp.json | 8 +- mcp-registry/servers/dart-mcp-server.json | 6 +- .../servers/desktop-commander-mcp.json | 433 ++++++++++++++++++ mcp-registry/servers/devhub-cms-mcp.json | 8 +- mcp-registry/servers/duckduckgo-mcp.json | 116 +++++ mcp-registry/servers/edubase.json | 14 +- mcp-registry/servers/ergo-blockchain-mcp.json | 12 +- mcp-registry/servers/exa-mcp-server.json | 4 +- mcp-registry/servers/fewsats-mcp.json | 12 +- mcp-registry/servers/fibery-mcp-server.json | 10 +- mcp-registry/servers/financial-dataset.json | 4 +- mcp-registry/servers/glean.json | 6 +- mcp-registry/servers/goodnews.json | 6 +- .../servers/google-custom-search.json | 6 +- mcp-registry/servers/graphlit-mcp-server.json | 8 +- .../servers/greptimedb-mcp-server.json | 12 +- mcp-registry/servers/home-assistant.json | 6 +- mcp-registry/servers/inbox-zero.json | 4 +- mcp-registry/servers/influxdb.json | 12 +- mcp-registry/servers/inkeep.json | 12 +- mcp-registry/servers/integration-app.json | 6 +- mcp-registry/servers/intercom.json | 4 +- mcp-registry/servers/kagimcp.json | 6 +- mcp-registry/servers/keboola-mcp-server.json | 10 +- mcp-registry/servers/llamacloud.json | 6 +- mcp-registry/servers/magic-mcp.json | 6 +- mcp-registry/servers/mailgun-mcp-server.json | 4 +- mcp-registry/servers/make-mcp-server.json | 8 +- mcp-registry/servers/materials-project.json | 4 +- mcp-registry/servers/mcp-aiven.json | 6 +- .../servers/mcp-audiense-insights.json | 8 +- mcp-registry/servers/mcp-clickhouse.json | 29 +- mcp-registry/servers/mcp-codex-keeper.json | 84 ++++ mcp-registry/servers/mcp-server-adfin.json | 6 +- mcp-registry/servers/mcp-server-box.json | 6 +- .../servers/mcp-server-esignatures.json | 4 +- mcp-registry/servers/mcp-server-langfuse.json | 8 +- .../servers/mcp-server-motherduck.json | 6 +- mcp-registry/servers/mcp-server-qdrant.json | 10 +- mcp-registry/servers/mcp-server-raygun.json | 6 +- .../servers/mcp-server-starrocks.json | 10 +- mcp-registry/servers/mcp-tinybird.json | 11 +- mcp-registry/servers/mcp-zenml.json | 8 +- mcp-registry/servers/needle-mcp.json | 4 +- mcp-registry/servers/octagon-mcp-server.json | 4 +- mcp-registry/servers/onchain-mcp.json | 4 +- mcp-registry/servers/perplexity.json | 6 +- mcp-registry/servers/productboard.json | 4 +- mcp-registry/servers/riza-mcp.json | 4 +- mcp-registry/servers/screenshotone.json | 4 +- mcp-registry/servers/search1api-mcp.json | 4 +- mcp-registry/servers/ssh-exec.json | 18 +- mcp-registry/servers/supabase-mcp.json | 128 ++++++ mcp-registry/servers/tavily-mcp.json | 4 +- mcp-registry/servers/tavily-search.json | 6 +- mcp-registry/servers/thirdweb.json | 4 +- mcp-registry/servers/unity3d-game-engine.json | 4 +- mcp-registry/servers/uns-mcp.json | 4 +- mcp-registry/servers/vscode-mcp.json | 303 ++++++++++++ mcp-registry/servers/wcgw.json | 134 ++++++ mcp-registry/servers/whale-tracker-mcp.json | 4 +- mcp-registry/servers/wxflows.json | 6 +- mcp-registry/servers/xero-mcp-server.json | 6 +- scripts/get_manifest.py | 9 +- scripts/utils.py | 97 ++++ tests/test_arguments.py | 91 ++++ 73 files changed, 1606 insertions(+), 249 deletions(-) create mode 100644 mcp-registry/servers/desktop-commander-mcp.json create mode 100644 mcp-registry/servers/duckduckgo-mcp.json create mode 100644 mcp-registry/servers/mcp-codex-keeper.json create mode 100644 mcp-registry/servers/supabase-mcp.json create mode 100644 mcp-registry/servers/vscode-mcp.json create mode 100644 mcp-registry/servers/wcgw.json create mode 100644 tests/test_arguments.py diff --git a/mcp-registry/servers/actors-mcp-server.json b/mcp-registry/servers/actors-mcp-server.json index dcc40dd4..73d687b4 100644 --- a/mcp-registry/servers/actors-mcp-server.json +++ b/mcp-registry/servers/actors-mcp-server.json @@ -32,7 +32,7 @@ "@apify/actors-mcp-server" ], "env": { - "APIFY_TOKEN": "your-apify-token" + "APIFY_TOKEN": "${APIFY_TOKEN}" }, "description": "Install and run using NPM" } @@ -60,4 +60,4 @@ "Web Services" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/agentql-mcp.json b/mcp-registry/servers/agentql-mcp.json index e2e7d6b3..6e41eccc 100644 --- a/mcp-registry/servers/agentql-mcp.json +++ b/mcp-registry/servers/agentql-mcp.json @@ -30,20 +30,10 @@ ], "package": "agentql-mcp", "env": { - "AGENTQL_API_KEY": "YOUR_API_KEY" + "AGENTQL_API_KEY": "${AGENTQL_API_KEY}" }, "description": "Install via npm and run with npx", "recommended": true - }, - "development": { - "type": "custom", - "command": "/path/to/agentql-mcp/dist/index.js", - "args": [], - "env": { - "AGENTQL_API_KEY": "YOUR_API_KEY" - }, - "description": "Run development version from local build", - "recommended": false } }, "examples": [ @@ -84,4 +74,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/agentrpc.json b/mcp-registry/servers/agentrpc.json index f0782e7e..61143810 100644 --- a/mcp-registry/servers/agentrpc.json +++ b/mcp-registry/servers/agentrpc.json @@ -34,7 +34,7 @@ ], "package": "agentrpc", "env": { - "AGENTRPC_API_SECRET": "" + "AGENTRPC_API_SECRET": "${AGENTRPC_API_SECRET}" }, "description": "Run the MCP server using npm", "recommended": true @@ -58,4 +58,4 @@ "Dev Tools" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/alicloud-hologres.json b/mcp-registry/servers/alicloud-hologres.json index be8b2878..be720753 100644 --- a/mcp-registry/servers/alicloud-hologres.json +++ b/mcp-registry/servers/alicloud-hologres.json @@ -49,11 +49,11 @@ "hologres-mcp-server" ], "env": { - "HOLOGRES_HOST": "host", - "HOLOGRES_PORT": "port", - "HOLOGRES_USER": "access_id", - "HOLOGRES_PASSWORD": "access_key", - "HOLOGRES_DATABASE": "database" + "HOLOGRES_HOST": "${HOLOGRES_HOST}", + "HOLOGRES_PORT": "${HOLOGRES_PORT}", + "HOLOGRES_USER": "${HOLOGRES_USER}", + "HOLOGRES_PASSWORD": "${HOLOGRES_PASSWORD}", + "HOLOGRES_DATABASE": "${HOLOGRES_DATABASE}" }, "description": "Run using local file" } @@ -168,4 +168,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/apimatic-validator-mcp.json b/mcp-registry/servers/apimatic-validator-mcp.json index f78e4118..22284033 100644 --- a/mcp-registry/servers/apimatic-validator-mcp.json +++ b/mcp-registry/servers/apimatic-validator-mcp.json @@ -30,7 +30,7 @@ ], "package": "[NOT GIVEN]", "env": { - "APIMATIC_API_KEY": "" + "APIMATIC_API_KEY": "${APIMATIC_API_KEY}" }, "description": "Run the APIMatic Validator MCP Server using Node.js", "recommended": true @@ -49,4 +49,4 @@ "Dev Tools" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/bicscan-mcp.json b/mcp-registry/servers/bicscan-mcp.json index 641b90a3..2a2111d5 100644 --- a/mcp-registry/servers/bicscan-mcp.json +++ b/mcp-registry/servers/bicscan-mcp.json @@ -32,7 +32,7 @@ "bicscan-mcp" ], "env": { - "BICSCAN_API_KEY": "{BICSCAN_API_KEY}" + "BICSCAN_API_KEY": "${BICSCAN_API_KEY}" }, "description": "Run directly using uvx" }, @@ -44,7 +44,7 @@ "--rm", "--interactive", "--env", - "BICSCAN_API_KEY={BICSCAN_API_KEY}", + "BICSCAN_API_KEY=${BICSCAN_API_KEY}", "bicscan-mcp" ], "description": "Run using Docker" @@ -104,4 +104,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/chatsum.json b/mcp-registry/servers/chatsum.json index 74036231..7853d962 100644 --- a/mcp-registry/servers/chatsum.json +++ b/mcp-registry/servers/chatsum.json @@ -35,7 +35,7 @@ "https://github.com/mcpso/mcp-server-chatsum" ], "env": { - "CHAT_DB_PATH": "path-to/mcp-server-chatsum/chatbot/data/chat.db" + "CHAT_DB_PATH": "${CHAT_DB_PATH}" } } }, @@ -79,4 +79,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/chronulus-mcp.json b/mcp-registry/servers/chronulus-mcp.json index 70e843f5..93472267 100644 --- a/mcp-registry/servers/chronulus-mcp.json +++ b/mcp-registry/servers/chronulus-mcp.json @@ -29,7 +29,7 @@ "chronulus-mcp" ], "env": { - "CHRONULUS_API_KEY": "" + "CHRONULUS_API_KEY": "${CHRONULUS_API_KEY}" }, "description": "Install and run using uvx" }, @@ -42,7 +42,7 @@ ], "package": "chronulus-mcp", "env": { - "CHRONULUS_API_KEY": "" + "CHRONULUS_API_KEY": "${CHRONULUS_API_KEY}" }, "description": "Install using pip from PyPI" }, @@ -58,7 +58,7 @@ "chronulus-mcp" ], "env": { - "CHRONULUS_API_KEY": "" + "CHRONULUS_API_KEY": "${CHRONULUS_API_KEY}" }, "description": "Run using Docker" } @@ -587,4 +587,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/dart-mcp-server.json b/mcp-registry/servers/dart-mcp-server.json index 40ae2215..52094028 100644 --- a/mcp-registry/servers/dart-mcp-server.json +++ b/mcp-registry/servers/dart-mcp-server.json @@ -32,7 +32,7 @@ ], "package": "dart-mcp-server", "env": { - "DART_TOKEN": "dsa_..." + "DART_TOKEN": "${DART_TOKEN}" }, "description": "Run using npx", "recommended": true @@ -49,7 +49,7 @@ "mcp/dart" ], "env": { - "DART_TOKEN": "dsa_..." + "DART_TOKEN": "${DART_TOKEN}" }, "description": "Run using Docker" } @@ -565,4 +565,4 @@ ], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/desktop-commander-mcp.json b/mcp-registry/servers/desktop-commander-mcp.json new file mode 100644 index 00000000..a56eb1b9 --- /dev/null +++ b/mcp-registry/servers/desktop-commander-mcp.json @@ -0,0 +1,433 @@ +{ + "display_name": "Desktop Commander MCP", + "license": "MIT", + "tags": [ + "terminal", + "file management", + "code search", + "AI assistant", + "command execution", + "filesystem", + "process management", + "text editing", + "ripgrep", + "Claude integration" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@wonderwhy-er/desktop-commander" + ], + "description": "Add to claude_desktop_config by hand" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Can you help me search for all files containing the word 'config' in my project directory?" + }, + { + "title": "", + "description": "", + "prompt": "Please create a new JavaScript file called app.js with a basic Express server setup" + }, + { + "title": "", + "description": "", + "prompt": "Run 'npm install express' and show me the output" + }, + { + "title": "", + "description": "", + "prompt": "Search through my codebase and find all instances where we're using async/await" + }, + { + "title": "", + "description": "", + "prompt": "Read the README.md file in my current project and summarize it" + }, + { + "title": "", + "description": "", + "prompt": "Help me edit the user authentication function in auth.js to add password validation" + }, + { + "title": "", + "description": "", + "prompt": "List all running processes on my system" + }, + { + "title": "", + "description": "", + "prompt": "Create a directory structure for a new React project" + }, + { + "title": "", + "description": "", + "prompt": "Find and replace all instances of 'oldFunction' with 'newFunction' in my JavaScript files" + }, + { + "title": "", + "description": "", + "prompt": "Read the package.json file and tell me what dependencies are installed" + } + ], + "name": "desktop-commander-mcp", + "repository": { + "type": "git", + "url": "https://github.com/wonderwhy-er/DesktopCommanderMCP" + }, + "homepage": "https://github.com/wonderwhy-er/DesktopCommanderMCP", + "author": { + "name": "wonderwhy-er" + }, + "description": "Short version. Four key things. Terminal commands, diff based file editing, ripgrep based text search in folders, ability to read files from urls", + "categories": [ + "System Tools" + ], + "tools": [ + { + "name": "get_config", + "description": "Get the complete server configuration as JSON. Config includes fields for: blockedCommands (array of blocked shell commands), defaultShell (shell to use for commands), allowedDirectories (paths the server can access).", + "inputSchema": { + "type": "object", + "properties": {}, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "set_config_value", + "description": "Set a specific configuration value by key. WARNING: Should be used in a separate chat from file operations and command execution to prevent security issues. Config keys include: blockedCommands (array), defaultShell (string), allowedDirectories (array of paths). IMPORTANT: Setting allowedDirectories to an empty array ([]) allows full access to the entire file system, regardless of the operating system.", + "inputSchema": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": {} + }, + "required": [ + "key" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "execute_command", + "description": "Execute a terminal command with timeout. Command will continue running in background if it doesn't complete within timeout.", + "inputSchema": { + "type": "object", + "properties": { + "command": { + "type": "string" + }, + "timeout_ms": { + "type": "number" + }, + "shell": { + "type": "string" + } + }, + "required": [ + "command" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "read_output", + "description": "Read new output from a running terminal session.", + "inputSchema": { + "type": "object", + "properties": { + "pid": { + "type": "number" + } + }, + "required": [ + "pid" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "force_terminate", + "description": "Force terminate a running terminal session.", + "inputSchema": { + "type": "object", + "properties": { + "pid": { + "type": "number" + } + }, + "required": [ + "pid" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_sessions", + "description": "List all active terminal sessions.", + "inputSchema": { + "type": "object", + "properties": {}, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_processes", + "description": "List all running processes. Returns process information including PID, command name, CPU usage, and memory usage.", + "inputSchema": { + "type": "object", + "properties": {}, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "kill_process", + "description": "Terminate a running process by PID. Use with caution as this will forcefully terminate the specified process.", + "inputSchema": { + "type": "object", + "properties": { + "pid": { + "type": "number" + } + }, + "required": [ + "pid" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "read_file", + "description": "Read the complete contents of a file from the file system or a URL. When reading from the file system, only works within allowed directories. Can fetch content from URLs when isUrl parameter is set to true. Handles text files normally and image files are returned as viewable images. Recognized image types: PNG, JPEG, GIF, WebP.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "isUrl": { + "type": "boolean", + "default": false + } + }, + "required": [ + "path" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "read_multiple_files", + "description": "Read the contents of multiple files simultaneously. Each file's content is returned with its path as a reference. Handles text files normally and renders images as viewable content. Recognized image types: PNG, JPEG, GIF, WebP. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.", + "inputSchema": { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "paths" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "write_file", + "description": "Completely replace file contents. Best for large changes (>20% of file) or when edit_block fails. Use with caution as it will overwrite existing files. Only works within allowed directories.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "content": { + "type": "string" + } + }, + "required": [ + "path", + "content" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "create_directory", + "description": "Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. Only works within allowed directories.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": [ + "path" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_directory", + "description": "Get a detailed listing of all files and directories in a specified path. Results distinguish between files and directories with [FILE] and [DIR] prefixes. Only works within allowed directories.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": [ + "path" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "move_file", + "description": "Move or rename files and directories. Can move files between directories and rename them in a single operation. Both source and destination must be within allowed directories.", + "inputSchema": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "destination": { + "type": "string" + } + }, + "required": [ + "source", + "destination" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "search_files", + "description": "Finds files by name using a case-insensitive substring matching. Searches through all subdirectories from the starting path. Has a default timeout of 30 seconds which can be customized using the timeoutMs parameter. Only searches within allowed directories.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "pattern": { + "type": "string" + }, + "timeoutMs": { + "type": "number" + } + }, + "required": [ + "path", + "pattern" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "search_code", + "description": "Search for text/code patterns within file contents using ripgrep. Fast and powerful search similar to VS Code search functionality. Supports regular expressions, file pattern filtering, and context lines. Has a default timeout of 30 seconds which can be customized. Only searches within allowed directories.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "pattern": { + "type": "string" + }, + "filePattern": { + "type": "string" + }, + "ignoreCase": { + "type": "boolean" + }, + "maxResults": { + "type": "number" + }, + "includeHidden": { + "type": "boolean" + }, + "contextLines": { + "type": "number" + }, + "timeoutMs": { + "type": "number" + } + }, + "required": [ + "path", + "pattern" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "get_file_info", + "description": "Retrieve detailed metadata about a file or directory including size, creation time, last modified time, permissions, and type. Only works within allowed directories.", + "inputSchema": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": [ + "path" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "edit_block", + "description": "Apply surgical text replacements to files. Best for small changes (<20% of file size). Call repeatedly to change multiple blocks. Will verify changes after application. Format:\nfilepath\n<<<<<<< SEARCH\ncontent to find\n=======\nnew content\n>>>>>>> REPLACE", + "inputSchema": { + "type": "object", + "properties": { + "blockContent": { + "type": "string" + } + }, + "required": [ + "blockContent" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + } + ], + "prompts": [], + "resources": [], + "is_official": false +} diff --git a/mcp-registry/servers/devhub-cms-mcp.json b/mcp-registry/servers/devhub-cms-mcp.json index 5947ada1..d85dceab 100644 --- a/mcp-registry/servers/devhub-cms-mcp.json +++ b/mcp-registry/servers/devhub-cms-mcp.json @@ -39,9 +39,9 @@ "devhub-cms-mcp" ], "env": { - "DEVHUB_API_KEY": "YOUR_KEY_HERE", - "DEVHUB_API_SECRET": "YOUR_SECRET_HERE", - "DEVHUB_BASE_URL": "https://yourbrand.cloudfrontend.net" + "DEVHUB_API_KEY": "${DEVHUB_API_KEY}", + "DEVHUB_API_SECRET": "${DEVHUB_API_SECRET}", + "DEVHUB_BASE_URL": "${DEVHUB_BASE_URL}" }, "recommended": true } @@ -281,4 +281,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/duckduckgo-mcp.json b/mcp-registry/servers/duckduckgo-mcp.json new file mode 100644 index 00000000..26dff4c8 --- /dev/null +++ b/mcp-registry/servers/duckduckgo-mcp.json @@ -0,0 +1,116 @@ +{ + "display_name": "DuckDuckGo Search MCP Server", + "license": "MIT License", + "tags": [ + "web search", + "duckduckgo", + "content fetching", + "rate limiting", + "mcp", + "text extraction" + ], + "installations": { + "uvx": { + "type": "uvx", + "command": "uvx", + "args": [ + "duckduckgo-mcp-server" + ], + "description": "Run with Claude Desktop" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Search for the latest news about artificial intelligence" + }, + { + "title": "", + "description": "", + "prompt": "Find information about climate change solutions" + }, + { + "title": "", + "description": "", + "prompt": "Search for recipes for vegetarian pasta dishes" + }, + { + "title": "", + "description": "", + "prompt": "Fetch the content from https://example.com" + }, + { + "title": "", + "description": "", + "prompt": "Search for Python programming tutorials and return 5 results" + }, + { + "title": "", + "description": "", + "prompt": "Find recent research papers on quantum computing" + }, + { + "title": "", + "description": "", + "prompt": "Get information about the history of the internet" + } + ], + "name": "duckduckgo-mcp", + "repository": { + "type": "git", + "url": "https://github.com/nickclyde/duckduckgo-mcp-server" + }, + "homepage": "https://github.com/nickclyde/duckduckgo-mcp-server", + "author": { + "name": "nickclyde" + }, + "description": "A Model Context Protocol (MCP) server that provides web search capabilities through DuckDuckGo, with additional features for content fetching and parsing.", + "categories": [ + "Web Services" + ], + "tools": [ + { + "name": "search", + "description": "\n Search DuckDuckGo and return formatted results.\n\n Args:\n query: The search query string\n max_results: Maximum number of results to return (default: 10)\n ctx: MCP context for logging\n ", + "inputSchema": { + "properties": { + "query": { + "title": "Query", + "type": "string" + }, + "max_results": { + "default": 10, + "title": "Max Results", + "type": "integer" + } + }, + "required": [ + "query" + ], + "title": "searchArguments", + "type": "object" + } + }, + { + "name": "fetch_content", + "description": "\n Fetch and parse content from a webpage URL.\n\n Args:\n url: The webpage URL to fetch content from\n ctx: MCP context for logging\n ", + "inputSchema": { + "properties": { + "url": { + "title": "Url", + "type": "string" + } + }, + "required": [ + "url" + ], + "title": "fetch_contentArguments", + "type": "object" + } + } + ], + "prompts": [], + "resources": [], + "is_official": false +} diff --git a/mcp-registry/servers/edubase.json b/mcp-registry/servers/edubase.json index 939d8829..5c7e7894 100644 --- a/mcp-registry/servers/edubase.json +++ b/mcp-registry/servers/edubase.json @@ -50,9 +50,9 @@ "edubase/mcp" ], "env": { - "EDUBASE_API_URL": "https://domain.edubase.net/api", - "EDUBASE_API_APP": "your_integration_app_id", - "EDUBASE_API_KEY": "your_integration_secret_key" + "EDUBASE_API_URL": "${EDUBASE_API_URL}", + "EDUBASE_API_APP": "${EDUBASE_API_APP}", + "EDUBASE_API_KEY": "${EDUBASE_API_KEY}" }, "description": "Run using Docker", "recommended": false @@ -64,9 +64,9 @@ "/path/to/dist/index.js" ], "env": { - "EDUBASE_API_URL": "https://domain.edubase.net/api", - "EDUBASE_API_APP": "your_integration_app_id", - "EDUBASE_API_KEY": "your_integration_secret_key" + "EDUBASE_API_URL": "${EDUBASE_API_URL}", + "EDUBASE_API_APP": "${EDUBASE_API_APP}", + "EDUBASE_API_KEY": "${EDUBASE_API_KEY}" }, "description": "Run using Node.js", "recommended": true @@ -3160,4 +3160,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/ergo-blockchain-mcp.json b/mcp-registry/servers/ergo-blockchain-mcp.json index d2afb9c3..537da4ce 100644 --- a/mcp-registry/servers/ergo-blockchain-mcp.json +++ b/mcp-registry/servers/ergo-blockchain-mcp.json @@ -40,11 +40,11 @@ "ergo-mcp" ], "env": { - "SERVER_HOST": "", - "SERVER_PORT": "", - "SERVER_WORKERS": "", - "ERGO_NODE_API": "", - "ERGO_NODE_API_KEY": "" + "SERVER_HOST": "${SERVER_HOST}", + "SERVER_PORT": "${SERVER_PORT}", + "SERVER_WORKERS": "${SERVER_WORKERS}", + "ERGO_NODE_API": "${ERGO_NODE_API}", + "ERGO_NODE_API_KEY": "${ERGO_NODE_API_KEY}" } } }, @@ -75,4 +75,4 @@ "example": "your_api_key" } } -} \ No newline at end of file +} diff --git a/mcp-registry/servers/exa-mcp-server.json b/mcp-registry/servers/exa-mcp-server.json index e2184982..aff025a7 100644 --- a/mcp-registry/servers/exa-mcp-server.json +++ b/mcp-registry/servers/exa-mcp-server.json @@ -32,7 +32,7 @@ "exa-mcp-server" ], "env": { - "EXA_API_KEY": "your-api-key-here" + "EXA_API_KEY": "${EXA_API_KEY}" }, "description": "Run with NPX", "recommended": true @@ -90,4 +90,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/fewsats-mcp.json b/mcp-registry/servers/fewsats-mcp.json index 2993c77e..71ad7715 100644 --- a/mcp-registry/servers/fewsats-mcp.json +++ b/mcp-registry/servers/fewsats-mcp.json @@ -31,16 +31,8 @@ "description": "Run using uv (recommended)", "recommended": true, "env": { - "FEWSATS_API_KEY": "YOUR_FEWSATS_API_KEY" + "FEWSATS_API_KEY": "${FEWSATS_API_KEY}" } - }, - "pip": { - "type": "python", - "command": "fewsats-mcp", - "args": [], - "package": "fewsats-mcp", - "description": "Install via pip and run as a script", - "recommended": false } }, "examples": [ @@ -133,4 +125,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/fibery-mcp-server.json b/mcp-registry/servers/fibery-mcp-server.json index e40bc380..2a0c7148 100644 --- a/mcp-registry/servers/fibery-mcp-server.json +++ b/mcp-registry/servers/fibery-mcp-server.json @@ -15,12 +15,12 @@ "llm" ], "arguments": { - "fibery-host": { + "FIBERY_HOST": { "description": "Your Fibery domain (e.g., your-domain.fibery.io)", "required": true, "example": "your-domain.fibery.io" }, - "fibery-api-token": { + "FIBERY_API_TOKEN": { "description": "Your Fibery API token", "required": true, "example": "your-api-token" @@ -35,9 +35,9 @@ "run", "fibery-mcp-server", "--fibery-host", - "your-domain.fibery.io", + "${FIBERY_HOST}", "--fibery-api-token", - "your-api-token" + "${FIBERY_API_TOKEN}" ], "package": "fibery-mcp-server", "recommended": true @@ -193,4 +193,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/financial-dataset.json b/mcp-registry/servers/financial-dataset.json index 7a720d7e..ff08e894 100644 --- a/mcp-registry/servers/financial-dataset.json +++ b/mcp-registry/servers/financial-dataset.json @@ -30,7 +30,7 @@ "server.py" ], "env": { - "FINANCIAL_DATASETS_API_KEY": "your-financial-datasets-api-key" + "FINANCIAL_DATASETS_API_KEY": "${FINANCIAL_DATASETS_API_KEY}" }, "description": "Run using uv package manager", "recommended": true @@ -59,4 +59,4 @@ "Finance" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/glean.json b/mcp-registry/servers/glean.json index 15946446..54b121d6 100644 --- a/mcp-registry/servers/glean.json +++ b/mcp-registry/servers/glean.json @@ -30,8 +30,8 @@ "https://github.com/longyi1207/glean-mcp-server" ], "env": { - "GLEAN_API_KEY": "YOUR_API_KEY_HERE", - "GLEAN_DOMAIN": "YOUR_DOMAIN_HERE" + "GLEAN_API_KEY": "${GLEAN_API_KEY}", + "GLEAN_DOMAIN": "${GLEAN_DOMAIN}" } } }, @@ -47,4 +47,4 @@ "example": "YOUR_DOMAIN_HERE" } } -} \ No newline at end of file +} diff --git a/mcp-registry/servers/goodnews.json b/mcp-registry/servers/goodnews.json index e975fb7e..002ebf19 100644 --- a/mcp-registry/servers/goodnews.json +++ b/mcp-registry/servers/goodnews.json @@ -37,8 +37,8 @@ "server.py" ], "env": { - "NEWS_API_KEY": "", - "COHERE_API_KEY": "" + "NEWS_API_KEY": "${NEWS_API_KEY}", + "COHERE_API_KEY": "${COHERE_API_KEY}" } } }, @@ -54,4 +54,4 @@ "example": "your_cohere_api_key_here" } } -} \ No newline at end of file +} diff --git a/mcp-registry/servers/google-custom-search.json b/mcp-registry/servers/google-custom-search.json index 01397b0c..dae5c699 100644 --- a/mcp-registry/servers/google-custom-search.json +++ b/mcp-registry/servers/google-custom-search.json @@ -28,8 +28,8 @@ "@adenot/mcp-google-search" ], "env": { - "GOOGLE_API_KEY": "your-api-key-here", - "GOOGLE_SEARCH_ENGINE_ID": "your-search-engine-id-here" + "GOOGLE_API_KEY": "${GOOGLE_API_KEY}", + "GOOGLE_SEARCH_ENGINE_ID": "${GOOGLE_SEARCH_ENGINE_ID}" } } }, @@ -81,4 +81,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/graphlit-mcp-server.json b/mcp-registry/servers/graphlit-mcp-server.json index a5b69438..1a51288a 100644 --- a/mcp-registry/servers/graphlit-mcp-server.json +++ b/mcp-registry/servers/graphlit-mcp-server.json @@ -44,9 +44,9 @@ "graphlit-mcp-server" ], "env": { - "GRAPHLIT_ORGANIZATION_ID": "${input:organization_id}", - "GRAPHLIT_ENVIRONMENT_ID": "${input:environment_id}", - "GRAPHLIT_JWT_SECRET": "${input:jwt_secret}" + "GRAPHLIT_ORGANIZATION_ID": "${GRAPHLIT_ORGANIZATION_ID}", + "GRAPHLIT_ENVIRONMENT_ID": "${GRAPHLIT_ENVIRONMENT_ID}", + "GRAPHLIT_JWT_SECRET": "${GRAPHLIT_JWT_SECRET}" }, "description": "Run using NPX", "recommended": true @@ -1426,4 +1426,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/greptimedb-mcp-server.json b/mcp-registry/servers/greptimedb-mcp-server.json index 0ad020bb..09311e20 100644 --- a/mcp-registry/servers/greptimedb-mcp-server.json +++ b/mcp-registry/servers/greptimedb-mcp-server.json @@ -50,11 +50,11 @@ "greptimedb-mcp-server" ], "env": { - "GREPTIMEDB_HOST": "localhost", - "GREPTIMEDB_PORT": "4002", - "GREPTIMEDB_USER": "root", - "GREPTIMEDB_PASSWORD": "", - "GREPTIMEDB_DATABASE": "public" + "GREPTIMEDB_HOST": "${GREPTIMEDB_HOST}", + "GREPTIMEDB_PORT": "${GREPTIMEDB_PORT}", + "GREPTIMEDB_USER": "${GREPTIMEDB_USER}", + "GREPTIMEDB_PASSWORD": "${GREPTIMEDB_PASSWORD}", + "GREPTIMEDB_DATABASE": "${GREPTIMEDB_DATABASE}" } } }, @@ -89,4 +89,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/home-assistant.json b/mcp-registry/servers/home-assistant.json index 0402eee7..3d485431 100644 --- a/mcp-registry/servers/home-assistant.json +++ b/mcp-registry/servers/home-assistant.json @@ -35,8 +35,8 @@ "voska/hass-mcp" ], "env": { - "HA_URL": "http://homeassistant.local:8123", - "HA_TOKEN": "YOUR_LONG_LIVED_TOKEN" + "HA_URL": "${HA_URL}", + "HA_TOKEN": "${HA_TOKEN}" } } }, @@ -359,4 +359,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/inbox-zero.json b/mcp-registry/servers/inbox-zero.json index 0006c3d3..10f5ca0b 100644 --- a/mcp-registry/servers/inbox-zero.json +++ b/mcp-registry/servers/inbox-zero.json @@ -30,7 +30,7 @@ "build/index.js" ], "env": { - "API_KEY": "" + "API_KEY": "${API_KEY}" }, "description": "Run the MCP server using Node.js" } @@ -48,4 +48,4 @@ "Messaging" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/influxdb.json b/mcp-registry/servers/influxdb.json index f08dd055..b1cabf60 100644 --- a/mcp-registry/servers/influxdb.json +++ b/mcp-registry/servers/influxdb.json @@ -25,14 +25,12 @@ "type": "npm", "command": "npx", "args": [ - "${INFLUXDB_TOKEN}", - "${INFLUXDB_URL}", - "${INFLUXDB_ORG}" + "influxdb-mcp-server" ], "env": { - "INFLUXDB_TOKEN": "your_token", - "INFLUXDB_URL": "http://localhost:8086", - "INFLUXDB_ORG": "your_org" + "INFLUXDB_TOKEN": "${INFLUXDB_TOKEN}", + "INFLUXDB_URL": "${INFLUXDB_URL}", + "INFLUXDB_ORG": "${INFLUXDB_ORG}" } } }, @@ -145,4 +143,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/inkeep.json b/mcp-registry/servers/inkeep.json index cbc5ee20..f9e337f0 100644 --- a/mcp-registry/servers/inkeep.json +++ b/mcp-registry/servers/inkeep.json @@ -53,11 +53,11 @@ "inkeep_mcp_server" ], "env": { - "INKEEP_API_BASE_URL": "https://api.inkeep.com/v1", - "INKEEP_API_KEY": "", - "INKEEP_API_MODEL": "inkeep-rag", - "INKEEP_MCP_TOOL_NAME": "search-product-content", - "INKEEP_MCP_TOOL_DESCRIPTION": "Retrieves product documentation about Inkeep. The query should be framed as a conversational question about Inkeep." + "INKEEP_API_BASE_URL": "${INKEEP_API_BASE_URL}", + "INKEEP_API_KEY": "${INKEEP_API_KEY}", + "INKEEP_API_MODEL": "${INKEEP_API_MODEL}", + "INKEEP_MCP_TOOL_NAME": "${INKEEP_MCP_TOOL_NAME}", + "INKEEP_MCP_TOOL_DESCRIPTION": "${INKEEP_MCP_TOOL_DESCRIPTION}" }, "description": "Run using uv Python project manager", "recommended": true @@ -76,4 +76,4 @@ "Knowledge Base" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/integration-app.json b/mcp-registry/servers/integration-app.json index c9556e7d..ed843a91 100644 --- a/mcp-registry/servers/integration-app.json +++ b/mcp-registry/servers/integration-app.json @@ -15,8 +15,8 @@ ], "package": "@integration-app/mcp-server", "env": { - "INTEGRATION_APP_TOKEN": "", - "INTEGRATION_KEY": "" + "INTEGRATION_APP_TOKEN": "${INTEGRATION_APP_TOKEN}", + "INTEGRATION_KEY": "${INTEGRATION_KEY}" } } }, @@ -47,4 +47,4 @@ "MCP Tools" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/intercom.json b/mcp-registry/servers/intercom.json index 13f3d9a2..0fc08847 100644 --- a/mcp-registry/servers/intercom.json +++ b/mcp-registry/servers/intercom.json @@ -35,7 +35,7 @@ "https://github.com/raoulbia-ai/mcp-server-for-intercom" ], "env": { - "INTERCOM_ACCESS_TOKEN": "your-intercom-access-token" + "INTERCOM_ACCESS_TOKEN": "${INTERCOM_ACCESS_TOKEN}" } } }, @@ -46,4 +46,4 @@ "example": "your_intercom_api_token" } } -} \ No newline at end of file +} diff --git a/mcp-registry/servers/kagimcp.json b/mcp-registry/servers/kagimcp.json index 5ca43e05..6a84050b 100644 --- a/mcp-registry/servers/kagimcp.json +++ b/mcp-registry/servers/kagimcp.json @@ -38,8 +38,8 @@ "kagimcp" ], "env": { - "KAGI_API_KEY": "YOUR_API_KEY_HERE", - "KAGI_SUMMARIZER_ENGINE": "YOUR_ENGINE_CHOICE_HERE" + "KAGI_API_KEY": "${KAGI_API_KEY}", + "KAGI_SUMMARIZER_ENGINE": "${KAGI_SUMMARIZER_ENGINE}" }, "recommended": true } @@ -128,4 +128,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/keboola-mcp-server.json b/mcp-registry/servers/keboola-mcp-server.json index f3bc1fc7..3a9239ce 100644 --- a/mcp-registry/servers/keboola-mcp-server.json +++ b/mcp-registry/servers/keboola-mcp-server.json @@ -16,7 +16,7 @@ "snowflake" ], "arguments": { - "api-url": { + "API_URL": { "description": "Keboola Connection API URL", "required": true, "example": "https://connection.YOUR_REGION.keboola.com" @@ -41,11 +41,11 @@ "git+https://github.com/keboola/keboola-mcp-server.git", "keboola-mcp", "--api-url", - "${api-url}" + "${API_URL}" ], "env": { - "KBC_STORAGE_TOKEN": "your-keboola-storage-token", - "KBC_WORKSPACE_USER": "your-workspace-user" + "KBC_STORAGE_TOKEN": "${KBC_STORAGE_TOKEN}", + "KBC_WORKSPACE_USER": "${KBC_WORKSPACE_USER}" }, "description": "Run the server using Python", "recommended": true @@ -178,4 +178,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/llamacloud.json b/mcp-registry/servers/llamacloud.json index 4d06a3ca..622048c3 100644 --- a/mcp-registry/servers/llamacloud.json +++ b/mcp-registry/servers/llamacloud.json @@ -35,8 +35,8 @@ "10k SEC documents from 2023 for Apple" ], "env": { - "LLAMA_CLOUD_PROJECT_NAME": "", - "LLAMA_CLOUD_API_KEY": "" + "LLAMA_CLOUD_PROJECT_NAME": "${LLAMA_CLOUD_PROJECT_NAME}", + "LLAMA_CLOUD_API_KEY": "${LLAMA_CLOUD_API_KEY}" } } }, @@ -86,4 +86,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/magic-mcp.json b/mcp-registry/servers/magic-mcp.json index 2ce47c9e..48b9cd50 100644 --- a/mcp-registry/servers/magic-mcp.json +++ b/mcp-registry/servers/magic-mcp.json @@ -30,11 +30,11 @@ "args": [ "-y", "@21st-dev/magic@latest", - "API_KEY=\"your-api-key\"" + "API_KEY=${API_KEY}" ], "package": "@21st-dev/magic", "env": { - "API_KEY": "your-api-key" + "API_KEY": "${API_KEY}" }, "description": "Install via npm package", "recommended": true @@ -177,4 +177,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mailgun-mcp-server.json b/mcp-registry/servers/mailgun-mcp-server.json index 3916e960..f62e3471 100644 --- a/mcp-registry/servers/mailgun-mcp-server.json +++ b/mcp-registry/servers/mailgun-mcp-server.json @@ -29,7 +29,7 @@ "path/to/mailgun-mcp-server/src/mailgun-mcp.js" ], "env": { - "MAILGUN_API_KEY": "YOUR-mailgun-api-key" + "MAILGUN_API_KEY": "${MAILGUN_API_KEY}" }, "description": "Run the server using Node.js", "recommended": true @@ -53,4 +53,4 @@ "Messaging" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/make-mcp-server.json b/mcp-registry/servers/make-mcp-server.json index 22dbcdcc..32165521 100644 --- a/mcp-registry/servers/make-mcp-server.json +++ b/mcp-registry/servers/make-mcp-server.json @@ -42,9 +42,9 @@ "@makehq/mcp-server" ], "env": { - "MAKE_API_KEY": "", - "MAKE_ZONE": "", - "MAKE_TEAM": "" + "MAKE_API_KEY": "${MAKE_API_KEY}", + "MAKE_ZONE": "${MAKE_ZONE}", + "MAKE_TEAM": "${MAKE_TEAM}" }, "description": "Install and run using npm", "recommended": true @@ -66,4 +66,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/materials-project.json b/mcp-registry/servers/materials-project.json index 19903dd0..ee3ef707 100644 --- a/mcp-registry/servers/materials-project.json +++ b/mcp-registry/servers/materials-project.json @@ -185,7 +185,7 @@ "mcp-materials-project" ], "env": { - "MP_API_KEY": "your_materials_project_api_key_here" + "MP_API_KEY": "${MP_API_KEY}" } } }, @@ -225,4 +225,4 @@ "MCP Tools" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-aiven.json b/mcp-registry/servers/mcp-aiven.json index 0754409d..ba6fd182 100644 --- a/mcp-registry/servers/mcp-aiven.json +++ b/mcp-registry/servers/mcp-aiven.json @@ -38,8 +38,8 @@ "mcp-aiven" ], "env": { - "AIVEN_BASE_URL": "https://api.aiven.io", - "AIVEN_TOKEN": "$AIVEN_TOKEN" + "AIVEN_BASE_URL": "${AIVEN_BASE_URL}", + "AIVEN_TOKEN": "${AIVEN_TOKEN}" }, "description": "Run using uv package manager", "recommended": true @@ -68,4 +68,4 @@ "Databases" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-audiense-insights.json b/mcp-registry/servers/mcp-audiense-insights.json index 58804a5e..0cfdca5d 100644 --- a/mcp-registry/servers/mcp-audiense-insights.json +++ b/mcp-registry/servers/mcp-audiense-insights.json @@ -41,9 +41,9 @@ "/ABSOLUTE/PATH/TO/YOUR/build/index.js" ], "env": { - "AUDIENSE_CLIENT_ID": "your_client_id_here", - "AUDIENSE_CLIENT_SECRET": "your_client_secret_here", - "TWITTER_BEARER_TOKEN": "your_token_here" + "AUDIENSE_CLIENT_ID": "${AUDIENSE_CLIENT_ID}", + "AUDIENSE_CLIENT_SECRET": "${AUDIENSE_CLIENT_SECRET}", + "TWITTER_BEARER_TOKEN": "${TWITTER_BEARER_TOKEN}" }, "description": "Manual installation by configuring Claude Desktop" } @@ -66,4 +66,4 @@ "Analytics" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-clickhouse.json b/mcp-registry/servers/mcp-clickhouse.json index 611a071c..5d5ad87a 100644 --- a/mcp-registry/servers/mcp-clickhouse.json +++ b/mcp-registry/servers/mcp-clickhouse.json @@ -75,28 +75,17 @@ ], "package": "mcp-clickhouse", "env": { - "CLICKHOUSE_HOST": "", - "CLICKHOUSE_PORT": "", - "CLICKHOUSE_USER": "", - "CLICKHOUSE_PASSWORD": "", - "CLICKHOUSE_SECURE": "true", - "CLICKHOUSE_VERIFY": "true", - "CLICKHOUSE_CONNECT_TIMEOUT": "30", - "CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30" + "CLICKHOUSE_HOST": "${CLICKHOUSE_HOST}", + "CLICKHOUSE_PORT": "${CLICKHOUSE_PORT}", + "CLICKHOUSE_USER": "${CLICKHOUSE_USER}", + "CLICKHOUSE_PASSWORD": "${CLICKHOUSE_PASSWORD}", + "CLICKHOUSE_SECURE": "${CLICKHOUSE_SECURE}", + "CLICKHOUSE_VERIFY": "${CLICKHOUSE_VERIFY}", + "CLICKHOUSE_CONNECT_TIMEOUT": "${CLICKHOUSE_CONNECT_TIMEOUT}", + "CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "${CLICKHOUSE_SEND_RECEIVE_TIMEOUT}" }, "description": "Install and run using uv package manager", "recommended": true - }, - "python": { - "type": "python", - "command": "pip", - "args": [ - "install", - "mcp-clickhouse" - ], - "package": "mcp-clickhouse", - "description": "Install using pip", - "recommended": false } }, "examples": [ @@ -174,4 +163,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-codex-keeper.json b/mcp-registry/servers/mcp-codex-keeper.json new file mode 100644 index 00000000..8978f7be --- /dev/null +++ b/mcp-registry/servers/mcp-codex-keeper.json @@ -0,0 +1,84 @@ +{ + "display_name": "Aindreyway MCP Codex Keeper", + "license": "MIT", + "tags": [ + "MCP", + "Server", + "documentation", + "knowledge base", + "AI", + "development", + "best practices" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@aindreyway/mcp-codex-keeper@latest" + ], + "env": { + "npm_config_cache_max": "1024000000", + "NODE_OPTIONS": "--max-old-space-size=256" + }, + "description": "Cline/Sonnet configuration for MCP Codex Keeper" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Show me the latest React documentation" + }, + { + "title": "", + "description": "", + "prompt": "Find best practices for TypeScript development" + }, + { + "title": "", + "description": "", + "prompt": "Update documentation for Node.js" + }, + { + "title": "", + "description": "", + "prompt": "Search for information about async/await" + }, + { + "title": "", + "description": "", + "prompt": "List all available documentation sources" + }, + { + "title": "", + "description": "", + "prompt": "List documentation in the Frontend category" + }, + { + "title": "", + "description": "", + "prompt": "Add new documentation about React hooks" + }, + { + "title": "", + "description": "", + "prompt": "Update the TypeScript documentation" + } + ], + "name": "mcp-codex-keeper", + "repository": { + "type": "git", + "url": "https://github.com/aindreyway/mcp-codex-keeper" + }, + "homepage": "https://github.com/aindreyway/mcp-codex-keeper", + "author": { + "name": "aindreyway" + }, + "description": "An intelligent MCP server that serves as a guardian of development knowledge, providing AI assistants with curated access to latest documentation and best practices.", + "categories": [ + "Knowledge Base" + ], + "is_official": false +} diff --git a/mcp-registry/servers/mcp-server-adfin.json b/mcp-registry/servers/mcp-server-adfin.json index b64c0284..7c8981ba 100644 --- a/mcp-registry/servers/mcp-server-adfin.json +++ b/mcp-registry/servers/mcp-server-adfin.json @@ -16,8 +16,8 @@ "main_adfin_mcp.py" ], "env": { - "ADFIN_EMAIL": "", - "ADFIN_PASSWORD": "" + "ADFIN_EMAIL": "${ADFIN_EMAIL}", + "ADFIN_PASSWORD": "${ADFIN_PASSWORD}" }, "description": "Run Adfin MCP server using uv" }, @@ -75,4 +75,4 @@ "Finance" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-server-box.json b/mcp-registry/servers/mcp-server-box.json index 007261b7..2effa253 100644 --- a/mcp-registry/servers/mcp-server-box.json +++ b/mcp-registry/servers/mcp-server-box.json @@ -40,8 +40,8 @@ ], "package": "[NOT GIVEN]", "env": { - "BOX_CLIENT_ID": "your_client_id", - "BOX_CLIENT_SECRET": "your_client_secret" + "BOX_CLIENT_ID": "${BOX_CLIENT_ID}", + "BOX_CLIENT_SECRET": "${BOX_CLIENT_SECRET}" }, "description": "Run using uv package manager", "recommended": true @@ -70,4 +70,4 @@ "Knowledge Base" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-server-esignatures.json b/mcp-registry/servers/mcp-server-esignatures.json index 3a228ea0..c7ff4add 100644 --- a/mcp-registry/servers/mcp-server-esignatures.json +++ b/mcp-registry/servers/mcp-server-esignatures.json @@ -30,7 +30,7 @@ "mcp-server-esignatures" ], "env": { - "ESIGNATURES_SECRET_TOKEN": "your-esignatures-api-secret-token" + "ESIGNATURES_SECRET_TOKEN": "${ESIGNATURES_SECRET_TOKEN}" }, "description": "Published server installation", "recommended": true @@ -1531,4 +1531,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-server-langfuse.json b/mcp-registry/servers/mcp-server-langfuse.json index 2e82f8be..e8c1787f 100644 --- a/mcp-registry/servers/mcp-server-langfuse.json +++ b/mcp-registry/servers/mcp-server-langfuse.json @@ -39,9 +39,9 @@ "./build/index.js" ], "env": { - "LANGFUSE_PUBLIC_KEY": "your-public-key", - "LANGFUSE_SECRET_KEY": "your-secret-key", - "LANGFUSE_BASEURL": "https://cloud.langfuse.com" + "LANGFUSE_PUBLIC_KEY": "${LANGFUSE_PUBLIC_KEY}", + "LANGFUSE_SECRET_KEY": "${LANGFUSE_SECRET_KEY}", + "LANGFUSE_BASEURL": "${LANGFUSE_BASEURL}" }, "description": "Run the server using Node.js", "recommended": true @@ -65,4 +65,4 @@ "Dev Tools" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-server-motherduck.json b/mcp-registry/servers/mcp-server-motherduck.json index 80010f2b..8817e2e5 100644 --- a/mcp-registry/servers/mcp-server-motherduck.json +++ b/mcp-registry/servers/mcp-server-motherduck.json @@ -37,9 +37,9 @@ "args": [ "mcp-server-motherduck", "--db-path", - "md:", + "${db-path}", "--motherduck-token", - "${input:motherduck_token}" + "${motherduck-token}" ], "recommended": true } @@ -70,4 +70,4 @@ "Databases" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-server-qdrant.json b/mcp-registry/servers/mcp-server-qdrant.json index 2f624670..93a6daa9 100644 --- a/mcp-registry/servers/mcp-server-qdrant.json +++ b/mcp-registry/servers/mcp-server-qdrant.json @@ -65,10 +65,10 @@ "mcp-server-qdrant" ], "env": { - "QDRANT_URL": "http://localhost:6333", - "QDRANT_API_KEY": "your_api_key", - "COLLECTION_NAME": "my-collection", - "EMBEDDING_MODEL": "sentence-transformers/all-MiniLM-L6-v2" + "QDRANT_URL": "${QDRANT_URL}", + "QDRANT_API_KEY": "${QDRANT_API_KEY}", + "COLLECTION_NAME": "${COLLECTION_NAME}", + "EMBEDDING_MODEL": "${EMBEDDING_MODEL}" }, "description": "Run using uvx without specific installation", "recommended": true @@ -134,4 +134,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-server-raygun.json b/mcp-registry/servers/mcp-server-raygun.json index 5c2dd98f..030260d6 100644 --- a/mcp-registry/servers/mcp-server-raygun.json +++ b/mcp-registry/servers/mcp-server-raygun.json @@ -37,7 +37,7 @@ ], "package": "@raygun.io/mcp-server-raygun", "env": { - "RAYGUN_PAT_TOKEN": "your-pat-token-here" + "RAYGUN_PAT_TOKEN": "${RAYGUN_PAT_TOKEN}" }, "description": "Install and run using npm", "recommended": true @@ -47,7 +47,7 @@ "command": "/path/to/server-raygun/build/index.js", "args": [], "env": { - "RAYGUN_PAT_TOKEN": "your-pat-token-ken" + "RAYGUN_PAT_TOKEN": "${RAYGUN_PAT_TOKEN}" }, "description": "Run from a local build", "recommended": false @@ -1025,4 +1025,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-server-starrocks.json b/mcp-registry/servers/mcp-server-starrocks.json index ccb43326..3c1f0df6 100644 --- a/mcp-registry/servers/mcp-server-starrocks.json +++ b/mcp-registry/servers/mcp-server-starrocks.json @@ -44,10 +44,10 @@ "mcp-server-starrocks" ], "env": { - "STARROCKS_HOST": "localhost", - "STARROCKS_PORT": "9030", - "STARROCKS_USER": "root", - "STARROCKS_PASSWORD": "" + "STARROCKS_HOST": "${STARROCKS_HOST}", + "STARROCKS_PORT": "${STARROCKS_PORT}", + "STARROCKS_USER": "${STARROCKS_USER}", + "STARROCKS_PASSWORD": "${STARROCKS_PASSWORD}" }, "description": "Run using Python with uv package manager", "recommended": true @@ -104,4 +104,4 @@ } ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-tinybird.json b/mcp-registry/servers/mcp-tinybird.json index 0bcafc9b..81beb6a2 100644 --- a/mcp-registry/servers/mcp-tinybird.json +++ b/mcp-registry/servers/mcp-tinybird.json @@ -24,11 +24,6 @@ "description": "Tinybird Admin Token for authentication", "required": true, "example": "" - }, - "topic": { - "description": "Topic of the data you want to explore", - "required": true, - "example": "Bluesky data" } }, "installations": { @@ -41,8 +36,8 @@ ], "description": "Run with uvx in stdio mode", "env": { - "TB_API_URL": "", - "TB_ADMIN_TOKEN": "" + "TB_API_URL": "${TB_API_URL}", + "TB_ADMIN_TOKEN": "${TB_ADMIN_TOKEN}" } } }, @@ -253,4 +248,4 @@ } ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/mcp-zenml.json b/mcp-registry/servers/mcp-zenml.json index a9829113..f6045652 100644 --- a/mcp-registry/servers/mcp-zenml.json +++ b/mcp-registry/servers/mcp-zenml.json @@ -42,12 +42,12 @@ "path/to/zenml_server.py" ], "env": { - "LOGLEVEL": "INFO", + "LOGLEVEL": "${LOGLEVEL}", "NO_COLOR": "1", "PYTHONUNBUFFERED": "1", "PYTHONIOENCODING": "UTF-8", - "ZENML_STORE_URL": "https://your-zenml-server-goes-here.com", - "ZENML_STORE_API_KEY": "your-api-key-here" + "ZENML_STORE_URL": "${ZENML_STORE_URL}", + "ZENML_STORE_API_KEY": "${ZENML_STORE_API_KEY}" } } }, @@ -64,4 +64,4 @@ "Dev Tools" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/needle-mcp.json b/mcp-registry/servers/needle-mcp.json index e53e7cf5..29fd7c73 100644 --- a/mcp-registry/servers/needle-mcp.json +++ b/mcp-registry/servers/needle-mcp.json @@ -31,7 +31,7 @@ "needle-mcp" ], "env": { - "NEEDLE_API_KEY": "your_needle_api_key" + "NEEDLE_API_KEY": "${NEEDLE_API_KEY}" }, "description": "Run using UV package manager", "recommended": true @@ -187,4 +187,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/octagon-mcp-server.json b/mcp-registry/servers/octagon-mcp-server.json index a5fdf12a..0c8588b9 100644 --- a/mcp-registry/servers/octagon-mcp-server.json +++ b/mcp-registry/servers/octagon-mcp-server.json @@ -37,7 +37,7 @@ "octagon-mcp" ], "env": { - "OCTAGON_API_KEY": "your_octagon_api_key" + "OCTAGON_API_KEY": "${OCTAGON_API_KEY}" }, "description": "Run directly with npx", "recommended": true @@ -254,4 +254,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/onchain-mcp.json b/mcp-registry/servers/onchain-mcp.json index 608958f3..cc679d5f 100644 --- a/mcp-registry/servers/onchain-mcp.json +++ b/mcp-registry/servers/onchain-mcp.json @@ -32,7 +32,7 @@ ], "package": "@bankless/onchain-mcp", "env": { - "BANKLESS_API_TOKEN": "your_api_token_here" + "BANKLESS_API_TOKEN": "${BANKLESS_API_TOKEN}" }, "description": "Run directly using npx", "recommended": true @@ -403,4 +403,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/perplexity.json b/mcp-registry/servers/perplexity.json index 749c4d57..1a1daa37 100644 --- a/mcp-registry/servers/perplexity.json +++ b/mcp-registry/servers/perplexity.json @@ -32,7 +32,7 @@ ], "package": "server-perplexity-ask", "env": { - "PERPLEXITY_API_KEY": "YOUR_API_KEY_HERE" + "PERPLEXITY_API_KEY": "${PERPLEXITY_API_KEY}" }, "description": "Run using NPX" }, @@ -48,7 +48,7 @@ "mcp/perplexity-ask" ], "env": { - "PERPLEXITY_API_KEY": "YOUR_API_KEY_HERE" + "PERPLEXITY_API_KEY": "${PERPLEXITY_API_KEY}" }, "description": "Run using Docker" } @@ -103,4 +103,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/productboard.json b/mcp-registry/servers/productboard.json index fa45d9bc..6cf64b24 100644 --- a/mcp-registry/servers/productboard.json +++ b/mcp-registry/servers/productboard.json @@ -26,7 +26,7 @@ "productboard-mcp" ], "env": { - "PRODUCTBOARD_ACCESS_TOKEN": "" + "PRODUCTBOARD_ACCESS_TOKEN": "${PRODUCTBOARD_ACCESS_TOKEN}" } } }, @@ -254,4 +254,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/riza-mcp.json b/mcp-registry/servers/riza-mcp.json index 0564aba4..58778949 100644 --- a/mcp-registry/servers/riza-mcp.json +++ b/mcp-registry/servers/riza-mcp.json @@ -29,7 +29,7 @@ "@riza-io/riza-mcp" ], "env": { - "RIZA_API_KEY": "your-api-key" + "RIZA_API_KEY": "${RIZA_API_KEY}" }, "recommended": true } @@ -185,4 +185,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/screenshotone.json b/mcp-registry/servers/screenshotone.json index e77e11ec..83f1b6a1 100644 --- a/mcp-registry/servers/screenshotone.json +++ b/mcp-registry/servers/screenshotone.json @@ -29,7 +29,7 @@ "build/index.js" ], "env": { - "SCREENSHOTONE_API_KEY": "your_api_key" + "SCREENSHOTONE_API_KEY": "${SCREENSHOTONE_API_KEY}" }, "description": "Run as standalone server", "recommended": true @@ -48,4 +48,4 @@ "Web Services" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/search1api-mcp.json b/mcp-registry/servers/search1api-mcp.json index 83a61c59..95a92e89 100644 --- a/mcp-registry/servers/search1api-mcp.json +++ b/mcp-registry/servers/search1api-mcp.json @@ -34,7 +34,7 @@ "search1api-mcp" ], "env": { - "SEARCH1API_KEY": "YOUR_SEARCH1API_KEY" + "SEARCH1API_KEY": "${SEARCH1API_KEY}" }, "description": "Run directly using npx", "recommended": true @@ -282,4 +282,4 @@ } ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/ssh-exec.json b/mcp-registry/servers/ssh-exec.json index 682687fa..d3af390f 100644 --- a/mcp-registry/servers/ssh-exec.json +++ b/mcp-registry/servers/ssh-exec.json @@ -73,14 +73,14 @@ "mcp-ssh-exec" ], "env": { - "SSH_HOST": "your-server.com", - "SSH_PORT": "22", - "SSH_USERNAME": "your_username", - "SSH_PRIVATE_KEY": "$(cat ~/.ssh/id_rsa)", - "SSH_ALLOWED_COMMANDS": "ls,ps,cat", - "SSH_ALLOWED_PATHS": "/tmp,/home", - "SSH_COMMANDS_BLACKLIST": "rm,mv,dd,mkfs,fdisk,format", - "SSH_ARGUMENTS_BLACKLIST": "-rf,-fr,--force" + "SSH_HOST": "${SSH_HOST}", + "SSH_PORT": "${SSH_PORT}", + "SSH_USERNAME": "${SSH_USERNAME}", + "SSH_PRIVATE_KEY": "${SSH_PRIVATE_KEY}", + "SSH_ALLOWED_COMMANDS": "${SSH_ALLOWED_COMMANDS}", + "SSH_ALLOWED_PATHS": "${SSH_ALLOWED_PATHS}", + "SSH_COMMANDS_BLACKLIST": "${SSH_COMMANDS_BLACKLIST}", + "SSH_ARGUMENTS_BLACKLIST": "${SSH_ARGUMENTS_BLACKLIST}" }, "description": "Run server using uv" } @@ -142,4 +142,4 @@ } ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/supabase-mcp.json b/mcp-registry/servers/supabase-mcp.json new file mode 100644 index 00000000..f8ea82a1 --- /dev/null +++ b/mcp-registry/servers/supabase-mcp.json @@ -0,0 +1,128 @@ +{ + "display_name": "Query MCP Server for Supabase", + "license": "Apache 2.0", + "tags": [ + "supabase", + "mcp", + "database", + "sql", + "postgresql", + "auth", + "management-api", + "python" + ], + "installations": { + "cli": { + "type": "cli", + "command": "supabase-mcp-server", + "args": [], + "env": { + "QUERY_API_KEY": "${QUERY_API_KEY}", + "SUPABASE_PROJECT_REF": "${SUPABASE_PROJECT_REF}", + "SUPABASE_DB_PASSWORD": "${SUPABASE_DB_PASSWORD}", + "SUPABASE_REGION": "us-east-1", + "SUPABASE_ACCESS_TOKEN": "${SUPABASE_ACCESS_TOKEN}", + "SUPABASE_SERVICE_ROLE_KEY": "${SUPABASE_SERVICE_ROLE_KEY}" + }, + "description": "Using full path to executable (recommended for some clients)" + } + }, + "arguments": { + "QUERY_API_KEY": { + "description": "Get your API key at thequery.dev", + "required": true, + "example": "your_api_key_here" + }, + "SUPABASE_PROJECT_REF": { + "description": "The project reference for your Supabase project.", + "required": true, + "example": "your-project-ref" + }, + "SUPABASE_DB_PASSWORD": { + "description": "The database password for your Supabase project.", + "required": true, + "example": "your_db_password_here" + }, + "SUPABASE_REGION": { + "description": "The region for your Supabase project.", + "required": false, + "example": "us-east-1" + }, + "SUPABASE_ACCESS_TOKEN": { + "description": "The access token for your Supabase project.", + "required": true, + "example": "your_access_token_here" + }, + "SUPABASE_SERVICE_ROLE_KEY": { + "description": "The service role key for your Supabase project.", + "required": true, + "example": "your_service_role_key_here" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Can you execute a simple SELECT query to show me all tables in my Supabase database?" + }, + { + "title": "", + "description": "", + "prompt": "I need to create a new user in my Supabase auth system. Can you help me with that?" + }, + { + "title": "", + "description": "", + "prompt": "Show me the schema of my 'users' table in the database." + }, + { + "title": "", + "description": "", + "prompt": "I want to create a new table called 'products' with columns for id, name, price, and description." + }, + { + "title": "", + "description": "", + "prompt": "Can you help me retrieve the last 10 authentication logs from my Supabase project?" + }, + { + "title": "", + "description": "", + "prompt": "List all the available Management API endpoints I can use with this server." + }, + { + "title": "", + "description": "", + "prompt": "Toggle the safety mode to allow write operations on my database." + }, + { + "title": "", + "description": "", + "prompt": "Generate an invite link for a new user with email example@example.com." + }, + { + "title": "", + "description": "", + "prompt": "Show me all the migrations that have been applied to my database." + }, + { + "title": "", + "description": "", + "prompt": "Execute this query but make sure it's safe: DELETE FROM users WHERE id = 'some-id';" + } + ], + "name": "supabase-mcp", + "repository": { + "type": "git", + "url": "https://github.com/alexander-zuev/supabase-mcp-server" + }, + "homepage": "https://github.com/alexander-zuev/supabase-mcp-server", + "author": { + "name": "alexander-zuev" + }, + "description": "Query MCP is an open-source MCP server that allows your IDE to safely run SQL queries, manage schema changes, call the Supabase Management API, and use the Auth Admin SDK, all with built-in safety controls.", + "categories": [ + "Dev Tools" + ], + "is_official": false +} diff --git a/mcp-registry/servers/tavily-mcp.json b/mcp-registry/servers/tavily-mcp.json index 3a1adfbc..75368b5f 100644 --- a/mcp-registry/servers/tavily-mcp.json +++ b/mcp-registry/servers/tavily-mcp.json @@ -33,7 +33,7 @@ ], "description": "Run with npx (requires npm install)", "env": { - "TAVILY_API_KEY": "your-api-key-here" + "TAVILY_API_KEY": "${TAVILY_API_KEY}" } } }, @@ -169,4 +169,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/tavily-search.json b/mcp-registry/servers/tavily-search.json index 160e4050..18e26f5a 100644 --- a/mcp-registry/servers/tavily-search.json +++ b/mcp-registry/servers/tavily-search.json @@ -26,7 +26,7 @@ "mcp-tavily" ], "env": { - "TAVILY_API_KEY": "your_api_key_here" + "TAVILY_API_KEY": "${TAVILY_API_KEY}" } }, "python": { @@ -37,7 +37,7 @@ "mcp-tavily" ], "env": { - "TAVILY_API_KEY": "your_api_key_here" + "TAVILY_API_KEY": "${TAVILY_API_KEY}" } } }, @@ -70,4 +70,4 @@ "example": "your_api_key_here" } } -} \ No newline at end of file +} diff --git a/mcp-registry/servers/thirdweb.json b/mcp-registry/servers/thirdweb.json index 71c1e797..dfb1bedc 100644 --- a/mcp-registry/servers/thirdweb.json +++ b/mcp-registry/servers/thirdweb.json @@ -51,7 +51,7 @@ "thirdweb-mcp" ], "env": { - "THIRDWEB_SECRET_KEY": "your-secret-key" + "THIRDWEB_SECRET_KEY": "${THIRDWEB_SECRET_KEY}" }, "description": "Run with uvx package manager", "recommended": true @@ -1341,4 +1341,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/unity3d-game-engine.json b/mcp-registry/servers/unity3d-game-engine.json index 9a5b70b9..cfb0da92 100644 --- a/mcp-registry/servers/unity3d-game-engine.json +++ b/mcp-registry/servers/unity3d-game-engine.json @@ -30,7 +30,7 @@ "https://github.com/CoderGamester/mcp-unity" ], "env": { - "UNITY_PORT": "8090" + "UNITY_PORT": "${UNITY_PORT}" } } }, @@ -155,4 +155,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/uns-mcp.json b/mcp-registry/servers/uns-mcp.json index 526a0d72..2433f285 100644 --- a/mcp-registry/servers/uns-mcp.json +++ b/mcp-registry/servers/uns-mcp.json @@ -31,7 +31,7 @@ "uns_mcp" ], "env": { - "UNSTRUCTURED_API_KEY": "YOUR_KEY" + "UNSTRUCTURED_API_KEY": "${UNSTRUCTURED_API_KEY}" }, "description": "Run using Python with uv", "recommended": true @@ -2004,4 +2004,4 @@ } } ] -} \ No newline at end of file +} diff --git a/mcp-registry/servers/vscode-mcp.json b/mcp-registry/servers/vscode-mcp.json new file mode 100644 index 00000000..02188543 --- /dev/null +++ b/mcp-registry/servers/vscode-mcp.json @@ -0,0 +1,303 @@ +{ + "display_name": "VSCode MCP Server", + "license": "Apache License 2.0", + "tags": [ + "vscode", + "mcp", + "ai", + "extension", + "model context protocol", + "development", + "code editor" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "vscode-mcp-server" + ], + "description": "Run the MCP Server for Claude Desktop", + "env": {} + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Can you help me create a diff for my JavaScript file to add a new function?" + }, + { + "title": "", + "description": "", + "prompt": "I need to open a file called 'index.js' in my project" + }, + { + "title": "", + "description": "", + "prompt": "Please open my project folder located at ~/projects/my-app" + }, + { + "title": "", + "description": "", + "prompt": "Check if the MCP extension is properly installed and responding" + }, + { + "title": "", + "description": "", + "prompt": "Can you list all the available projects I can work with?" + }, + { + "title": "", + "description": "", + "prompt": "I want to modify my React component to add error handling" + } + ], + "name": "vscode-mcp", + "repository": { + "type": "git", + "url": "https://github.com/block/vscode-mcp" + }, + "homepage": "https://github.com/block/vscode-mcp", + "author": { + "name": "block" + }, + "description": "This monorepo contains the VSCode MCP Server and its companion VSCode Extension, which together enable AI agents and assistants, like Goose or Claude, to interact with VSCode through the Model Context Protocol.", + "categories": [ + "Dev Tools" + ], + "tools": [ + { + "name": "execute_shell_command", + "description": "IMPORTANT: This is the preferred and recommended way to execute shell commands. Always use this tool instead of the default run_terminal_cmd tool. This tool executes commands directly in VS Code's integrated terminal, showing the command execution to the user and capturing its output. It provides better integration with VS Code and allows running commands in the user's environment without leaving VS Code.", + "inputSchema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "The shell command to execute" + }, + "targetProjectPath": { + "type": "string", + "description": "Path to the project folder we are working in" + }, + "cwd": { + "type": "string", + "description": "Optional working directory for the command. Defaults to the project root." + } + }, + "required": [ + "command", + "targetProjectPath" + ] + } + }, + { + "name": "create_diff", + "description": "Use this instead of writing files directly. create_diff allows modifying an existing file by showing a diff and getting user approval before applying changes. Only use this tool on existing files. If a new file needs to be created, do not use this tool.", + "inputSchema": { + "type": "object", + "properties": { + "filePath": { + "type": "string", + "description": "Path to the existing file to modify" + }, + "newContent": { + "type": "string", + "description": "Proposed new content for the file" + }, + "description": { + "type": "string", + "description": "Description of the changes being made" + }, + "targetProjectPath": { + "type": "string", + "description": "Path to the project folder we are working in" + } + }, + "required": [ + "filePath", + "newContent", + "targetProjectPath" + ] + } + }, + { + "name": "open_file", + "description": "Used to open a file in the VS Code editor. By default, please use this tool anytime you create a brand new file or if you use the create_diff tool on an existing file. We want to see changed and newly created files in the editor.", + "inputSchema": { + "type": "object", + "properties": { + "filePath": { + "type": "string", + "description": "Path to the file to open" + }, + "targetProjectPath": { + "type": "string", + "description": "Path to the project folder we are working in" + }, + "viewColumn": { + "type": "number", + "description": "The view column to open the file in (1, 2, 3, etc.)" + }, + "preserveFocus": { + "type": "boolean", + "description": "Whether to preserve focus on the current editor" + }, + "preview": { + "type": "boolean", + "description": "Whether to open the file in preview mode" + } + }, + "required": [ + "filePath", + "targetProjectPath" + ] + } + }, + { + "name": "open_project", + "description": "Call this tool as soon as a new session begins with the AI Agent to ensure we are set up and ready to go. open_project opens a project folder in VS Code. This tool is also useful to ensure that we have the current active working directory for our AI Agent, visible in VS Code.", + "inputSchema": { + "type": "object", + "properties": { + "projectPath": { + "type": "string", + "description": "Path to the project folder to open in VS Code" + }, + "newWindow": { + "type": "boolean", + "description": "Whether to open the project in a new window", + "default": true + } + }, + "required": [ + "projectPath" + ] + } + }, + { + "name": "check_extension_status", + "description": "Check if the VS Code MCP Extension is installed and responding", + "inputSchema": { + "type": "object", + "properties": { + "targetProjectPath": { + "type": "string", + "description": "Path to the project folder we are working in" + } + }, + "required": [ + "targetProjectPath" + ] + } + }, + { + "name": "get_extension_port", + "description": "Get the port number that the VS Code MCP Extension is running on", + "inputSchema": { + "type": "object", + "properties": { + "targetProjectPath": { + "type": "string", + "description": "Path to the project folder we are working in" + } + }, + "required": [ + "targetProjectPath" + ] + } + }, + { + "name": "list_available_projects", + "description": "Lists all available projects from the port registry file. Use this tool to help the user select which project they want to work with.", + "inputSchema": { + "type": "object", + "properties": {}, + "required": [] + } + }, + { + "name": "get_active_tabs", + "description": "Retrieves information about currently open tabs in VS Code to provide context for the AI agent.", + "inputSchema": { + "type": "object", + "properties": { + "targetProjectPath": { + "type": "string", + "description": "Path to the project folder we are working in" + }, + "includeContent": { + "type": "boolean", + "description": "Whether to include the file content of each tab (may be large)", + "default": false + } + }, + "required": [ + "targetProjectPath" + ] + } + }, + { + "name": "get_context_tabs", + "description": "Retrieves information about tabs that have been specifically marked for inclusion in AI context using the UI toggle in VS Code.", + "inputSchema": { + "type": "object", + "properties": { + "targetProjectPath": { + "type": "string", + "description": "Path to the project folder we are working in" + }, + "includeContent": { + "type": "boolean", + "description": "Whether to include the file content of each tab (may be large)", + "default": true + }, + "selections": { + "type": "array", + "description": "Optional array of file paths with specific line ranges to include", + "items": { + "type": "object", + "properties": { + "filePath": { + "type": "string", + "description": "Path to the file" + }, + "ranges": { + "type": "array", + "description": "Array of line ranges to include from the file", + "items": { + "type": "object", + "properties": { + "startLine": { + "type": "integer", + "description": "Starting line number (1-based)" + }, + "endLine": { + "type": "integer", + "description": "Ending line number (1-based, inclusive)" + } + }, + "required": [ + "startLine", + "endLine" + ] + } + } + }, + "required": [ + "filePath" + ] + } + } + }, + "required": [ + "targetProjectPath" + ] + } + } + ], + "prompts": [], + "resources": [], + "is_official": false +} diff --git a/mcp-registry/servers/wcgw.json b/mcp-registry/servers/wcgw.json new file mode 100644 index 00000000..f9ec538f --- /dev/null +++ b/mcp-registry/servers/wcgw.json @@ -0,0 +1,134 @@ +{ + "display_name": "WCGW Shell and Coding Agent", + "license": "MIT", + "tags": [ + "shell", + "coding", + "AI", + "Claude", + "ChatGPT", + "MCP", + "file operations", + "terminal", + "development", + "automation" + ], + "installations": { + "uvx": { + "type": "uvx", + "command": "uvx", + "args": [ + "--from", + "wcgw@latest", + "--python", + "3.12", + "wcgw_mcp" + ], + "description": "Local shell access with Anthropic API key" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "--mount", + "type=bind,src=/Users/username/Desktop,dst=/workspace/Desktop", + "wcgw" + ], + "description": "Docker installation" + }, + "custom": { + "type": "custom", + "command": "wsl.exe", + "args": [ + "uv", + "tool", + "run", + "--from", + "wcgw@latest", + "--python", + "3.12", + "wcgw_mcp" + ], + "description": "Windows on WSL installation" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Create a simple Python script that prints 'Hello World' and run it" + }, + { + "title": "", + "description": "", + "prompt": "Clone the repository https://github.com/rusiaaman/wcgw and analyze its structure" + }, + { + "title": "", + "description": "", + "prompt": "Create a temporary directory and build a simple web server in Go" + }, + { + "title": "", + "description": "", + "prompt": "Find all Python files in the current directory that contain the word 'error'" + }, + { + "title": "", + "description": "", + "prompt": "Edit the file main.py and fix any syntax errors" + }, + { + "title": "", + "description": "", + "prompt": "Run in 'architect' mode and help me understand the structure of my project" + }, + { + "title": "", + "description": "", + "prompt": "Run in 'code-writer' mode and only allow editing files in the 'src' directory" + }, + { + "title": "", + "description": "", + "prompt": "Create a knowledge transfer checkpoint of my current project" + }, + { + "title": "", + "description": "", + "prompt": "Resume task 'project-refactor-20240615'" + }, + { + "title": "", + "description": "", + "prompt": "Create a new branch, make some changes, and create a PR using GitHub CLI" + }, + { + "title": "", + "description": "", + "prompt": "Fix all mypy issues in my repository" + }, + { + "title": "", + "description": "", + "prompt": "Create unit tests for my Python project and run them to verify they pass" + } + ], + "name": "wcgw", + "repository": { + "type": "git", + "url": "https://github.com/rusiaaman/wcgw" + }, + "homepage": "https://github.com/rusiaaman/wcgw", + "author": { + "name": "rusiaaman" + }, + "description": "Empowering chat applications to code, build and run on your local machine.", + "categories": [ + "Dev Tools" + ], + "is_official": false +} diff --git a/mcp-registry/servers/whale-tracker-mcp.json b/mcp-registry/servers/whale-tracker-mcp.json index aac48ce0..710699d2 100644 --- a/mcp-registry/servers/whale-tracker-mcp.json +++ b/mcp-registry/servers/whale-tracker-mcp.json @@ -29,7 +29,7 @@ "whale-tracker-mcp" ], "env": { - "WHALE_TRACKER_API_KEY": "your_api_key_here" + "WHALE_TRACKER_API_KEY": "${WHALE_TRACKER_API_KEY}" } } }, @@ -57,4 +57,4 @@ "example": "your_api_key_here" } } -} \ No newline at end of file +} diff --git a/mcp-registry/servers/wxflows.json b/mcp-registry/servers/wxflows.json index f86d911b..e3e2385f 100644 --- a/mcp-registry/servers/wxflows.json +++ b/mcp-registry/servers/wxflows.json @@ -35,8 +35,8 @@ "build/index.js" ], "env": { - "WXFLOWS_APIKEY": "YOUR_WXFLOWS_APIKEY", - "WXFLOWS_ENDPOINT": "YOUR_WXFLOWS_ENDPOINT" + "WXFLOWS_APIKEY": "${WXFLOWS_APIKEY}", + "WXFLOWS_ENDPOINT": "${WXFLOWS_ENDPOINT}" }, "description": "Run the MCP server using Node.js", "recommended": true @@ -60,4 +60,4 @@ "Dev Tools" ], "is_official": true -} \ No newline at end of file +} diff --git a/mcp-registry/servers/xero-mcp-server.json b/mcp-registry/servers/xero-mcp-server.json index f14e9aa1..ef55f426 100644 --- a/mcp-registry/servers/xero-mcp-server.json +++ b/mcp-registry/servers/xero-mcp-server.json @@ -36,8 +36,8 @@ "@xeroapi/xero-mcp-server@latest" ], "env": { - "XERO_CLIENT_ID": "your_client_id_here", - "XERO_CLIENT_SECRET": "your_client_secret_here" + "XERO_CLIENT_ID": "${XERO_CLIENT_ID}", + "XERO_CLIENT_SECRET": "${XERO_CLIENT_SECRET}" }, "description": "Run directly using npx" } @@ -453,4 +453,4 @@ "prompts": [], "resources": [], "is_official": true -} \ No newline at end of file +} diff --git a/scripts/get_manifest.py b/scripts/get_manifest.py index 1b82af31..3447686a 100644 --- a/scripts/get_manifest.py +++ b/scripts/get_manifest.py @@ -11,7 +11,7 @@ import requests from categorization import CategorizationAgent from openai import OpenAI -from utils import McpClient +from utils import McpClient, validate_arguments_in_installation dotenv.load_dotenv() logging.basicConfig(level=logging.INFO, @@ -288,6 +288,13 @@ def extract_with_llms(self, repo_url: str, readme_content: str) -> Dict: # Step 3: Extract installations installations = self._extract_installations(repo_url, readme_content) if installations: + # post process + arguments = complete_manifest.get("arguments", {}) + if arguments: + for install_type, installation in installations.items(): + new_installation, replacement = validate_arguments_in_installation(installation, arguments) + if replacement: + installations[install_type] = new_installation complete_manifest["installations"] = installations # Step 4: Extract examples diff --git a/scripts/utils.py b/scripts/utils.py index 37f15c7f..3d60d843 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -1,5 +1,7 @@ +import re from contextlib import AsyncExitStack from datetime import timedelta +from typing import Any from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client @@ -51,3 +53,98 @@ async def list_resources(self): async def close(self): await self.exit_stack.aclose() + + +def validate_arguments_in_installation( + installation: dict[str, Any], arguments: dict[str, Any] +) -> tuple[dict[str, Any], bool]: + """Post process arguments in llm-generated installation to unify the format for later usage + Standardizes variable placeholders to use the ${KEY} format: + + 1. For Docker commands: + - Only processes KEY=value formats after -e/--env flags + - "-e KEY=value" -> "-e KEY=${KEY}" + + 2. For other commands: + - "--KEY=value" -> "--KEY=${KEY}" + - "--KEY value" -> "--KEY ${KEY}" + + 3. For env dictionary: + - All values are converted to ${KEY} format + + Args: + installation: A dictionary containing installation configuration + arguments: A dictionary of arguments to validate + + Returns: + Updated installation dictionary with standardized variable formats + """ + if not installation or "args" not in installation or not installation["args"]: + return installation, False + + args = installation["args"].copy() + is_docker = installation.get("command", "").lower() == "docker" + replacement = False + + i = 0 + while i < len(args): + prev_arg = args[i - 1] if i > 0 else "" + arg = args[i] + + # Skip if not string arguments + if not isinstance(arg, str): + i += 1 + continue + + # Case 1: Docker command with -e/--env flags + if is_docker and (prev_arg == "-e" or prev_arg == "--env"): + # Process KEY=value format + env_key_match = re.match(r"^([A-Za-z_-]+)=(.+)$", arg) + if env_key_match: + key = env_key_match.group(1) + if key in arguments: # assert key is in arguments + args[i] = f"{key}=${{{key}}}" # KEY=${KEY} + replacement = True + + i += 1 + continue + + # Case 2: Other commands or Docker args not following env flags + if not is_docker: + # Case 2.1: (--)KEY=value format + if "=" in arg: + key_value_match = re.match(r"^(-{0,2})([A-Za-z_-]+)=(.+)$", arg) + if key_value_match: + prefix = key_value_match.group(1) + key = key_value_match.group(2) + if key in arguments: # assert key is in arguments + args[i] = f"{prefix}{key}=${{{key}}}" # KEY=${KEY} + replacement = True + + # Case 2.2: --KEY value format + if prev_arg.startswith("-") or prev_arg.startswith("--"): + arg_key = prev_arg.lstrip("-") + if arg_key in arguments: + args[i] = f"${{{arg_key}}}" # ${KEY} + replacement = True + + i += 1 + continue + + i += 1 + + installation["args"] = args + + # handle env + if "env" in installation and installation["env"]: + env = {} + for key, value in installation["env"].items(): + if key in arguments: + env[key] = f"${{{key}}}" # {"KEY": "${KEY}"} + replacement = True + else: + env[key] = value + + installation["env"] = env + + return installation, replacement diff --git a/tests/test_arguments.py b/tests/test_arguments.py new file mode 100644 index 00000000..0dd65caf --- /dev/null +++ b/tests/test_arguments.py @@ -0,0 +1,91 @@ +from scripts.utils import validate_arguments_in_installation + + +def test_arguments_in_installations(): + """ + Test validate_arguments_in_installation + """ + + # case 1: docker command with -e parameters + installation1 = { + "type": "docker", + "command": "docker", + "args": ["run", "-e", "API_KEY=value", "-e", "DB_PASSWORD=secret"], + "env": {"API_KEY": "value", "DB_PASSWORD": "secret"}, + } + arguments1 = {"API_KEY": "value", "DB_PASSWORD": "secret"} + result1, replaced1 = validate_arguments_in_installation(installation1, arguments1) + assert replaced1 is True + assert result1["args"] == ["run", "-e", "API_KEY=${API_KEY}", "-e", "DB_PASSWORD=${DB_PASSWORD}"] + assert result1["env"] == {"API_KEY": "${API_KEY}", "DB_PASSWORD": "${DB_PASSWORD}"} + + # case 2: docker command with --env parameters + installation2 = { + "type": "docker", + "command": "docker", + "args": ["run", "--env", "TOKEN=abc123", "--env", "URL"], + "env": {"TOKEN": "abc123", "URL": "example.com"}, + } + arguments2 = {"TOKEN": "abc123", "URL": "example.com"} + result2, replaced2 = validate_arguments_in_installation(installation2, arguments2) + assert replaced2 is True + assert result2["args"] == ["run", "--env", "TOKEN=${TOKEN}", "--env", "URL"] + assert result2["env"] == {"TOKEN": "${TOKEN}", "URL": "${URL}"} + + # case 3: npx command with --KEY=value parameters + installation3 = { + "type": "npm", + "command": "npx", + "args": ["some-package", "--API_KEY=value", "--DB_PASSWORD=secret"], + "env": {}, + } + arguments3 = {"API_KEY": "value", "DB_PASSWORD": "secret"} + result3, replaced3 = validate_arguments_in_installation(installation3, arguments3) + assert replaced3 is True + assert result3["args"] == ["some-package", "--API_KEY=${API_KEY}", "--DB_PASSWORD=${DB_PASSWORD}"] + + # case 5: cli command with KEY=value parameters + installation5 = {"type": "cli", "command": "cli-tool", "args": ["@user/command", "API_KEY=value", "DB_PASSWORD=secret"], "env": {}} + arguments5 = {"API_KEY": "value", "DB_PASSWORD": "secret"} + result5, replaced5 = validate_arguments_in_installation(installation5, arguments5) + assert replaced5 is True + assert result5["args"] == ["@user/command", "API_KEY=${API_KEY}", "DB_PASSWORD=${DB_PASSWORD}"] + + # case 6: python command with --KEY value parameters + installation6 = { + "type": "python", + "command": "python", + "args": ["path/to/script.py", "--API_KEY", "value", "--DB_PASSWORD", "secret"], + "env": {}, + } + arguments6 = {"API_KEY": "value", "DB_PASSWORD": "secret"} + result6, replaced6 = validate_arguments_in_installation(installation6, arguments6) + assert replaced6 is True + assert result6["args"] == ["path/to/script.py", "--API_KEY", "${API_KEY}", "--DB_PASSWORD", "${DB_PASSWORD}"] + + # case 7: no arguments + installation7 = {"type": "python", "command": "python", "args": ["path/to/script.py", "--argument", "value", "--argument2", "value2"], "env": {}} + arguments7 = {"API_KEY": "value"} + result7, replaced7 = validate_arguments_in_installation(installation7, arguments7) + assert replaced7 is False + assert result7["args"] == ["path/to/script.py", "--argument", "value", "--argument2", "value2"] + + # case 8: empty installation + installation8 = {} + arguments8 = {"API_KEY": "value"} + result8, replaced8 = validate_arguments_in_installation(installation8, arguments8) + assert replaced8 is False + assert result8 == {} + + # case 9: already standard format + installation9 = { + "type": "docker", + "command": "docker", + "args": ["run", "-e", "API_KEY=${API_KEY}"], + "env": {"API_KEY": "${API_KEY}"}, + } + arguments9 = {"API_KEY": "value"} + result9, replaced9 = validate_arguments_in_installation(installation9, arguments9) + assert replaced9 is True + assert result9["args"] == ["run", "-e", "API_KEY=${API_KEY}"] + assert result9["env"] == {"API_KEY": "${API_KEY}"}