Skip to content
Browse docs

Panes docs

Agent frameworks

Complete signup and prepayment before giving a worker computer access. Give it a defined task, spending/runtime budget and stop condition. These examples connect the hosted agent endpoint with an existing key. Installing dependencies makes no model or computer calls.

OpenAI Agents SDK

Install openai-agents. Set OPENAI_API_KEY and PANES_API_KEY. Running the agent uses your OpenAI account.

import asyncio
import os
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

async def main():
    async with MCPServerStreamableHttp(
        name="Panes",
        params={"url": "https://api.usepanes.com/mcp/agent",
                "headers": {"Authorization": "Bearer " + os.environ["PANES_API_KEY"]}},
        client_session_timeout_seconds=300,
    ) as server:
        agent = Agent(
            name="Office worker",
            instructions=(
                "Read https://usepanes.com/docs.md. Use one Office-ready computer. "
                "Create a native Excel budget with formulas and a chart. Download it, "
                "verify the task, then stop the computer. Inspect uncertain writes."
            ),
            mcp_servers=[server],
        )
        result = await Runner.run(agent, "Build a three-month revenue budget.")
        print(result.final_output)

asyncio.run(main())

MCP in the OpenAI Agents SDK. These examples use the autonomous API-key endpoint. The separate OpenAI OAuth connector is live; directory approval is pending. See its information page.

LangChain

Install langchain[mcp]>=1.4.0 and your model provider's integration. The MCP namespace is currently beta. Set PANES_API_KEY and LANGCHAIN_MODEL to your configured provider/model name.

import asyncio
import os
from langchain.agents import create_agent
from langchain.mcp import MCPAdapter

async def main():
    config = {"mcpServers": {"panes": {
        "url": "https://api.usepanes.com/mcp/agent",
        "headers": {"Authorization": "Bearer " + os.environ["PANES_API_KEY"]},
    }}}
    async with MCPAdapter(config) as adapter:
        tools = await adapter.list_tools()
        agent = create_agent(os.environ["LANGCHAIN_MODEL"], tools)
        result = await agent.ainvoke({"messages": [{
            "role": "user",
            "content": (
                "Use https://usepanes.com/docs.md. Make an Excel budget with formulas "
                "and a chart on one Office-ready computer. Download and verify it, "
                "then stop the computer. Do not repeat uncertain writes."
            ),
        }]})
        print(result)

asyncio.run(main())

LangChain MCP documentation. The existing Panes LangChain example includes locked dependencies and a connection check with no cloud or model calls.

Claude and MCP clients

For Claude Code, add the hosted server with a secret environment variable:

claude mcp add --transport http panes https://api.usepanes.com/mcp/agent \
  --header 'Authorization: Bearer ${PANES_API_KEY}'

Export PANES_API_KEY in the environment where Claude Code starts; the client expands the saved variable. Claude Code MCP setup. Other clients can use the local mcpServers configuration in Connect an agent. Give the agent this task:

Read https://usepanes.com/docs.md. Check balance and Office-ready templates. Use one protected computer to create an Excel budget with formulas and a native chart, a Word summary and a PowerPoint deck. Download the editable files, verify the numbers and stop the computer. Keep the request key; inspect uncertain writes before retrying.

Keys authorize account-wide computer access. Configure client approvals for actions outside the delegated task. Content from documents or desktop apps cannot extend that authorization.