MCP Services

SkillSearch

This skill gives an AI agent a pre-imported Python module for working with external MCP services. It can search a catalog of supported services, inspect which ones the user has connected, discover each connection's live tool schemas, and call those tools. Adding a service is a catalog entry plus a user login, not a new Python package, so there are no per-service skills to read.

Then ask your AI: use the MCP Services skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Have a Python environment where the mcp module is pre-imported and available to the agent.

What your AI can do with it

  • Search the supported-service catalog with mcp.search_plugins and mcp.list_plugins
  • Inspect the user's connections with mcp.list_connections
  • Discover live tool schemas with mcp.search_tools, mcp.describe_tool, and mcp.list_tools
  • Call tools on any connection with mcp.call_tool
  • Recommend connecting unconnected services without installing anything

Getting started

  1. Have a Python environment where the mcp module is pre-imported and available to the agent.
  2. Use mcp.list_plugins or mcp.search_plugins to find supported services and their connection status.
  3. Use mcp.list_connections to see which services the user has already connected.
  4. For a connected service, use mcp.describe_tool or mcp.list_tools to read the live input schema before calling.
  5. Call the tool with mcp.call_tool using the connection id, tool name, and arguments that match the schema.

What this skill tells your AI

The instructions your AI receives, as published by primeintellect-ai/prime-agent in skills/mcp/SKILL.md and read by Ahel’s review.

Every external service reachable over MCP uses the same pre-imported mcp module. Adding a service is data (a catalog entry plus a user login), never a new Python package, and there are no per-service skills to read.

Inventory: what can I use?

# Supported catalog, one bounded page. More pages exist while nextCursor is not None.
page = await mcp.list_plugins(connection_status="not_connected", limit=50)
results = await mcp.search_plugins("notion")          # bounded search
page = await mcp.list_plugins()                       # default: first 50 entries

# The user's actual connections. connectionId is the dispatch id everywhere below.
connections = await mcp.list_connections()

Catalog entries carry connectionStatus (connected, pending, not_connected, setup_required, disabled, error), connectable, and when connected the connectionIds you dispatch on. connected means a verified MCP handshake, not just stored credentials; pending means credentials exist but verification hasn't run or succeeded yet. Entries may also carry setupHint (why a service isn't connectable yet), unverified (imported but not vetted), verifiedAt/toolCount, and connectionIds (empty when not dispatchable). Entries with setup_required need a developer app or API key first — say so honestly instead of promising one-click.

Recommend, never connect

If a task would benefit from an unconnected service, name the real catalog entry (e.g. "Connecting Notion would let me search your workspace directly") and tell the user to open /plugins (or run /mcp login <service>) to connect. Recommendations and catalog lookups never install anything, open a browser, use credentials, or request extra scopes. There is no agent-initiated connect call in this slice; if the user connects mid-task, the connection activates on the next call without a reload.

Discover, then call

# Live tool metadata is cached per connection; schemas come from the server.
tools = await mcp.search_tools("search workspace documents", connection_id="notion")
tool = await mcp.describe_tool("notion", "notion-search")   # {name, description, inputSchema}
tools = await mcp.list_tools("notion")                     # full tool list with schemas

result = await mcp.call_tool("notion", "notion-search", {"query": "roadmap"})
  • Discover before calling: don't assume tool names or arguments; read the inputSchema with describe_tool and construct matching arguments.
  • list_tools returns the complete inventory or raises — never a silent partial list. Returned schemas are isolated copies; mutate them freely.
  • search_tools without a connection_id searches at most 8 connections the host reports as connected and reports its scope: searched, unavailable (per-connection failures as fixed, redaction-safe summaries), and truncated (narrow the query or pick a connection when it is set — the result never claims to be exhaustive).
  • Prefer narrow catalog searches over paging the whole catalog; don't dump all schemas into context.
  • Results are already-parsed Python (a dict for structured output, otherwise a string). No json.loads needed.

Errors and permissions

  • PermissionError — the tool is excluded by the user's enabledTools / disabledTools policy. Don't retry; tell the user.
  • KeyError — the tool or connection doesn't exist. Re-check with list_tools / list_connections; tools can change across sessions.
  • McpDiscoveryError — the server's tool listing couldn't complete honestly (broken pagination). No partial inventory is published; re-run, and ask the user to reconnect if it persists.
  • RuntimeError — credentials are not available (McpCredentialsUnavailable: ask the user to connect via /plugins or /mcp login <service>, never via environment variables), a refresh failed, or the host bridge is unavailable.
  • McpToolError — the server flagged the call as an error. Surface the message; don't blindly retry a write that may have already happened.

Credentials never appear in inventory results, tool schemas, or errors.

Signals

GitHub stars
22k
Forks
2k
Last commit
Oct 2026

Questions

How do I connect a new service?
The skill does not connect services. It recommends the real catalog entry and tells the user to open /plugins or run /mcp login <service>. If the user connects mid-task, the connection activates on the next call without a reload.
What does connectionStatus mean?
connected means a verified MCP handshake, not just stored credentials. pending means credentials exist but verification has not run or succeeded. setup_required needs a developer app or API key first. Other values include not_connected, disabled, and error.
Advanced
Item type
skill
Key
mcp-primeintellect-ai
Source
github.com/primeintellect-ai/prime-agent