--- title: "Agentic TIP MCP Server README | Dataminr" slug: "agentic-tip-mcp-server-readme" description: "This article provides a README for the Agentic TIP MCP Server." tags: ["Agentic TIP", "MCP server"] status: "update" updated: 2026-08-31T19:49:41Z published: 2026-08-31T19:49:41Z canonical: "knowledge.threatconnect.com/agentic-tip-mcp-server-readme" --- > ## Documentation Index > Fetch the complete documentation index at: https://knowledge.threatconnect.com/llms.txt > Use this file to discover all available pages before exploring further. # Agentic TIP MCP Server README # Dataminr - Agentic TIP MCP Server Access Agentic TIP threat intelligence and case management data directly from Claude (or any MCP-compatible client) via the Agentic TIP v3 REST API. ## Overview The Agentic TIP MCP Server exposes your Agentic TIP instance's v3 API as a set of MCP tools over a hosted endpoint. Every Agentic TIP instance exposes `POST /api/v3/mcp` directly, and any MCP client that supports remote HTTP servers can connect to it. Note See the ["TIP MCP Server" section of the 8.1 release notes](https://knowledge.threatconnect.com/docs/8-1-release-notes#tip-mcp-server) for more information. ## Transport - **Protocol:** JSON-RPC 2.0 (MCP protocol version `2025-03-26`) - **Wire format:** Single request → single response over `HTTPS POST`. Every response is HTTP 200; success/failure is carried in the JSON-RPC envelope, per spec. - **Endpoint:** `https://<your-instance>/api/v3/mcp` ## Authentication Every request must carry an Agentic TIP API token, either as: - `Authorization: Bearer <token>`, or - `Authorization: TC-Token <token>` A TIP API token is required for configuring the TIP MCP server. Users with an [Organization role](https://knowledge.threatconnect.com/docs/organization-roles) of Organization Administrator can retrieve API tokens. All other users must request an API token from their Organization Administrator. Follow these steps to retrieve a TIP API token: 1. On the **Membership** tab of the **Organization Settings** screen, create a new API user or edit an existing API user. Important If your user account allows you to select Organizations on the **Organization Settings** screen, make sure to select the Organization whose data you want to work with in the AI client. API tokens are assigned to API user accounts and allow access only to data in the API user’s Organization and the Communities and Sources in which that Organization has membership. 1. If [creating a new API user](https://knowledge.threatconnect.com/docs/managing-user-accounts#create-api-user), fill out the fields on the **API User Administration** window, and then click **SAVE USER AND GENERATE TOKEN**. If editing an existing API user, click **GENERATE TOKEN** if the **API Token** field is empty or the current API token is expired. Important The AI client’s data access is determined by the Organization role of the API user assigned to the token. When retrieving a token for another user, Organization Administrators should pull it from an API user account with the least-privileged [Organization role](https://knowledge.threatconnect.com/docs/organization-roles) needed to accomplish tasks in the AI client. Don’t give a user a token from an account whose Organization role is higher than their own. 1. Copy the token in the **API Token** field. The first five characters of the token are always `APIV2`. ## Tools ### Static tools (always available) | Tool | Description | Required params | | --- | --- | --- | | `tc_resources` | List all available Agentic TIP resource types, each flagged `writable: <bool>`. | — | | `tc_describe` | Get field names and TQL (ThreatConnect Query Language) syntax for a resource type. Includes a `writable` flag. | `resource_type` | | `tc_list` | List resources with TQL filtering, field expansion, sorting, and pagination. | `resource_type` | | `tc_get` | Retrieve a single resource by ID. | `resource_type`, `id` | | `tc_create` | Create a new resource. | `resource_type`, `body` | | `tc_update` | Replace an existing resource (full replace semantics; see caveats below). | `resource_type`, `id`, `body` | | `tc_delete` | Delete a resource by ID. | `resource_type`, `id` | > Tool names (`tc_*`, `pb_*`) and TQL use existing technical identifiers, independent of product branding. **tc_list optional parameters:** `tql`, `fields` (comma-separated nested expansions, e.g. `tags,securityLabels,attributes,associatedGroups`), `sorting`, `next_token` (pagination cursor), `owner`, `result_limit` (1–100, default 25), `max_field_length` (default 10000, `0` disables truncation), `summary` (collapses array-valued fields to `{"count": N}`). **Behavioral notes:** - Nested association/attribute expansions are capped at 1000 rows. - `tc_list` total count is only included on the first page (`resultStart` 0). - `tc_update`: nested-collection body fields use `{"data": [...], "mode": "append|replace|delete|singleton"}`. If `mode` is omitted, it defaults to `replace`. An empty `{"data": []}` is translated to an explicit delete. Any such adjustment is reported back in the response's `mcpMitigations` array. ### Dynamic tools (per-org, playbook-driven) In addition to the static tools, one tool is generated per **active MCP-triggered playbook** in your organization. These are scoped strictly to your org — a token from one organization can never see or invoke another organization's playbook tools. Each tool's description and input schema are derived from the playbook's own description and configured trigger parameters. Playbook tools dispatch asynchronously: the response is written back once the playbook run completes and its response action fires. ## Installing Point your MCP client directly at the hosted endpoint with your token as a bearer header: ``` claude mcp add --transport http agentic-tip https:///api/v3/mcp \ --header "Authorization: Bearer " ``` ## Error handling - Malformed JSON-RPC → standard JSON-RPC `PARSE_ERROR` / `INVALID_REQUEST` / `INVALID_PARAMS` / `METHOD_NOT_FOUND` envelopes. - A failure calling the underlying v3 API is **not** a JSON-RPC error — it's returned as a successful `tools/call` result with `isError: true` and the upstream HTTP status + message as the content text, so the model can see and react to it.