API, MCP and Agent Skill
Connect Codex, Claude Code or Cursor to your Sobes application tracker, meetings, notes and contexts
With MCP and the REST API, an AI agent such as Codex, Claude Code or Cursor can manage your application tracker, read your saved meetings and contexts, and add to your notes. For example: "move the Ozon card to Finals", "show my funnel for the last month", "review my answers from the last interview", "save the review to my notes". An active subscription is required.
1. Create a token
On sobes.tech, open Account → Integrations → API & MCP and click Create token. Set a name, permissions and an expiry; the default is 90 days.
| Permission | What it gives |
|---|---|
| Read tracker | The board, cards, archive, statistics and reminders. This includes the titles, scores and verdict of meetings attached to cards. |
| Edit tracker | Creating, editing, moving, archiving and deleting cards and columns, attaching meetings to cards. Includes reading the tracker. |
| Read meetings, summaries and transcripts | The list of meetings, their summaries and the full transcript with the chat. |
| Read notes | The list of notes and folders and the text of any note, test projects included. |
| Create and edit notes | Creating and editing regular notes. Includes reading notes. |
| Read contexts | The list of contexts, all their fields and which one is active. |
- The token is shown only once: copy it right away.
- Create a separate token for each app. That way you can revoke any of them without touching the others, and revocation takes effect immediately.
- The agent sees only the tools the token has permissions for.
- Only the tracker and meeting permissions are checked by default. An issued token's permissions can't be changed: to give access to notes or contexts, create a new token.
- If your subscription ends, tokens stop working and start working again after renewal.
2. Connect MCP
Pass the token to the client's process in the SOBES_API_TOKEN environment variable. Don't put the token itself in the config file. Then add the configuration and restart the client. The same configurations are shown in the dashboard under Integrations → API & MCP.
Codex: ~/.codex/config.toml
[mcp_servers.sobes]
url = "https://backend.sobes.tech/mcp"
bearer_token_env_var = "SOBES_API_TOKEN"Claude Code: .mcp.json in the project root
{
"mcpServers": {
"sobes": {
"type": "http",
"url": "https://backend.sobes.tech/mcp",
"headers": { "Authorization": "Bearer ${SOBES_API_TOKEN}" }
}
}
}Cursor: ~/.cursor/mcp.json
{
"mcpServers": {
"sobes": {
"url": "https://backend.sobes.tech/mcp",
"headers": { "Authorization": "Bearer ${env:SOBES_API_TOKEN}" }
}
}
}3. Install the skill
The skill explains to the agent how to work with the Sobes tracker and meetings properly: in what order to call tools, how to read long transcripts and how to avoid creating duplicates. One file works for all three clients. Download SKILL.md, save it at the path below and restart the client.
| Client | Where to save it |
|---|---|
| Codex | ~/.agents/skills/sobes-tech/SKILL.md |
| Claude Code | ~/.claude/skills/sobes-tech/SKILL.md |
| Cursor | ~/.cursor/skills/sobes-tech/SKILL.md |
What the agent can do
In the tracker, the agent can do everything you do by hand: read the board, cards, their history, archive and statistics, export statistics to PDF, create and edit cards and columns, import cards in bulk, move cards between stages, attach meetings and set up reminders.
Meetings are read only: the list, summaries and the transcript of all subchats, including messages from before a context reset. The agent can't create or delete meetings or start summary generation. Images, video, model reasoning and tool calls aren't available through the API.
Contexts are read only too. The agent can create and edit notes, but test projects are read only: only "Use in RAG" and the folder can be changed on them.
With permission to edit notes, the agent affects Copilot's answers: notes it creates go into RAG by default, and Copilot will rely on them in meetings. Give this permission only to an agent whose content you trust.
To avoid overwriting an edit made in the app, the agent can pass the version of the note it read: if the note changed in the meantime, its edit is rejected.
Reading changes nothing: an empty board isn't created on its own and missing summaries aren't generated. To set up a board with the default stages and cards from past meetings with vacancies, the agent has a separate tracker_initialize command.
Deleting a card erases its history and removes it from the funnel statistics; attached meetings are kept. If a card is simply no longer needed on the board, archive it instead.
REST API
MCP and REST are built on the same operations. Full description: OpenAPI.
curl --fail-with-body --silent --show-error \
-H "Authorization: Bearer $SOBES_API_TOKEN" \
https://backend.sobes.tech/api/v1/tracker/boardRead tracker
| MCP | REST |
|---|---|
tracker_get_board | GET /tracker/board |
tracker_list_columns | GET /tracker/columns |
tracker_list_cards, tracker_get_card | GET /tracker/cards, GET /tracker/cards/{id} |
tracker_list_archive | GET /tracker/archive |
tracker_get_settings | GET /tracker/settings |
tracker_get_card_history | GET /tracker/cards/{id}/history |
tracker_get_stats, tracker_export_stats_pdf | GET /tracker/stats, GET /tracker/stats/pdf |
Edit tracker
| MCP | REST |
|---|---|
tracker_initialize | POST /tracker/initialize |
tracker_create_card, tracker_update_card | POST /tracker/cards, PATCH /tracker/cards/{id} |
tracker_move_card, tracker_archive_card | PATCH /tracker/cards/{id}/move, PATCH /tracker/cards/{id}/archive |
tracker_delete_card | DELETE /tracker/cards/{id} |
tracker_import_cards | POST /tracker/cards/import |
tracker_create_column, tracker_update_column | POST /tracker/columns, PUT /tracker/columns/{id} |
tracker_reorder_columns, tracker_delete_column | PATCH /tracker/columns/reorder, DELETE /tracker/columns/{id} |
tracker_archive_column_cards | POST /tracker/columns/{id}/archive-cards |
tracker_attach_meeting, tracker_detach_meeting | POST /tracker/cards/{id}/meetings, DELETE /tracker/cards/{id}/meetings/{meetingId} |
tracker_update_settings | PUT /tracker/settings |
Read meetings
| MCP | REST |
|---|---|
list_meetings, get_meeting | GET /meetings, GET /meetings/{id} |
get_meeting_summary, get_meeting_transcript | GET /meetings/{id}/summary, GET /meetings/{id}/transcript |
Notes
| MCP | REST |
|---|---|
list_notes, list_note_folders | GET /notes, GET /notes/folders |
get_note | GET /notes/{id} |
create_note, update_note | POST /notes, PATCH /notes/{id} |
Contexts
| MCP | REST |
|---|---|
list_contexts, get_context | GET /contexts, GET /contexts/{id} |
Errors and limits
| Code | Meaning |
|---|---|
| 401 | The token is invalid, expired or revoked. |
| 403 | The token lacks the required permission, or the subscription has ended. |
| 404 | The object wasn't found. Other users' objects also return 404. |
| 409 | A retry with the same key but a different request body, the transcript changed while being read, or the note changed after the agent read it. In the last two cases, read the data again. |
| 429 | More than 120 requests per minute per token or 600 per account. Retry after the time in the Retry-After header. |
In MCP, errors from the tools themselves come back as the result text rather than an HTTP code, for example {"error":"card_not_found"}.
Creating a card, column or note accepts requestId or the Idempotency-Key header. If you repeat the request with the same key within 24 hours, you get the previous result and no duplicate is created.