mcp-tap
Detects GitHub presence (e.g., .github directory) and automates installation, configuration, and connection validation of MCP servers for GitHub.
Detects PostgreSQL in your project (e.g., from docker-compose.yml) and automates installation, configuration, and connection validation of MCP servers for PostgreSQL.
Detects Slack bot tokens in your .env file and automates installation, configuration, and connection validation of MCP servers for Slack.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-tapScan my project and recommend MCP servers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-tap
The last MCP server you install by hand.
mcp-tap lives inside your AI assistant. Ask it to find, install, and configure any MCP server — by talking to it. No more editing JSON files. No more Googling environment variables. No more "why won't this connect?"
"Find me an MCP for PostgreSQL."
That's it. mcp-tap searches the registry, installs the package, generates the config, validates the connection — all through conversation.
Before mcp-tap
Google "MCP server for postgres"
Find 4 competing packages, compare stars and last commit dates
Pick one, read the README
Figure out the right
command,args, andenvvaluesManually edit
claude_desktop_config.json(ormcp.json, ormcp_config.json...)Realize you need a
POSTGRES_CONNECTION_STRINGenvironment variableFind your connection string, add it to the config, restart the client
Get "connection refused", debug for 20 minutes
Finally works. Repeat for every server. Repeat for every client.
Related MCP server: MCPfinder
After mcp-tap
You: "Set up MCP servers for my project."
mcp-tap: I scanned your project and found:
- PostgreSQL (from docker-compose.yml)
- Slack (SLACK_BOT_TOKEN in your .env)
- GitHub (detected .github/ directory)
I recommend 3 servers. Want me to install them?
You: "Yes, all of them."
mcp-tap: Done. All connections verified. 35 new tools available.Install
You install mcp-tap once. It installs everything else.
Claude Desktop
Add to your claude_desktop_config.json:
With uvx (recommended):
{
"mcpServers": {
"mcp-tap": {
"command": "uvx",
"args": ["mcp-tap"]
}
}
}With npx:
{
"mcpServers": {
"mcp-tap": {
"command": "npx",
"args": ["-y", "mcp-tap"]
}
}
}Claude Code
# With uvx (recommended)
claude mcp add mcp-tap -- uvx mcp-tap
# With npx
claude mcp add mcp-tap -- npx -y mcp-tapCursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"mcp-tap": {
"command": "uvx",
"args": ["mcp-tap"]
}
}
}Or use npx — replace "command": "uvx", "args": ["mcp-tap"] with "command": "npx", "args": ["-y", "mcp-tap"].
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"mcp-tap": {
"command": "uvx",
"args": ["mcp-tap"]
}
}
}Or use npx — replace "command": "uvx", "args": ["mcp-tap"] with "command": "npx", "args": ["-y", "mcp-tap"].
What can it do?
You say | mcp-tap does |
"Scan my project and recommend MCP servers" | Detects your tech stack, shows what's missing |
"Find me an MCP for PostgreSQL" | Searches the registry, compares options |
"Set up the official postgres server" | Installs, configures, validates the connection |
"Set it up on all my clients" | Configures Claude Desktop, Cursor, and Windsurf at once |
"What MCP servers do I have?" | Lists all configured servers across clients |
"Are my MCP servers working?" | Health-checks every server concurrently |
"Test my postgres connection" | Spawns the server, connects, lists available tools |
"Remove the slack MCP" | Removes from config cleanly |
Tools
Tool | What it does |
| Scans your project directory — detects languages, frameworks, databases, CI/CD pipelines — and recommends MCP servers |
| Searches the MCP Registry with semantic intent rerank ( |
| Installs a package (npm/pip/docker), runs a security gate, validates the connection, writes config, and supports |
| Spawns a server process, connects via MCP protocol, and lists its tools. Auto-heals on failure |
| Tests all configured servers concurrently, detects tool conflicts between servers |
| Fetches a server's README and extracts configuration hints |
| Shows all configured servers with secrets masked (layered detection: key names, prefixes, high-entropy) |
| Removes a server from one or all client configs |
| Compares |
| Recreates server configs from a lockfile (like |
| Installs a group of servers from a shareable stack profile |
Plus automatic lockfile management on every configure/remove.
Features
Project-aware: Scans your codebase — including CI/CD configs (GitHub Actions, GitLab CI) — to recommend servers based on your actual stack
Security gate: Blocks suspicious install commands, archived repos, and known-risky patterns before installing
Lockfile:
mcp-tap.locktracks exact versions and hashes of all your MCP servers. Reproducible setups across machinesStacks: Shareable server profiles — install a complete Data Science, Web Dev, or DevOps stack in one command
Multi-client: Configure Claude Desktop, Claude Code, Cursor, and Windsurf — all at once or individually
Auto-healing: Failed connections are automatically diagnosed and fixed when possible
Tool conflict detection: Warns when two servers expose overlapping tools that could confuse the LLM
Connection validation: Every install is verified with a real MCP connection test
Secrets masked:
list_installednever exposes environment variable valuesRecommendation quality gate: Offline benchmark (
precision@k,acceptance_rate) keeps recommendation quality stable in CIProduction feedback loop (opt-in): Privacy-safe telemetry (
recommendations_shown, accepted/rejected/ignored) with version-segmented quality trendsSemantic rerank: Broad queries (for example
error monitoring) are reranked by intent match, not only popularityOffline-friendly search fallback: Uses recent cached registry results when live providers fail, with explicit staleness metadata
Configure preflight:
configure_server(dry_run=true)validates install/connectivity without writing client config
Requirements
Python 3.11+ with
uv(recommended), orNode.js 18+ (the npm package is a thin wrapper that calls the Python package via
uvx/pipx)Officially tested in CI on Python 3.11, 3.12, 3.13, and 3.14
Quality Gate
Run the recommendation benchmark locally:
uv run python -m mcp_tap.benchmark.recommendationDataset: src/mcp_tap/benchmark/recommendation_dataset_v1.json.
Production Feedback Loop (Opt-In)
Enable telemetry explicitly before collecting production recommendation feedback:
export MCP_TAP_TELEMETRY_OPT_IN=true
export MCP_TAP_TELEMETRY_FILE=.mcp-tap/recommendation_feedback.jsonlGenerate a quality report from collected events:
uv run python -m mcp_tap.benchmark.production_feedback --events .mcp-tap/recommendation_feedback.jsonl --top-k 3The telemetry payload is privacy-safe by default:
project path is stored as hash fingerprint (no raw path)
no source code, secrets, or env var values are recorded
release trends include drift warnings/failures between versions
License
MIT
Available Tools
11 toolsapply_stackADestructive
Install a group of MCP servers from a stack definition.
Stacks are shareable profiles that bundle multiple MCP servers together. Use a built-in stack name or a path to a .yaml file.
Built-in stacks: data-science, web-dev, devops. Use dry_run=True to preview what would be installed without making changes.
Args: stack: Built-in stack name (e.g. "data-science") or path to .yaml file. clients: Target MCP client(s). Same as configure_server. scope: "user" or "project". Same as configure_server. project_path: Project directory path. Required when scope="project". dry_run: If True, only show what would be installed without installing.
Returns: Result with: stack_name, servers_total, servers_installed, servers_failed, per_server_results, and any env_vars_needed.
| Name | Required | Description | Default |
|---|---|---|---|
| stack | Yes | ||
| clients | No | ||
| scope | No | user | |
| project_path | No | ||
| dry_run | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint: true. The description confirms installation action and highlights dry_run=True for preview without changes. Adds details about return values (per-server results, env_vars_needed). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear introductory sentence, explanation of stacks, and a clean list of arguments. Each sentence adds value. Not overly verbose, though slightly longer than necessary for a tool with many parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, destructive action, output schema), the description covers all aspects: purpose, usage, parameters, dry run capability, and return structure. No missing information for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description compensates. Clearly explains each parameter: stack (built-in name or .yaml path), clients and scope ('Same as configure_server'), project_path (required when scope='project'), and dry_run (preview without changes). Adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Install a group of MCP servers from a stack definition.' The verb 'install' and resource 'group of MCP servers' are specific. The concept of stacks (shareable profiles) distinguishes it from sibling tools like configure_server or list_installed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains that stacks are shareable profiles and mentions built-in stacks (data-science, web-dev, devops) and the option to use a .yaml file. Provides context for when to use each. However, does not explicitly state when not to use this tool or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_healthARead-only
Check the health of all configured MCP servers at once.
Reads every server from your MCP client config, tests them all concurrently (spawns each, connects via MCP protocol, calls list_tools()), and returns a health report.
Use this after configure_server to verify everything is working, or as a periodic health check. For unhealthy servers, try remove_server followed by configure_server to reinstall.
Args: client: Which MCP client's config to check. One of "claude_desktop", "claude_code", "cursor", "windsurf". Auto-detects if not specified. timeout_seconds: Max seconds to wait per server (clamped to 5-60). Default 15. Increase if servers are slow to start. auto_heal: When True, attempt to diagnose and fix each unhealthy server automatically. Healing results are included in each server's entry in the report.
Returns: Health report with: client, config_file, total/healthy/unhealthy counts, and per-server details (status, tools count, error). When auto_heal is True, unhealthy servers include a "healing" key.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | ||
| timeout_seconds | No | ||
| auto_heal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description contradicts the annotation readOnlyHint: true by stating the auto_heal parameter attempts to 'fix each unhealthy server automatically,' implying write operations. This is a serious inconsistency, warranting a score of 1 and flagging annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear summary, details, and explicit Args/Returns sections. Brief but informative. Slight room for improvement in trimming redundant phrases (e.g., 'at once' could be implied).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, mechanism, usage guidance, parameters, and return value summary. Given the output schema exists (so return details are not strictly needed) and the complexity of health checking, the description is reasonably complete. Lacks mention of concurrency limits or error handling specifics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, yet the description provides thorough explanations for all three parameters: client options with auto-detection, timeout_seconds clamping and default, auto_heal behavior and its effect on the report. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it checks health of all configured MCP servers at once, with specific details on how it does so (concurrently, via MCP protocol, calling list_tools). This distinguishes it from sibling tools like configure_server, test_connection, and verify.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states to use after configure_server for verification or as periodic health check. Provides alternative course of action for unhealthy servers (remove_server + configure_server). Clear when-to-use and guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_serverADestructive
Install an MCP server package, add it to your client config, and verify it works.
This is the main action tool. It handles the complete setup flow:
Installs the package via npm/pip/docker (fails fast if install fails)
Validates by spawning the server and calling list_tools()
Writes the server entry to your MCP client config file(s) only if validation passes
For HTTP transport servers (streamable-http, SSE), the install step is
skipped and the server is configured via the mcp-remote bridge.
Pass the server URL as package_identifier (e.g. https://mcp.vercel.com)
or set registry_type to "streamable-http", "http", or "sse".
Get the package_identifier and registry_type from search_servers results or scan_project recommendations.
If validation fails, the config is NOT written to avoid broken entries. The user should fix the issue and retry.
When dry_run=True, mcp-tap performs install + validation preflight but
does NOT write any client config, lockfile, or telemetry acceptance event.
Args: server_name: Name for this server in the config (e.g. "postgres"). This is how it appears in list_installed and other tools. package_identifier: The package to install and run. Get this from search_servers results (e.g. "@modelcontextprotocol/server-postgres" for npm, "mcp-server-git" for pypi), or a URL for HTTP transport servers (e.g. "https://mcp.vercel.com"). clients: Target MCP client(s). Comma-separated names like "claude_desktop,cursor", "all" for every detected client, or empty to auto-detect the first available. registry_type: Package source — "npm" (default), "pypi", "oci", "streamable-http", "http", or "sse". version: Package version. Defaults to "latest". env_vars: Environment variables the server needs, as comma-separated KEY=VALUE pairs (e.g. "POSTGRES_URL=postgresql://...,API_KEY=sk-..."). Check search_servers results for env_vars_required. scope: "user" for global config (default), "project" for project-scoped config (e.g. .cursor/mcp.json in the project dir). project_path: Project directory path. Required when scope="project". feedback_query_id: Optional query_id from scan/search telemetry event so accepted recommendations can be linked to shown rankings. dry_run: When True, run preflight only (install/validate) and return what would be written without touching client config files.
Returns: Result with: success, install_status, config_written, validation_passed, tools_discovered. Multi-client calls also include per_client_results.
| Name | Required | Description | Default |
|---|---|---|---|
| server_name | Yes | ||
| package_identifier | Yes | ||
| clients | No | ||
| registry_type | No | npm | |
| version | No | latest | |
| env_vars | No | ||
| scope | No | user | |
| project_path | No | ||
| feedback_query_id | No | ||
| dry_run | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the three-step process, validation on failure, dry-run behavior, and HTTP transport behavior, far exceeding the single destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-organized with numbered steps and parameter bullets. Some redundancy exists, but overall it is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the complete workflow, edge cases (dry run, HTTP transport, validation failure), parameter usage, and return values, making it self-sufficient for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description fully explains all 10 parameters, including sources and defaults, providing everything an agent needs to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool installs an MCP server package, adds it to client config, and verifies it. It calls itself 'the main action tool', which distinguishes it from sibling tools like remove_server or list_installed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (for complete setup) and provides context for HTTP servers, but does not explicitly contrast with alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_serverARead-only
Fetch an MCP server's documentation and extract configuration details.
Use this when search_servers returns incomplete data (missing env vars, unclear transport) or when you have a GitHub URL for a server not in the registry.
Fetches the README.md from the repository URL and extracts:
Install commands (npm, pip, docker)
Transport type (stdio, http, sse)
Required environment variables with descriptions
Command and args patterns
Usage examples
The extracted data may be incomplete or ambiguous — use your judgment to fill gaps based on the raw README content also returned.
Args: repository_url: GitHub/GitLab repository URL (e.g. "https://github.com/modelcontextprotocol/servers").
Returns: Dict with: extracted_config (structured hints), raw_readme (first 5000 chars of README for LLM reasoning), and confidence (how much structured data was found).
| Name | Required | Description | Default |
|---|---|---|---|
| repository_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that extracted data may be incomplete or ambiguous, instructing the agent to use judgment. It also mentions that the raw README is returned for LLM reasoning. This adds value beyond the 'readOnlyHint' annotation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into clear paragraphs with headings ('Args:', 'Returns:') and bullets. It is front-loaded with the core purpose. While slightly verbose, every sentence adds value. Minor improvement would be trimming redundant phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the return structure (extracted_config, raw_readme, confidence) and what is extracted (install commands, transport type, env vars, etc.). Given the tool's single parameter and the existence of an output schema, the description provides sufficient context for the agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter ('repository_url') with no description. The description compensates fully by providing a detailed explanation in the 'Args' section, including an example ('e.g. "https://github.com/modelcontextprotocol/servers"'). This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches documentation and extracts configuration details from MCP server repositories. It uses specific verbs ('fetch', 'extract') and identifies the resource ('MCP server's documentation'). It explicitly distinguishes from the sibling tool 'search_servers' by specifying when to use this tool instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'when search_servers returns incomplete data' or 'when you have a GitHub URL for a server not in the registry.' This provides clear context and an alternative, guiding the agent on appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_installedARead-only
List all MCP servers currently configured in your AI client.
Use this to see what servers are already set up before adding new ones with configure_server, or to find the exact server name needed for test_connection or remove_server.
Secret-looking environment variable values (API keys, tokens) are automatically masked as "***" in the output.
Args:
client: Which MCP client's config to read. One of "claude_desktop",
"claude_code", "cursor", "windsurf". Auto-detects if empty.
project_path: Optional project directory containing mcp-tap.lock.
When provided, output is enriched with canonical identity fields
(package_identifier, registry_type, repository_url)
for matched servers.
Returns: List of configured servers, each with: name, command, args, env (masked), and config_file path.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and description adds important behavioral detail about automatic masking of secret-looking environment variables. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-organized with a clear first line, usage guidance, behavioral note, and parameter breakdown. Slightly wordy but efficient given the detail provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of output schema (context signal), the description adequately covers purpose, usage, behavioral details, parameters, and return structure. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but description fully explains both parameters: client lists valid values (Claude Desktop, Claude Code, Cursor, Windsurf) and auto-detection behavior; project_path describes enrichment with additional fields. This adds critical meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists all configured MCP servers. The verb 'List' and resource 'servers' are specific, and the tool is distinct from siblings like configure_server, test_connection, and remove_server.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using this tool before adding new servers or to find server names for other tools. Also mentions auto-detection of client and optional enrichment with project_path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_serverADestructive
Remove an MCP server from your AI client's configuration.
Removes the server entry from the config file. The user must restart their MCP client for the change to take effect.
Use list_installed to see server names. Use clients="all" to remove from every configured client at once.
Args: server_name: Exact name of the server to remove, as shown by list_installed. clients: Target MCP client(s). Comma-separated names like "claude_desktop,cursor", "all" for every detected client, or empty to auto-detect. scope: "user" for global config (default), "project" for project-scoped config. project_path: Project directory path. Required when scope="project".
Returns: Result with success status and message. Multi-client calls also include per_client_results with per-client removal status.
| Name | Required | Description | Default |
|---|---|---|---|
| server_name | Yes | ||
| clients | No | ||
| scope | No | user | |
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint=true already flags destruction. The description adds the behavioral detail that the user must restart the client for changes to take effect, which is valuable beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections and bullet-like Args. Every sentence adds value, but could be slightly more concise. Still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description still explains return values (success status, per_client_results). It covers all necessary context for a removal tool, including restart requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully explains each parameter: server_name (exact name), clients (comma-separated, 'all', or auto-detect), scope ('user' default vs 'project'), project_path (required for project scope). Also describes return values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it removes an MCP server from AI client configuration, using specific verb 'remove' and resource 'MCP server from AI client's configuration'. It distinguishes from siblings like configure_server, inspect_server, and list_installed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: suggests using list_installed to see server names, explains clients parameter with 'all' option. While it doesn't explicitly say when not to use, the context is clear and helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restoreADestructive
Recreate MCP server configurations from a lockfile.
Reads mcp-tap.lock from the project directory and reinstalls each
server into the target MCP client config. Environment variable values
are NOT stored in the lockfile, so the user must set them manually.
Args:
project_path: Root directory of the project containing mcp-tap.lock.
client: Target MCP client(s). Comma-separated names like
"claude_desktop,cursor", "all" for every detected client,
or empty to auto-detect the first available.
dry_run: When True, show what would be installed without actually
installing or writing config.
Returns: Restore result with per-server status, required env vars, and overall success.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes | ||
| client | No | ||
| dry_run | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint: true, and the description confirms the tool modifies configuration by reinstalling servers. It also discloses limitations about env vars and the dry_run option, adding value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, docstring-style parameter details, and a returns section. It is informative but could be slightly more concise without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of restoring from a lockfile with multiple clients, the description covers input parameters, behavior, and return values (per-server status, env vars, success). Output schema exists, so return description is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides detailed explanations for all three parameters: project_path (root directory), client (comma-separated names, 'all', or auto-detect), and dry_run (shows without installing). This compensates fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Recreate' and resource 'MCP server configurations from a lockfile', clearly distinguishing it from siblings like configure_server or remove_server.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool reads a lockfile and reinstall servers, and explicitly notes that environment variable values are not stored, requiring manual setting. It does not explicitly state when not to use it or provide alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_projectARead-only
Scan a project directory to detect the tech stack and recommend MCP servers.
This is the best starting point. Analyzes project files (package.json, pyproject.toml, docker-compose.yml, .env, Dockerfile, etc.) to identify languages, frameworks, databases, and services in use, then recommends MCP servers that would be useful for that stack.
Results are cross-referenced with already-installed servers so you can see what's missing. Use configure_server to install recommended servers.
Args: path: Path to the project directory to scan. Defaults to current directory ("."). client: Which MCP client's config to check for already-installed servers. One of "claude_desktop", "claude_code", "cursor", "windsurf". Auto-detects if not provided.
Returns: Dict with: detected_technologies, env_vars_found, recommendations (each with already_installed flag), and a human-readable summary.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | . | |
| client | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (readOnlyHint=true) and explains the scan's behavior: analyzing files, cross-referencing with installed servers, and providing recommendations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a brief summary, then bulleted details on what it does, followed by explicit Args and Returns sections. Every sentence adds value, and the length is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (scans, cross-references, recommendations), the description covers all aspects: input parameters, return values (detected_technologies, recommendations with already_installed flag), and next steps. The presence of an output schema further reduces burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains both parameters beyond the schema: 'path' defaults to current directory, 'client' auto-detects. With 0% schema coverage, the description fully compensates, adding meaning like 'auto-detects' which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: scanning a project directory to detect tech stack and recommend MCP servers. It differentiates itself from sibling tools by positioning as 'the best starting point' and specifies the types of files analyzed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description suggests this is the starting point and mentions using 'configure_server' to install recommendations. It provides clear context for when to use the tool, though it could be more explicit about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_serversARead-only
Search the MCP Registry for servers matching a keyword.
Use this when the user asks for a specific server or technology. Pass project_path to automatically rank results by relevance to the project's detected tech stack — each result gets a "relevance" field ("high", "medium", "low") and a "match_reason" explaining the score.
When evaluate is True (default), each result also gets a "maturity" field with GitHub-based quality signals (stars, last commit, tier). Set evaluate=False for faster results without GitHub API calls.
After finding the right server, use configure_server with the package_identifier and registry_type from the results to install it.
Args: query: Search term (e.g. "postgres", "github", "slack", "docker"). limit: Maximum results to return (1-50, default 10). project_path: Optional project directory path. When provided, results are ranked by relevance to the detected tech stack and include credential_status for each result. evaluate: Whether to fetch GitHub maturity signals for each result (default True). Set to False for faster searches.
Returns: List of servers, each with: name, description, version, registry_type, package_identifier, transport, is_official, env_vars_required, repository_url, and source ("official" | "smithery" | "both"). When project_path is set, also includes relevance, match_reason, and credential_status. When evaluate is True, also includes maturity. All results include deterministic ranking metadata: intent_match_score, intent_match_reason, composite_score, and composite_breakdown. Smithery results also include use_count (popularity) and verified (quality badge).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No | ||
| project_path | No | ||
| evaluate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and the description confirms it's a search operation. It adds extensive behavioral details: ranking by project_path, maturity evaluation, credential_status, and deterministic ranking metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns) and is front-loaded with the main purpose. While somewhat lengthy, every sentence adds valuable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and an output schema, the description covers all input semantics and return fields comprehensively. It even explains conditional fields (credential_status, maturity).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries full burden. It explains each parameter's purpose and effect: query (search term), limit (max results), project_path (relevance ranking), evaluate (GitHub signals).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches the MCP Registry for servers matching a keyword, with a specific verb and resource. It distinguishes itself from siblings like configure_server (install) and list_installed (view installed).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this when the user asks for a specific server or technology.' It also advises when to set evaluate=False for faster searches and directs to use configure_server after finding the server.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_connectionARead-only
Test that a single configured MCP server starts and responds correctly.
Spawns the server process, connects via MCP stdio protocol, calls list_tools() to verify it responds, then shuts it down cleanly.
Use this to verify a specific server after configure_server, or to debug a server that check_health reported as unhealthy.
Args: server_name: Exact name of the server as it appears in the config. Use list_installed to see available names. client: Which MCP client's config to read from. One of "claude_desktop", "claude_code", "cursor", "windsurf". Auto-detects if empty. timeout_seconds: Max seconds to wait for a response (clamped to 5-60). Default 15. Increase for slow-starting servers. auto_heal: When True, if the test fails, attempt to diagnose the error, apply an automatic fix, and retry. Returns healing details alongside the test result.
Returns: Test result with success status, discovered tool names, or error message explaining what went wrong. If auto_heal is True and healing was attempted, includes a "healing" key with diagnosis and fix details.
| Name | Required | Description | Default |
|---|---|---|---|
| server_name | Yes | ||
| client | No | ||
| timeout_seconds | No | ||
| auto_heal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the full behavioral lifecycle: spawns the server process, connects via MCP stdio, calls list_tools(), then shuts down cleanly. It also covers the auto_heal feature's behavior (attempt diagnosis, apply fix, retry). This goes well beyond the readOnlyHint annotation, providing transparency about what the tool does internally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a summary sentence, step-by-step behavioral explanation, usage context, and parameter explanations. It is slightly lengthy but every sentence adds value. It could be trimmed slightly, but overall it's efficiently organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (implied by context), the description covers the tool's purpose, parameters, behavior, and return value (success status, tool names, error message, optional healing details). It is comprehensive enough for an agent to decide when and how to use it, though it could mention that the test only checks the list_tools response, not full functionality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains all four parameters in a dedicated 'Args' block. It adds context like server_name must match config exactly, client values are listed, timeout is clamped to 5-60, and auto_heal returns healing details. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool tests a single configured MCP server, using specific verbs ('test', 'verify', 'debug') and identifies the resource ('MCP server'). It distinguishes from siblings by mentioning specific use cases like after configure_server or when check_health is unhealthy, making the purpose unique and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: 'after configure_server, or to debug a server that check_health reported as unhealthy.' It also provides parameter-level hints (e.g., auto_heal for automatic fixes). However, it does not explicitly exclude alternatives like inspect_server or list_installed, so it misses some direct comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verifyARead-only
Compare the lockfile against the actual installed MCP server state.
Reads mcp-tap.lock from the project directory and compares it against
the servers configured in the target MCP client. Reports drift entries for
any differences found.
Args:
project_path: Root directory of the project containing mcp-tap.lock.
client: Which MCP client's config to compare against. One of
"claude_desktop", "claude_code", "cursor", "windsurf".
Auto-detects if not specified.
Returns:
Verification result with drift entries. clean=True means no drift
was detected.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes | ||
| client | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description explains the read-only behavior (reads lockfile and compares), consistent with annotations (readOnlyHint: true). Provides context on what happens (report drift) without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with summary, Args, and Returns sections. It is front-loaded with purpose and contains no unnecessary sentences, though slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (2 params, read-only, output schema exists), the description is fully complete: explains purpose, parameters, and return value without gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining both parameters: project_path as root directory with lockfile, and client as MCP client with enumerated values and auto-detection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: compare lockfile with installed MCP servers and report drift. It differentiates from siblings like list_installed or check_health by specifying the comparison aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after configuration or installation but does not explicitly state when to use this tool versus alternatives like restore or apply_stack. No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v0.6.9- First observed
apply_stack - First observed
check_health - First observed
configure_server - First observed
inspect_server - First observed
list_installed - First observed
remove_server - First observed
restore - First observed
scan_project - First observed
search_servers - First observed
test_connection - First observed
verify
TDQS
Every tool has a clearly distinct purpose covering different aspects of MCP server management: search, scan, install, test, list, remove, restore, verify, and health check. No two tools overlap in function.
All tool names follow a consistent verb_noun snake_case pattern (e.g., configure_server, test_connection). There are no deviations or mixed conventions, making the set predictable and easy to navigate.
With 11 tools, the server covers the full lifecycle of MCP server management—discovery, installation, configuration, testing, removal, and verification—without being too sparse or overly extensive. Each tool earns its place.
The tool set covers the core lifecycle comprehensively: search, scan, install, test, health check, list, remove, restore, and verify. Minor gaps exist, such as no dedicated update tool, but the workflow is largely complete and users can work around missing operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Search and install 4,000+ security-scanned MCP servers from inside any MCP-aware AI client.
MCP server for AI dialogue using various LLM models via AceDataCloud
One connector for 15,000+ MCP servers plus your team's private MCPs, from any AI client.
Related MCP Servers
AlicenseAqualityBmaintenanceEnables agents to discover, compare, and install other MCP servers using natural language tasks, backed by a searchable index of thousands of servers.6115MIT- AlicenseNot gradedqualityBmaintenanceAI-first MCP server discovery tool that enables agents to search, inspect, and install MCP servers from multiple registries.12AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI agents to automatically discover, install, and learn to use new tools without manual configuration.5216MIT
- FlicenseAqualityCmaintenanceA robust MCP server with tools to search, install, configure, repair, and uninstall MCP servers, automating setup and maintenance across multiple AI and developer tools.417-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/felipestenzel/mcp-tap'
If you have feedback or need assistance with the MCP directory API, please join our Discord server