SDKs

SDKs

ApexMCP speaks standard MCP JSON-RPC, so any MCP-compatible client works out of the box. Use the official MCP SDK for your language and point it at your ApexMCP endpoint.

TypeScript / JavaScript

Install the MCP SDK:

npm install @modelcontextprotocol/sdk

Connect to ApexMCP:

import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
 
const client = new Client(
  { name: 'my-agent', version: '1.0.0' },
  { capabilities: {} }
);
 
const transport = new StreamableHTTPClientTransport(
  new URL('https://gateway.apexmcp.ai/mcp/acme-corp'),
  {
    requestInit: {
      headers: {
        'X-API-Key': process.env.APEXMCP_API_KEY!,
      },
    },
  }
);
 
await client.connect(transport);
 
// List available tools
const { tools } = await client.listTools();
console.log('Available tools:', tools.map(t => t.name));
 
// Call a tool
const result = await client.callTool({
  name: 'query_postgres_orders',
  arguments: {
    sql: 'SELECT id, status, total FROM orders WHERE status = $1',
    params: ['pending'],
    limit: 20,
  },
});
 
console.log(result.content);
await client.close();

Python

Install the MCP SDK:

pip install mcp

Connect to ApexMCP:

import asyncio
import os
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
 
async def main():
    async with streamablehttp_client(
        url="https://gateway.apexmcp.ai/mcp/acme-corp",
        headers={"X-API-Key": os.environ["APEXMCP_API_KEY"]},
    ) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()
 
            # List tools
            tools = await session.list_tools()
            print("Tools:", [t.name for t in tools.tools])
 
            # Call a tool
            result = await session.call_tool(
                "query_postgres_orders",
                arguments={
                    "sql": "SELECT id, status, total FROM orders LIMIT 20",
                },
            )
            print(result.content)
 
asyncio.run(main())

Go

Install the MCP SDK:

go get github.com/modelcontextprotocol/go-sdk

Connect to ApexMCP:

package main
 
import (
    "context"
    "fmt"
    "log"
    "os"
 
    "github.com/modelcontextprotocol/go-sdk/mcp"
)
 
func main() {
    ctx := context.Background()
 
    transport := mcp.NewStreamableHTTPTransport(
        "https://gateway.apexmcp.ai/mcp/acme-corp",
        mcp.WithHeader("X-API-Key", os.Getenv("APEXMCP_API_KEY")),
    )
 
    client := mcp.NewClient("my-agent", "1.0.0", nil)
    session, err := client.Connect(ctx, transport)
    if err != nil {
        log.Fatal(err)
    }
    defer session.Close()
 
    // List tools
    toolsResult, err := session.ListTools(ctx, &mcp.ListToolsParams{})
    if err != nil {
        log.Fatal(err)
    }
    for _, t := range toolsResult.Tools {
        fmt.Println("Tool:", t.Name)
    }
 
    // Call a tool
    result, err := session.CallTool(ctx, &mcp.CallToolParams{
        Name: "query_postgres_orders",
        Arguments: map[string]any{
            "sql":   "SELECT id, status, total FROM orders LIMIT 20",
            "limit": 20,
        },
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(result.Content)
}

OAuth2 Bearer Token (all languages)

To use OAuth2 instead of an API key, swap the header:

Authorization: Bearer <access_token>

Obtain the token first via POST /oauth/token — see Authentication.


Using with Claude (Anthropic API)

ApexMCP tools integrate directly with the Claude API via MCP tool use:

import Anthropic from '@anthropic-ai/sdk';
 
const anthropic = new Anthropic();
 
const response = await anthropic.beta.messages.create({
  model: 'claude-sonnet-4-6',
  max_tokens: 4096,
  tools: [], // tools injected via MCP session
  mcp_servers: [
    {
      type: 'url',
      url: 'https://gateway.apexmcp.ai/mcp/acme-corp',
      name: 'apexmcp',
      authorization_token: process.env.APEXMCP_API_KEY,
    },
  ],
  messages: [{ role: 'user', content: 'Show me the 10 most recent pending orders.' }],
});