No results found. Try a different search term.

Developer Portal

Build on tchop

Integrate tchop into your AI workflows with the MCP Server, or call the GraphQL API directly.

GraphQL API β€” Stable MCP Server β€” Beta

Two ways to build

One set of credentials, two access paths, full feature coverage. Both paths use the same authentication headers, same operations, and the same permission model.

πŸ€–

MCP Server

Install the tchop MCP and call operations as natural-language tools from Claude, Cursor, or any MCP-compatible AI assistant. No code required.

Install MCP →
⚑

GraphQL API

POST GraphQL queries directly to your org's endpoint. Full schema access, precise field selection, and tight integration into any codebase.

GraphQL quickstart →

Same foundation: Both paths use identical authentication. Each operation in the API Reference shows both MCP and GraphQL usage.

Get Started

Authentication

Every API request β€” MCP or GraphQL β€” requires three authentication headers.

Get your credentials

To get started with the tchop API, contact our support team:
πŸ“§ support@tchop.io

Our team will provide you with:

  • x-tchop-webapp-organisation β€” your org subdomain
  • x-tchop-auth-token β€” your authentication token
  • x-tchop-api-client-id β€” your API client ID

Once you have these, you're ready to use both the MCP Server and GraphQL API.

Required headers

x-tchop-webapp-organisationStringYour org subdomain REQUIRED
x-tchop-auth-tokenStringYour authentication token. All permissions derive from this token's role. REQUIRED
x-tchop-api-client-idStringAPI client ID paired with your auth token REQUIRED

Security: Treat the auth token like a password. Never commit it to a repo, paste it in Slack, or include it in screenshots.

Get Started

MCP Server

Install the tchop MCP server and call any operation from an AI assistant using natural language.

What is MCP?

MCP (Model Context Protocol) is an open standard that lets AI assistants call external tools and APIs safely and reliably. The tchop MCP server wraps the GraphQL API and exposes every operation as a named, typed tool. Your AI assistant can discover tools automatically, call them with validated inputs, receive structured responses, and chain operations together β€” all without writing any code.

Compatible clients: Claude Desktop, Claude Code, Cursor, Windsurf, and any other assistant that supports MCP over stdio.

Prerequisites

  • Node.js 20 or later (node --version to check)
  • tchop API credentials β€” see Authentication
  • An MCP-compatible AI assistant

Install

git clone https://github.com/tchopio/MCP tchop-mcp
cd tchop-mcp
npm install && npm run build

Configure

Set these environment variables when adding the MCP server to your assistant:

TCHOP_ORG_URLStringFull org host, e.g. acme.tchop.io REQUIRED
TCHOP_AUTH_TOKENStringYour authentication token REQUIRED
TCHOP_API_CLIENT_IDStringYour API client ID REQUIRED
TCHOP_ORG_SUBDOMAINStringOverride subdomain for staging environments OPTIONAL

Use in Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "tchop": {
      "command": "node",
      "args": ["/absolute/path/to/tchop-mcp/dist/index.js"],
      "env": {
        "TCHOP_ORG_URL": "<your-org>.tchop.io",
        "TCHOP_AUTH_TOKEN": "<your-token>",
        "TCHOP_API_CLIENT_ID": "<your-client-id>"
      }
    }
  }
}

Restart Claude Desktop after saving.

Use in Claude Code

claude mcp add tchop -- node /absolute/path/to/tchop-mcp/dist/index.js \
  -e TCHOP_ORG_URL=<your-org>.tchop.io \
  -e TCHOP_AUTH_TOKEN=<your-token> \
  -e TCHOP_API_CLIENT_ID=<your-client-id>

Use in Cursor

Create or edit .cursor/mcp.json in your project:

{
  "mcpServers": {
    "tchop": {
      "command": "node",
      "args": ["/absolute/path/to/tchop-mcp/dist/index.js"],
      "env": {
        "TCHOP_ORG_URL": "<your-org>.tchop.io",
        "TCHOP_AUTH_TOKEN": "<your-token>",
        "TCHOP_API_CLIENT_ID": "<your-client-id>"
      }
    }
  }
}
Get Started

GraphQL API

Call the tchop GraphQL API directly with three authentication headers and a standard POST request.

Endpoint

POST https://<your-org>.<env>/api/graphql/webapp

Required headers

HeaderDescription
x-tchop-webapp-organisationYour org subdomain
x-tchop-auth-tokenYour authentication token
x-tchop-api-client-idYour API client ID

Example β€” curl

curl -X POST "https://<your-org>.tchop.io/api/graphql/webapp" \
  -H "content-type: application/json" \
  -H "x-tchop-webapp-organisation: <your-org>" \
  -H "x-tchop-auth-token: <your-token>" \
  -H "x-tchop-api-client-id: <your-client-id>" \
  -d '{"query":"query { organisation { id name subdomain } }"}'

Environments

SuffixEnvironmentExample endpoint
tchop-staging.comStaginghttps://acme.tchop-staging.com/api/graphql/webapp
.tchop.ioProductionhttps://acme.tchop.io/api/graphql/webapp
.tchop.itProduction (EU)https://acme.tchop.it/api/graphql/webapp
Concepts & Features

Organisation

An organisation is the root entity of every tchop deployment β€” one enterprise customer, one subdomain, one set of users.

It contains all channels, content, settings, and user management in a single isolated container.

tchop hierarchy

OrganisationTop-level container
ChannelAudience segment
MixContent feed
CardContent unit

API naming: In the API, a Mix is called a Story and a Card is called a StoryCard.

Subdomain

Each organisation has a globally unique subdomain used in all API requests as the x-tchop-webapp-organisation header value. The subdomain cannot be changed after users have joined without causing a breaking change.

Environments

SuffixEnvironmentGraphQL endpoint
tchop-staging.comStaginghttps://<org>.tchop-staging.com/api/graphql/webapp
.tchop.ioProductionhttps://<org>.tchop.io/api/graphql/webapp
.tchop.itProduction (EU)https://<org>.tchop.it/api/graphql/webapp

Basic settings

FieldTypeDescription
nameStringOrganisation display name shown in the app and admin console
subdomainStringURL-safe subdomain slug. ⚠ Breaking Cannot be changed after users have joined
localeIdStringDefault locale (e.g. en, de, fr)

Security

FieldTypeDescription
appLockEnabledBooleanRequire users to set a PIN lock when opening the app
twoFactorForceEnumEnforce 2FA for all org members. Options: DISABLED, OPTIONAL, REQUIRED_EMAIL, REQUIRED_SMS, REQUIRED_APP
sessionExpirationTimeIntWeb session expiry in seconds. 0 = never expire
sessionExpirationTimeAppIntMobile app session expiry in seconds. 0 = never expire

User onboarding

FieldTypeDescription
invitingIntoDefaultChannelsEnabledBooleanAuto-add new users to default channels on registration
defaultChannelIds[Int]Channel IDs that new users are added to automatically
defaultChannelUserRoleIdIntRole assigned to new users in default channels

Content policies

FieldTypeDescription
restrictDuplicateUrlOfCardsEnumPrevent duplicate URLs from being posted within a window. Options: DISABLED, LAST_1H, LAST_6H, LAST_12H, LAST_24H, LAST_2D, LAST_7D, LAST_30D, ALL_TIME

Chat

FieldTypeDescription
chatPromotionEnabledBooleanShow a banner promoting the chat feature to users who have not used it

App tabs

App tabs control the bottom navigation bar of the mobile app. Each tab can be enabled or disabled. 13 tab types are available:

Tab typeDescription
HOMEMain news feed
NOTIFICATIONSNotification center
CHATDirect and group messaging
LEADERBOARDUser engagement leaderboard
PROFILEUser profile page
SEARCHGlobal content search
EVENTSEvents calendar
DIRECTORYUser directory
LIBRARYSaved content library
CUSTOMCustom tab with configurable URL
CHANNELPinned channel tab
STORYPinned mix/story tab
WEBVIEWEmbedded web view

Configure tabs via appTabsSettings: an array of objects each with type (Enum), enabled (Boolean), and optional per-language labels.

Permissions (read-only)

FieldDescription
roleThe authenticated user's role in this organisation
uuidImmutable organisation UUID
idImmutable integer organisation ID
createdAtOrganisation creation timestamp

User roles

RoleScopeDescription
StaffCross-orgInternal tchop staff. Can create and delete organisations.
Org OwnerOrganisationFull control of the organisation including all settings and destructive operations.
Org AdminOrganisationManage org settings, channels, and users.
Channel AdminChannelFull control of specific channels they administer.
EditorChannelCreate, edit, and publish content in assigned channels.
Editor LimitedChannelCreate and edit drafts. Cannot publish.
ReaderChannelConsume content. No write operations.
Concepts & Features

Channels

πŸ“‹

Coming soon

Detailed documentation for Channels is being written.

Concepts & Features

Mixes

πŸ“‹

Coming soon

Detailed documentation for Mixes is being written.

Concepts & Features

Cards

πŸ“‹

Coming soon

Detailed documentation for Cards is being written.

Concepts & Features

Users

πŸ“‹

Coming soon

Detailed documentation for Users is being written.

Concepts & Features

Comments

πŸ“‹

Coming soon

Detailed documentation for Comments is being written.

Concepts & Features

Tags

πŸ“‹

Coming soon

Detailed documentation for Tags is being written.

Concepts & Features

Notifications

πŸ“‹

Coming soon

Detailed documentation for Notifications is being written.

Concepts & Features

Analytics

πŸ“‹

Coming soon

Detailed documentation for Analytics is being written.

Concepts & Features

Chat

πŸ“‹

Coming soon

Detailed documentation for Chat is being written.

API Reference

Organisation

Operations for managing your tchop organisation. Click any card to expand full documentation.

create_organisation
Mutation⚠ Staff
Minimum role: Staff only
Create a new tchop organisation with a unique subdomain.
get_organisation
Query
Minimum role: Reader
Get full org details including all settings and app tab configuration.

create_organisation

⚠ Staff only

Restricted operation: Only internal tchop staff tokens can call this operation. Enterprise customers receive a permission error. This is documented for completeness and for tchop internal tooling.

Inputs

nameStringOrganisation display name, 3–24 characters REQUIRED
subdomainStringURL-safe subdomain, 3–24 characters, alphanumeric only. Must be globally unique. REQUIRED

Example call

{
  "name": "create_organisation",
  "arguments": {
    "name": "Acme Corp",
    "subdomain": "acme"
  }
}

Example response

{
  "id": 142,
  "name": "Acme Corp",
  "subdomain": "acme",
  "url": "https://acme.tchop.io",
  "role": { "id": 2, "name": "Org Owner" }
}
Edge cases
CaseBehaviour
Subdomain already takenReturns SUBDOMAIN_TAKEN error
Name too short (< 3 chars)Validation error before request
Subdomain contains special charactersValidation error β€” alphanumeric only
Non-staff tokenReturns 403 permission error

Mutation

mutation CreateOrganisation($name: String!, $subdomain: String!) {
  organisationCreate(input: {
    fields: { name: $name, subdomain: $subdomain }
  }) {
    id
    name
    subdomain
    uuid
    role { id name }
  }
}

Variables

{ "name": "Acme Corp", "subdomain": "acme" }

Example response

{
  "data": {
    "organisationCreate": {
      "id": 142,
      "name": "Acme Corp",
      "subdomain": "acme",
      "uuid": "c7f2e14a-1234-5678-abcd-ef0123456789",
      "role": { "id": 2, "name": "Org Owner" }
    }
  }
}

get_organisation

No inputs required. The org is derived from your TCHOP_ORG_URL.

Example call

{ "name": "get_organisation", "arguments": {} }

Example response

{
  "id": 142,
  "uuid": "c7f2e14a-1234-5678-abcd-ef0123456789",
  "name": "Acme Corp",
  "subdomain": "acme",
  "localeId": "en",
  "appLockEnabled": false,
  "chatPromotionEnabled": true,
  "twoFactorForce": "DISABLED",
  "sessionExpirationTime": 0,
  "sessionExpirationTimeApp": 0,
  "role": { "id": 2, "name": "Org Owner" },
  "appTabsSettings": [
    { "type": "HOME", "enabled": true },
    { "type": "NOTIFICATIONS", "enabled": true },
    { "type": "CHAT", "enabled": false }
  ]
}
Edge cases
CaseBehaviour
Invalid or expired tokenReturns 401 authentication error
Wrong org header valueReturns 404 organisation not found

Query

query GetOrganisation {
  organisation {
    id
    uuid
    name
    subdomain
    localeId
    appLockEnabled
    chatPromotionEnabled
    twoFactorForce
    sessionExpirationTime
    sessionExpirationTimeApp
    invitingIntoDefaultChannelsEnabled
    defaultChannelIds
    defaultChannelUserRoleId
    restrictDuplicateUrlOfCards
    role { id name }
    appTabsSettings {
      type
      enabled
      labels { language label }
    }
  }
}
update_organisation
Mutation
Minimum role: Org Admin
Update organisation settings. All 14 fields are optional β€” only what you provide is changed.
delete_organisation
Mutation⚠ Staff
Minimum role: Staff only
Permanently delete an organisation and all its data. Irreversible.

update_organisation

All fields optional. Only fields you include are changed.

Inputs

nameStringOrganisation display name OPTIONAL
localeIdStringDefault locale code OPTIONAL
appLockEnabledBooleanEnable app lock PIN screen OPTIONAL
twoFactorForceEnumDISABLED | OPTIONAL | REQUIRED_EMAIL | REQUIRED_SMS | REQUIRED_APP OPTIONAL
sessionExpirationTimeIntWeb session expiry in seconds. 0 = never OPTIONAL
sessionExpirationTimeAppIntApp session expiry in seconds. 0 = never OPTIONAL
invitingIntoDefaultChannelsEnabledBooleanAuto-add new users to default channels OPTIONAL
defaultChannelIds[Int]Channel IDs for new user auto-join OPTIONAL
defaultChannelUserRoleIdIntRole ID for default channel membership OPTIONAL
restrictDuplicateUrlOfCardsEnumDISABLED | LAST_1H | LAST_6H | LAST_12H | LAST_24H | LAST_2D | LAST_7D | LAST_30D | ALL_TIME OPTIONAL
chatPromotionEnabledBooleanShow chat promotion banner OPTIONAL
appTabsSettingsArrayApp tab configuration β€” array of objects with type, enabled, and optional labels OPTIONAL

Example call

{
  "name": "update_organisation",
  "arguments": {
    "twoFactorForce": "REQUIRED_APP",
    "appLockEnabled": true,
    "chatPromotionEnabled": false
  }
}

Example response

{
  "id": 142,
  "name": "Acme Corp",
  "twoFactorForce": "REQUIRED_APP",
  "appLockEnabled": true,
  "chatPromotionEnabled": false
}
Edge cases
CaseBehaviour
Invalid enum for twoFactorForceValidation error before request
Insufficient role (Editor or Reader)Returns 403 permission error
Empty arguments objectSucceeds with no changes applied
Invalid defaultChannelIdsError if IDs don't belong to this org

Mutation

mutation UpdateOrganisation(
  $name: String,
  $twoFactorForce: TwoFactorForceType,
  $appLockEnabled: Boolean,
  $chatPromotionEnabled: Boolean,
  $appTabsSettings: [AppTabSettingsInput]
) {
  organisationUpdate(input: {
    fields: {
      name: $name
      twoFactorForce: $twoFactorForce
      appLockEnabled: $appLockEnabled
      chatPromotionEnabled: $chatPromotionEnabled
      appTabsSettings: $appTabsSettings
    }
  }) {
    id name twoFactorForce appLockEnabled chatPromotionEnabled
  }
}

Variables

{
  "twoFactorForce": "REQUIRED_APP",
  "appLockEnabled": true
}

delete_organisation

⚠ Staff only

Irreversible. Permanently deletes the organisation, all channels, all content, and all users. Cannot be undone.

Inputs

confirmBooleanMust be explicitly true. The MCP will prompt for confirmation before executing. REQUIRED

Example call

{
  "name": "delete_organisation",
  "arguments": { "confirm": true }
}
Edge cases
CaseBehaviour
confirm not set or falseOperation aborted β€” explicit confirmation required
Non-staff tokenReturns 403 permission error immediately
Organisation not foundReturns 404 not found

Mutation

mutation DeleteOrganisation($confirm: Boolean!) {
  organisationDelete(input: { confirm: $confirm }) {
    success
  }
}

Variables

{ "confirm": true }
API Reference

Channels

πŸ”§

Coming soon

Channels API operations are being documented.

API Reference

Mixes

πŸ”§

Coming soon

Mixes API operations are being documented.

API Reference

Cards

πŸ”§

Coming soon

Cards API operations are being documented.

API Reference

Users

πŸ”§

Coming soon

Users API operations are being documented.

API Reference

Comments

πŸ”§

Coming soon

Comments API operations are being documented.

API Reference

Tags

πŸ”§

Coming soon

Tags API operations are being documented.

API Reference

Notifications

πŸ”§

Coming soon

Notifications API operations are being documented.

API Reference

Analytics

πŸ”§

Coming soon

Analytics API operations are being documented.

API Reference

Chat

πŸ”§

Coming soon

Chat API operations are being documented.