Supyagent
Embedding in IDEs

MCP Protocol

Expose supypowers tools via the Model Context Protocol for use with any MCP-compatible client.

Model Context Protocol (MCP)

The Model Context Protocol is an open standard for connecting AI models to external tools and data sources. Supyagent is building native MCP support to expose your supypowers tools as MCP resources that any compatible client can discover and call.

Current Status

FeatureStatus
SKILL.md generation (Claude Code)Available
CLI execution mode (any agent)Available
Native MCP server for supypowersRoadmap
Native MCP server for cloud integrationsRoadmap

How MCP Will Work

The planned MCP server will expose each supypowers function as an MCP tool:

MCP Client (Claude Desktop, Cursor, etc.)

  ├─→ MCP Discovery: "What tools are available?"
  │     └─→ [weather:get_weather, database:query, deploy:push, ...]

  ├─→ MCP Call: weather:get_weather({"city": "Tokyo"})
  │     └─→ {"ok": true, "data": {"temperature": 22.5, "condition": "Clear"}}

  └─→ MCP Call: deploy:push({"environment": "staging"})
        └─→ {"ok": true, "data": {"status": "deployed", "url": "..."}}

Tool Discovery

The MCP server will automatically discover all functions in the powers/ directory and expose them with:

  • Function name and description (from docstring)
  • Input schema (from Pydantic model)
  • Output schema (from return type annotation)

Execution

Each MCP tool call will run the corresponding supypowers function in an isolated uv environment, exactly as supypowers run does today.

Using MCP Today

While the native MCP server is in development, you can use supypowers with MCP-compatible clients through these approaches:

Approach 1: CLI Wrapper

Create a thin MCP server that wraps supypowers run:

mcp_server.py
"""Minimal MCP server wrapping supypowers tools."""
import json
import subprocess


def list_tools():
    """Discover available tools via supypowers docs."""
    result = subprocess.run(
        ["supypowers", "docs", "--format", "json"],
        capture_output=True, text=True,
    )
    docs = json.loads(result.stdout)
    tools = []
    for script in docs:
        for fn in script.get("functions", []):
            script_name = script["script"].split("/")[-1].replace(".py", "")
            tools.append({
                "name": f"{script_name}__{fn['name']}",
                "description": fn.get("description", ""),
                "inputSchema": fn.get("input_schema", {}),
            })
    return tools


def call_tool(name: str, arguments: dict) -> dict:
    """Execute a tool via supypowers run."""
    script, func = name.replace("__", ":", 1).split(":", 1)
    result = subprocess.run(
        ["supypowers", "run", f"{script}:{func}", json.dumps(arguments)],
        capture_output=True, text=True,
    )
    return json.loads(result.stdout)

Approach 2: SKILL.md for Claude Desktop

Claude Desktop reads SKILL.md files from configured skill directories. Generate them with:

supypowers skills --output ~/.claude/skills

Approach 3: Execution Mode

For any MCP client that can execute commands, use supypowers run directly:

supypowers run search:search '{"pattern": "TODO", "glob": "*.py"}'

Cloud Integrations via MCP

The planned MCP server will also expose cloud integrations as MCP tools:

MCP Client
  ├─→ gmail:search({"query": "from:boss"})
  ├─→ slack:send_message({"channel": "engineering", "text": "..."})
  ├─→ github:create_issue({"repo": "my/repo", "title": "..."})
  └─→ calendar:list_events({"days": 7})

This will require a valid Supyagent Cloud API key configured in the MCP server.

Architecture (Planned)

MCP Client

  └─→ supyagent-mcp-server (stdio or SSE transport)

        ├─→ Local tools (supypowers)
        │     └─→ uv run --with <deps> python -c <runner>

        └─→ Cloud tools (supyagent.com API)
              └─→ HTTPS calls with sk_live_... auth

The server will support both stdio (for local clients like Claude Desktop) and SSE (for remote/web clients) transports.

Registering Interest

The MCP server is under active development. To be notified when it's available:

What's Next