Schema management
add_tag, get_tag, edit_tag, delete_tag, get_tags
Thogits exposes a Model Context Protocol (MCP) server that lets AI assistants create tags, manage thogits, run filters, and more — all through natural language. This guide covers connecting Claude and custom MCP clients to your Thogits instance.
Add Thogits to your project’s .mcp.json file:
{ "mcpServers": { "thogits": { "type": "sse", "url": "https://app.thogits.com/api/mcp/sse" } }}Claude Code will automatically discover the available tools on startup. You can then ask Claude to interact with your Thogits instance conversationally — “create a Task tag with status and priority fields”, “show me all overdue tasks”, etc.
Add the same configuration in Claude Desktop’s settings (Settings > Developer > MCP Servers):
{ "mcpServers": { "thogits": { "type": "sse", "url": "https://app.thogits.com/api/mcp/sse" } }}After saving, restart Claude Desktop. The Thogits tools will appear in the tools menu.
Thogits exposes these MCP tools:
Schema management
add_tag, get_tag, edit_tag, delete_tag, get_tags
Thogit CRUD
add_thogit, edit_thogit, delete_thogit, get_thogit, get_thogits
Tag operations
apply_tag_to_thogit, update_tag_field_values, remove_tag_from_thogit
Bulk operations
bulk_add_thogits, bulk_delete_thogits, bulk_apply_tag, bulk_remove_tag, bulk_update_field_values
Query tools
validate_filter, explain_query, get_outdated_thogit_tags
Views
create_view, get_view, list_views, update_view, delete_view
If you are building your own MCP client, here is the connection protocol.
Connect to the SSE endpoint. The server sends an endpoint event with the URL for sending JSON-RPC requests.
curl -N https://app.thogits.com/api/mcp/sse \ -b cookies.txt -c cookies.txtThe server responds with a stream. The first event contains the message endpoint:
event: endpointdata: /api/mcp/message?session_id=SESSION_IDSave this URL — all JSON-RPC requests go to it.
POST a JSON-RPC initialize request to the endpoint URL from step 1.
curl -X POST "https://app.thogits.com/api/mcp/message?session_id=SESSION_ID" \ -H "Content-Type: application/json" \ -b cookies.txt -c cookies.txt \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "my-client", "version": "1.0.0"} } }'The response (on the SSE stream) contains server capabilities and protocol version.
curl -X POST "https://app.thogits.com/api/mcp/message?session_id=SESSION_ID" \ -H "Content-Type: application/json" \ -b cookies.txt -c cookies.txt \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {} }'The response lists all tools with their names, descriptions, and input schemas.
Execute a tool by sending a tools/call request with the tool name and arguments.
curl -X POST "https://app.thogits.com/api/mcp/message?session_id=SESSION_ID" \ -H "Content-Type: application/json" \ -b cookies.txt -c cookies.txt \ -d '{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "get_tags", "arguments": {} } }'Tool results arrive as SSE events on the open connection.
This shows an AI assistant setting up a complete schema and populating it with data.
Prompt: “Create a project tracking system with Tasks, Projects, and People.”
The AI would call these tools in sequence:
1. get_tags # Check what tags already exist2. add_tag (Person) # Create Person tag with department, role fields3. add_tag (Project) # Create Project tag with name, lead (Reference), status4. add_tag (Task) # Create Task tag with status, priority, assignee, project5. bulk_add_thogits # Create initial people, projects, and tasksThe AI discovers existing schemas first, creates tags that do not exist yet, then populates data in bulk.
Prompt: “Show me all tasks that are past due and not done.”
1. get_tags # Discover Task tag schema to know field names2. get_thogits # Filter with: # {"and": [ # {"has_tag": "Task"}, # {"Task.due_date": {"lt": "2026-04-06"}}, # {"not": {"Task.status": {"match": "Done"}}} # ]}Prompt: “Move all tasks in Sprint 12 to Done.”
1. get_tags # Confirm Task tag has status and sprint fields2. get_thogits # Preview: find tasks in Sprint 12 # {"and": [ # {"has_tag": "Task"}, # {"Task.sprint": "SPRINT_12_ID"} # ]}3. bulk_update_field_values # Update with dry_run: true first # tag_name: "Task" # filter: (same as above) # field_values: {"status": {"variant": "Done"}} # merge: true, dry_run: true4. bulk_update_field_values # Execute with dry_run: falseDiscover before creating
Always call get_tags before creating new tags. This prevents duplicate schemas and lets the AI understand what fields are already available.
Validate complex filters
Use validate_filter before running complex queries. It checks the filter syntax and field references without executing the query, returning clear error messages for any issues.
Preview bulk operations
All bulk operations (bulk_delete_thogits, bulk_apply_tag, bulk_remove_tag, bulk_update_field_values) support dry_run: true. This returns the thogits that would be affected without making changes. Always dry-run first to confirm the scope.
Debug filter issues
Use explain_query to get a human-readable explanation of what a filter does. This is useful when a filter returns unexpected results — the explanation shows how each condition is interpreted.
Use merge for partial updates
When calling bulk_update_field_values or update_tag_field_values, set merge: true to update only the specified fields. Without merge, omitted fields are set to null.