MCP Discovery Dashboard
AIM automatically detects MCP servers your agents are connecting to, even if they haven't been registered yet. The Discovery Dashboard helps you maintain visibility over your MCP server ecosystem and streamline registration.
Why MCP Discovery?
In the "MCP wild west," agents can connect to any MCP server without oversight. Discovery gives you visibility:
Find MCP servers agents are using that haven't been approved
One-click registration with pre-filled server details
Automatic alerts when agents connect to unregistered MCPs
How Discovery Works
Detection Sources
SDK Runtime
The AIM SDK automatically detects MCP connections during agent operations.
@agent.perform_action callsClaude Desktop
Reads claude_desktop_config.json to find configured MCP servers.
~/Library/Application Support/Claude/Manual Import
Admin uploads MCP configuration files for bulk discovery.
Using the Discovery Dashboard
Navigate to: MCP Servers → Discovery tab
See all MCP servers detected by your agents including name, URL, detection source, and which agents detected it.
Click "Register" to open a pre-filled registration form. Server name, URL, and detected capabilities are auto-populated.
Click "Ignore" to dismiss false positives or MCPs you don't want to register. They won't appear again unless re-detected.
Security Alerts for Unregistered MCPs
Configuration Drift Alert
When an agent connects to an unregistered MCP server, AIM automatically creates a Configuration Drift alert:
- • Severity: Medium
- • Category: Configuration Drift
- • Auto-Resolve: Alert clears when MCP is registered
API Reference
List Discovered MCP Servers
curl -X GET https://aim.example.com/api/v1/mcp-servers/discovered \
-H "Authorization: Bearer {access_token}"
# Response
{
"discovered": [
{
"name": "filesystem-tools",
"url": "http://localhost:4000",
"detectedBy": ["agent-123", "agent-456"],
"detectionMethod": "sdk_runtime",
"firstDetectedAt": "2024-01-15T10:00:00Z",
"lastDetectedAt": "2024-01-15T14:30:00Z",
"capabilities": ["tools:filesystem_read", "tools:filesystem_write"],
"isRegistered": false,
"matchingServerId": null
},
{
"name": "github-mcp",
"url": "http://localhost:4001",
"detectedBy": ["agent-789"],
"detectionMethod": "claude_desktop",
"firstDetectedAt": "2024-01-14T09:00:00Z",
"lastDetectedAt": "2024-01-15T14:30:00Z",
"capabilities": ["tools:github_read"],
"isRegistered": true,
"matchingServerId": "550e8400-e29b-41d4-a716-446655440000"
}
],
"total": 2,
"unregisteredCount": 1
}Report MCP Discovery (SDK)
curl -X POST https://aim.example.com/api/v1/sdk-api/mcp/discovered \
-H "Authorization: Bearer {sdk_token}" \
-H "Content-Type: application/json" \
-d '{
"agentId": "550e8400-e29b-41d4-a716-446655440001",
"mcpServers": [
{
"name": "filesystem-tools",
"url": "http://localhost:4000",
"capabilities": ["tools:filesystem_read", "tools:filesystem_write"],
"detectionMethod": "sdk_runtime"
}
]
}'
# Response
{
"processed": 1,
"newDiscoveries": 1,
"alreadyKnown": 0
}Register from Discovery
curl -X POST https://aim.example.com/api/v1/mcp-servers/register-from-discovery \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"discoveredUrl": "http://localhost:4000",
"name": "filesystem-tools",
"description": "Local filesystem access MCP",
"capabilities": ["tools:filesystem_read", "tools:filesystem_write"]
}'
# Response
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"name": "filesystem-tools",
"status": "pending",
"registeredFromDiscovery": true,
"createdAt": "2024-01-15T15:00:00Z"
}Ignore Discovered MCP
curl -X POST https://aim.example.com/api/v1/mcp-servers/discovered/ignore \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"url": "http://localhost:4000",
"reason": "Internal testing server, not for production"
}'
# Response
{
"ignored": true,
"url": "http://localhost:4000",
"ignoredAt": "2024-01-15T15:00:00Z"
}SDK Auto-Detection
The AIM SDK includes powerful auto-detection capabilities with confidence scoring:
Quick Detection
from aim_sdk import secure, auto_detect_mcps
agent = secure("my-agent")
# One-liner: Detect all MCP servers (config + imports)
detections = auto_detect_mcps()
print(f"Found {len(detections)} MCP servers:")
for d in detections:
print(f" [{d['detectionMethod']}] {d['mcpServer']} ({d['confidence']}% confidence)")
# Report to AIM backend
agent.report_detections(detections)Runtime Call Tracking
Track MCP calls in real-time for 100% accurate detection:
from aim_sdk import track_mcp_call, MCPDetector
# Track each MCP call as it happens
track_mcp_call("filesystem", "read_file")
track_mcp_call("github", "search_repos")
track_mcp_call("slack", "send_message")
# Get runtime detections (100% confidence - observed actual usage)
runtime_detections = MCPDetector.get_runtime_detections()
for d in runtime_detections:
print(f" {d['mcpServer']}: {d['details']['call_count']} calls")Deep Capability Discovery
Connect to an MCP server and enumerate all its tools, resources, and prompts:
from aim_sdk.integrations.mcp import discover_capabilities
# Discover what an MCP server can do
result = discover_capabilities("npx -y @modelcontextprotocol/server-filesystem /tmp")
if not result.error:
print(f"Server: {result.server_name} v{result.server_version}")
print(f"Protocol: {result.protocol_version}")
print(f"Latency: {result.connection_latency_ms:.1f}ms")
print()
print(f"Tools ({len(result.tools)}):")
for tool in result.tools:
print(f" - {tool.name}: {tool.description}")
print()
print(f"Resources ({len(result.resources)}):")
for resource in result.resources:
print(f" - {resource.uri}")
else:
print(f"Discovery failed: {result.error}")Detection Confidence Levels
- • Claude Config: Definitive config file
- • Runtime Tracking: Observed actual usage
- • SDK Import Scan: Package installed
- • Manual Import: Depends on source
Best Practices
Do
- • Review Discovery Dashboard weekly
- • Register legitimate MCP servers promptly
- • Investigate unknown servers before ignoring
- • Set up alerts for new discoveries
- • Document reasons when ignoring servers
Don't
- • Ignore all discoveries without review
- • Allow agents to use unregistered MCPs long-term
- • Disable discovery alerting
- • Skip verification for discovered servers
- • Register without checking server legitimacy