Single Toolkit MCP

Markdown

For most use cases, we recommend using the quickstart. This provides dynamic tool access and a much better MCP experience with context management handled by us.

Install the SDK

pip install devcaster
npm install @devcaster/core

Create an MCP server

Initialize Devcaster

from devcaster import Devcaster

devcaster = Devcaster(api_key="YOUR_API_KEY")
import { Devcaster } from '@devcaster/core';

const devcaster = new Devcaster({
  apiKey: process.env.DEVCASTER_API_KEY
});

Create server configuration

Before you begin: Create an auth configuration for your toolkit.

server = devcaster.mcp.create(
    name="my-gmail-server",
    toolkits=[{
        "toolkit": "gmail",
        "auth_config": "ac_xyz123"
    }],
    allowed_tools=["GMAIL_FETCH_EMAILS", "GMAIL_SEND_EMAIL"]
)

print(f"Server created: {server.id}")
import { Devcaster } from '@devcaster/core';
const devcaster = new Devcaster({ apiKey: process.env.DEVCASTER_API_KEY });
// ---cut---
const server = await devcaster.mcp.create("my-gmail-server", {
  toolkits: [
    {
      authConfigId: "ac_xyz123",
      toolkit: "gmail"
    }
  ],
  allowedTools: ["GMAIL_FETCH_EMAILS", "GMAIL_SEND_EMAIL"]
});

console.log(`Server created: ${server.id}`);

You can also create and manage MCP configs from the Devcaster dashboard.

Generate user URLs

Users must authenticate with the toolkits configured in your MCP server first. See authentication for details.

instance = devcaster.mcp.generate(user_id="user-123", mcp_config_id=server.id)

print(f"MCP Server URL: {instance['url']}")
import { Devcaster } from '@devcaster/core';
const devcaster = new Devcaster({ apiKey: process.env.DEVCASTER_API_KEY });
const server = { id: 'my-gmail-server' };
// ---cut---
const instance = await devcaster.mcp.generate("user-123", server.id);

console.log("MCP Server URL:", instance.url);

Use with AI providers

from openai import OpenAI

client = OpenAI(api_key="your-openai-api-key")

mcp_server_url = "https://backend.devcaster.dev/v3/mcp/YOUR_SERVER_ID?user_id=YOUR_USER_ID"

response = client.responses.create(
    model="gpt-5",
    tools=[{
        "type": "mcp",
        "server_label": "devcaster-server",
        "server_url": mcp_server_url,
        "require_approval": "never",
    }],
    input="What are my latest emails?",
)

print(response.output_text)
from anthropic import Anthropic

client = Anthropic(api_key="your-anthropic-api-key")

mcp_server_url = "https://backend.devcaster.dev/v3/mcp/YOUR_SERVER_ID?user_id=YOUR_USER_ID"

response = client.beta.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1000,
    messages=[{"role": "user", "content": "What are my latest emails?"}],
    mcp_servers=[{
        "type": "url",
        "url": mcp_server_url,
        "name": "devcaster-mcp-server"
    }],
    betas=["mcp-client-2025-04-04"]
)

print(response.content)
import { MCPClient } from "@mastra/mcp";
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";

const MCP_URL = "https://backend.devcaster.dev/v3/mcp/YOUR_SERVER_ID?user_id=YOUR_USER_ID";

const client = new MCPClient({
  id: "mcp-client",
  servers: {
    devcaster: { url: new URL(MCP_URL) },
  }
});

const agent = new Agent({
  id: "assistant",
  name: "Assistant",
  instructions: "You are a helpful assistant that can read and manage emails.",
  model: openai("gpt-4-turbo"),
  tools: await client.getTools()
});

const res = await agent.generate("What are my latest emails?");
console.log(res.text);

Server management

List servers

servers = devcaster.mcp.list()
print(f"Found {len(servers['items'])} servers")

# Filter by toolkit
gmail_servers = devcaster.mcp.list(toolkits="gmail", limit=20)
import { Devcaster } from '@devcaster/core';
const devcaster = new Devcaster({ apiKey: 'your_api_key' });
// ---cut---
const servers = await devcaster.mcp.list({
  toolkits: [],
  authConfigs: [],
  limit: 10,
  page: 1
});
console.log(`Found ${servers.items.length} servers`);

// Filter by toolkit
const gmailServers = await devcaster.mcp.list({
  toolkits: ["gmail"],
  authConfigs: [],
  limit: 20,
  page: 1
});

Get server details

server = devcaster.mcp.get("mcp_server_id")
print(f"Server: {server.name}")
import { Devcaster } from '@devcaster/core';
const devcaster = new Devcaster({ apiKey: 'your_api_key' });
// ---cut---
const server = await devcaster.mcp.get("mcp_server_id");
console.log(`Server: ${server.name}`);

Update a server

updated = devcaster.mcp.update(
    server_id="mcp_server_id",
    name="updated-name",
    allowed_tools=["GMAIL_FETCH_EMAILS", "GMAIL_SEARCH_EMAILS"]
)
import { Devcaster } from '@devcaster/core';
const devcaster = new Devcaster({ apiKey: 'your_api_key' });
// ---cut---
const updated = await devcaster.mcp.update("mcp_server_id", {
  name: "updated-name",
  allowedTools: ["GMAIL_FETCH_EMAILS", "GMAIL_SEARCH_EMAILS"]
});

Delete a server

result = devcaster.mcp.delete("mcp_server_id")
if result['deleted']:
    print("Server deleted")
import { Devcaster } from '@devcaster/core';
const devcaster = new Devcaster({ apiKey: 'your_api_key' });
// ---cut---
const result = await devcaster.mcp.delete("mcp_server_id");
if (result.deleted) {
  console.log("Server deleted");
}

Next steps