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/sdkConnect 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 mcpConnect 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-sdkConnect 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.' }],
});