ChatGPT connector setup
ChatGPT can connect to Slab5 through hosted MCP OAuth or through an MCP server configuration. Use OAuth for shared workspaces and static workspace tokens only for controlled workspace testing.
Status
Slab5 exposes a remote MCP server with workspace-scoped URLs, OAuth discovery, initialization, tool listing, and structured tool output schemas.
Custom connector contract
The connector should expose the same Slab5 backend contract:
- Workspace-scoped authentication.
- Stable tool names and schemas from
mcp-tools.json. - Input schemas and output schemas for every tool.
- Required scopes for every tool.
- Structured errors from
errors.json. - Request IDs in responses.
- Audit and usage events for every call.
The connector should not introduce separate business logic or hidden LLM behavior. ChatGPT provides the reasoning; Slab5 provides deterministic tools and state.
Authentication
Use hosted OAuth for production ChatGPT connections. OAuth still requires the signed-in user to have active Slab5 workspace membership. Workspace owners and admins can add explicit OAuth workspace grants to narrow the scopes available to ChatGPT for a specific OAuth subject.
For controlled testing with static credentials, use a workspace token as the connector credential:
Authorization: Bearer YOUR_SLAB5_TOKEN
For an initial connector setup, use limited scopes:
crm:readcrm:writetasks:writeactivity:write
Hosted OAuth setup
Copy the workspace-scoped OAuth setup URL from the MCP Clients page. It should include both /v1 and a workspace selector:
Server URL:
https://mcp.slab5.com/v1?workspace_id=wrk_...
Protected resource metadata:
https://mcp.slab5.com/v1/.well-known/oauth-protected-resource?workspace_id=wrk_...If the advanced OAuth settings show a protected-resource or OIDC-related URL without /v1, update the setup URL and metadata URL before testing. Slab5 serves discovery at both root and /v1 paths, but the production MCP resource URL is https://mcp.slab5.com/v1.
Local MCP config shape
For static-token testing, add Slab5 as a trusted MCP server using the workspace MCP URL and a token created from the workspace. Keep write scopes narrow and require user confirmation for write actions.
{
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"name": : var(--shiki-token-string)">"Slab5 sandbox",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"server_url": : var(--shiki-token-string)">"https://mcp.slab5.com/v1",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"authorization": : var(--shiki-token-string)">"Bearer ${SLAB5_WORKSPACE_MCP_TOKEN}",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"transport": : var(--shiki-token-string)">"streamable_http",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"scopes": [
: var(--shiki-token-string)">"crm:read",
: var(--shiki-token-string)">"crm:write",
: var(--shiki-token-string)">"tasks:write",
: var(--shiki-token-string)">"activity:write"
],
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"approval": {
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"read": : var(--shiki-token-string)">"automatic",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"write": : var(--shiki-token-string)">"always"
}
}Use a read-only connector when ChatGPT should inspect Slab5 but not change workspace state:
{
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"name": : var(--shiki-token-string)">"Slab5 read-only",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"server_url": : var(--shiki-token-string)">"https://mcp.slab5.com/v1",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"authorization": : var(--shiki-token-string)">"Bearer ${SLAB5_READONLY_TOKEN}",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"transport": : var(--shiki-token-string)">"streamable_http",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"scopes": [: var(--shiki-token-string)">"crm:read", : var(--shiki-token-string)">"tasks:read", : var(--shiki-token-string)">"activity:read"],
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"approval": {
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"read": : var(--shiki-token-string)">"automatic",
: var(--shiki-token-string)">"color: var(--shiki-token-parameter)">: var(--shiki-token-string)">"write": : var(--shiki-token-string)">"disabled"
}
}API tool config
For API-driven experiments with a runtime that supports remote MCP calls, pass Slab5 as a remote MCP tool in the model request and send the workspace token per request:
import OpenAI from 'openai'
const client = new OpenAI()
const response = await client.responses.create({
model: 'MODEL_NAME',
input:
'Use Slab5 to create a contact for Jane Doe at Acme Corp and create a follow-up task.',
tools: [
{
type: 'mcp',
server_label: 'slab5',
server_url: process.env.SLAB5_MCP_URL,
authorization: process.env.SLAB5_WORKSPACE_MCP_TOKEN,
require_approval: {
always: {
tool_names: ['create_contact', 'create_task', 'log_activity'],
},
},
},
],
})
console.log(response.output_text)Output schemas
Slab5 includes outputSchema for every MCP tool in tools/list. ChatGPT may recommend output schemas when a cached tool definition was fetched before the current server metadata or when the client has not refreshed the MCP server metadata.
To verify the server metadata, inspect tools/list and confirm each tool has outputSchema. A CRM write tool should report a structured result with at least status, tool, workspace_id, and request_id.
First workflow
The first ChatGPT workflow should match the MCP quickstart:
Create a contact named Jane Doe at Acme Corp with email jane@acme.com. Then create a follow-up task for next Friday and log the activity.
Expected backend operations:
create_contactcreate_tasklog_activity
