Client Examples
Ready-to-use configurations for popular MCP clients. Both Claude and ChatGPT connect the same way — with just a URL, no API key or config file — and both show up (and can be individually revoked) under heycreo → Account → Connected Apps once connected.
Claude
Custom Connector
Works for both claude.ai (web) and Claude Desktop: no API key, no config file, no terminal.
- In Claude, click your account name (bottom left) → Settings → Connectors
- Click Add connector, then Add custom connector
- Enter a name (e.g. "heycreo") and the Remote MCP server URL:
https://app.heycreo.io/api/mcp - Leave Client ID and Client Secret empty. heycreo registers Claude automatically via Dynamic Client Registration, so no manual credentials are needed
- Claude opens a browser window; log in to heycreo if you aren't already
- On the consent screen, pick which organization Claude should access, then Allow access
- You're redirected back to Claude, and the heycreo tools are now available in this conversation
To change organizations later, just ask Claude to switch. It will call the switch-organization
tool without requiring you to reconnect. Manage or revoke previously connected apps any time from
heycreo → Account → Connected Apps.
ChatGPT
Custom Connector
ChatGPT connects the same way as Claude: through a custom connector you set up once. No API key, no config file. It currently requires switching on ChatGPT's Developer mode first, since custom connectors are an advanced/developer-facing feature there.
- In ChatGPT, open Settings
- Go to Apps (in the sidebar of the Settings window)
- Scroll down to Advanced settings and turn on Developer mode. This unlocks the option to add your own connectors
- Go back to Apps, then click Create app
- Enter a name, e.g. "heycreo"
- Under Connection, choose Server URL
- Enter the server URL:
https://app.heycreo.io/api/mcp - Tick/confirm the security warning shown at the bottom of the form. ChatGPT shows this for every custom connector, not specifically heycreo; it's just reminding you to only connect apps you trust
- Click Create
- ChatGPT now opens heycreo's login/consent screen; log in if you aren't already, pick which organization ChatGPT should access, then Allow access
- You're redirected back to ChatGPT, and the heycreo tools are now available in this conversation
To change organizations later, just ask ChatGPT to switch. It will call the switch-organization
tool without requiring you to reconnect. Manage or revoke previously connected apps any time from
heycreo → Account → Connected Apps.
TypeScript (custom client)
Using the MCP TypeScript SDK with SSE transport:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
const transport = new SSEClientTransport(
new URL("https://app.heycreo.io/api/sse"),
{
requestInit: {
headers: {
"Authorization": "Bearer heycreo_your_api_key",
"X-heycreo-Org": "your-org-slug",
},
},
}
);
const client = new Client({ name: "my-app", version: "1.0.0" });
await client.connect(transport);
// List available tools
const tools = await client.listTools();
console.log(tools);
// Call a tool
const result = await client.callTool({
name: "get-templates",
arguments: {},
});
console.log(result);
Using Streamable HTTP transport:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://app.heycreo.io/api/mcp"),
{
requestInit: {
headers: {
"Authorization": "Bearer heycreo_your_api_key",
"X-heycreo-Org": "your-org-slug",
},
},
}
);
const client = new Client({ name: "my-app", version: "1.0.0" });
await client.connect(transport);
Python
Using the MCP Python SDK:
from mcp import ClientSession
from mcp.client.sse import sse_client
async def main():
headers = {
"Authorization": "Bearer heycreo_your_api_key",
"X-heycreo-Org": "your-org-slug",
}
async with sse_client(
url="https://app.heycreo.io/api/sse",
headers=headers,
) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# List tools
tools = await session.list_tools()
print(tools)
# Call a tool
result = await session.call_tool(
"get-templates",
arguments={},
)
print(result)
Editing a design in Studio
Beyond reading and creating data, an assistant can read and edit a heycreo design. You target a
document by id: a template (templateId, from get-templates) or a free design (designId).
Edits are applied and persisted server-side. No editor tab needs to be open; if someone is
viewing the design, they see the changes appear live.
A minimal editing loop:
1. studio_get_capabilities() → learn the model + tool catalog (once)
2. studio_get_document({ templateId }) → read element IDs + active page
3. studio_call({ templateId, tool, args }) → apply an edit
4. studio_get_screenshot({ templateId }) → verify visually
See the Studio tools reference for the full workflow and the
studio_call sub-tool catalog.
cURL (debugging)
For quick testing, you can interact with the Streamable HTTP endpoint directly:
curl -X POST https://app.heycreo.io/api/mcp \
-H "Authorization: Bearer heycreo_your_api_key" \
-H "X-heycreo-Org: your-org-slug" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'