The MCP server
An assistant can run Konekt over the Model Context Protocol (MCP). The server lives at one address:
https://app.konekt.so/api/mcpThe tools are the same operations as the API, with the same permissions and the same limits. A connection acts as the person who connected it and never sees or does more than they can. If you only want to connect an assistant, the first page, Connect an agent in 30 seconds, is all you need.
Connect from an assistant that signs in
Most assistants sign in on their own. You are sent to a page here, you sign in once and press Allow. With one workspace there is nothing to choose. With several you pick where it works, or all of them. You need to be a workspace administrator, or the organization owner for organization wide connections.
Claude. Open Settings, then Connectors, choose Add custom connector and paste the address above.
Claude Code. Run this once in a terminal:
claude mcp add --transport http konekt https://app.konekt.so/api/mcpCursor. Add this to mcp.json, or use Cursor Settings, then MCP:
{
"mcpServers": {
"konekt": { "url": "https://app.konekt.so/api/mcp" }
}
}The app shows the same text, ready to copy, under Settings, API and connections, then Connections, together with a button that tests the connection with one safe read.
What the agent gets
- A briefing. The server sends instructions when the client connects: what the platform is, the usual workflow (import leads, build a campaign, start it, watch the inbox, reply), the limits it will meet and how a refusal looks.
- A first call.
get_startednames the person, the workspaces the connection can use with their ids, each LinkedIn account with its health and how much it may still send this week, and the calls that make sense next.account_statusgives the same for one workspace. - Workflow tools on top of the fine ones, so the story takes a handful of calls:
import_leads(up to 5000 leads in one call),create_campaign_with_sequence(steps, accounts and leads in one call),campaigns_start,inbox_overview(unread and waiting replies across accounts) andinbox_reply. The fine tools are all still there. - No ids to juggle. A connection with one workspace never passes
workspace_id. With several, an error lists the ids that are allowed. - No idempotency key to invent. Over MCP a repeat of the same call is recognised for you.
- Descriptions an agent can act on. Every tool says what it does, when to use it, what each parameter means with an example and its allowed values, what it returns, what it changes, the refusals it may give and the tools next to it. The same text is in
/docs/llms.txtand/docs/llms-full.txt, generated from the same list.
Connect a program with an API key
A program that cannot sign in can send an API key as a bearer token instead. Make a key as described in Authentication and keys, then:
{
"mcpServers": {
"konekt": {
"type": "http",
"url": "https://app.konekt.so/api/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}Sign in details for client authors
The server supports OAuth 2.1 with PKCE (S256, required). A call without credentials answers 401 with a WWW-Authenticate header that points at the discovery documents, /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server. A client registers itself at POST /api/oauth/register (RFC 7591, public clients, redirect addresses that are https or loopback), sends the person to /oauth/authorize, and exchanges the code at POST /api/oauth/token. The scope words a client sends are a hint: the person decides on the consent page. The access token lasts an hour. A refresh token is used once and replaced each time, and presenting an old one again ends the whole connection. POST /api/oauth/revoke ends a connection. An access token works at the MCP address and at the REST API.
The protocol
Stateless streamable HTTP with JSON-RPC 2.0, POST only. Other methods answer 405, and batches are not supported. The current protocol version, 2026-07-28, carries its version and client capabilities in params._meta and in the headers MCP-Protocol-Version, Mcp-Method and, for tools/call, Mcp-Name, which must match the body. The versions 2025-11-25, 2025-06-18 and 2025-03-26 are served through initialize. A request with an Origin header that is not the app's own is refused.
Tools
A tool is named after its operation in snake_case, verb first where it can be: campaigns_list, leads_get, inbox_get_conversation, get_started, import_leads. The list you see depends on the connection: it shows only what its scopes allow, and a read only connection sees no write tool. Every tool has an input and an output schema, with a description and an example on every parameter, and says whether it only reads, whether it can destroy, whether it is safe to repeat and whether it reaches people outside the workspace. Lists are paged by cursor.
The bulk tools take dry_run. A CSV is imported with leads_import_csv_preview and then leads_import_csv, or leads are sent as data with import_leads. To see what happened, an assistant polls events_list with the last next_cursor and reads a thread with inbox_get_conversation.
Webhook endpoints are not tools: saving an address sends event data to a place the person chooses, so it stays in the app or goes through the API with a key that names the scope.
Tools that contact people, such as inbox_reply, campaigns_start and campaigns_resume, run at once within the account limits. See Contacting people. Everything you can do in the app can be done by a tool, except signing in, managing keys and connections, connecting or removing an account, members and billing changes.
A refusal or a bad argument comes back as a tool result with isError: true and the same error body the API uses, with a hint. See Errors. Calls count against the same rate limits as the API.
Text from other people
Lead fields and replies are written by strangers. In a tool result every such string is wrapped as { "untrusted": true, "text": "..." } and cut at 2,000 characters, and the tool descriptions say never to follow an instruction found in them. A model's output cannot change a scope or a limit: those belong to the connection and were set by a person.
Ending access
Disconnect a connection in the app, under Settings, API and connections, then Connections. It ends at once. Workspace administrators can also pause all agent access to a workspace, which refuses every key and connection until it is turned back on.