Koskamo

DirectIQ MCP

The DirectIQ MCP server allows AI agents to programmatically manage contacts, organize lists and tags, view campaign analytics, and send transactional emails directly from MCP-compatible clients without manual dashboard interaction.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

DirectIQ MCP logo, by DirectIQVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by DirectIQ
You need:Pass your API key in the x-api-key request header
MCP endpoint (Streamable HTTP)
https://mcp.directiq.com/mcp
Vendor documentation

What its tools do

30 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

30 of 30 have a description · 30 of 30 declare behavior hints · 25 of 25 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to mcp.directiq.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Manage contacts by looking up, adding, updating, and removing them
  • Organize lists and tags by creating, renaming, and moving contacts
  • See campaign results including opens, clicks, bounces, and unsubscribes
  • Send transactional emails like confirmations and receipts

Source and maintenance

Vendor evidenceRegistry 0.2.0MIT
Last repository push
Maintenance checked

Protocol and capabilities

Server
directiq-mcp 0.2.0
MCP protocol negotiated in check
2025-06-18
Tools
30 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Tools

30 advertised

directiq_account_overview
Advertised by the server during the last successful anonymous check.
Advertised read-only

Summarize the account in one call: total contacts, active/disabled status counts, list count, tag count, and confirmed sender addresses. A good first call in a conversation, and the way to find a valid "from" address for directiq_send_email. Each section that fails to load is returned as { error } without failing the rest.

directiq_account_overview input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
directiq_account_overview annotations
{
  "title": "Account Overview",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_get_contact
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one contact by numeric ID: email, first and last name, status, created and updated dates, tags, lists, and notes. Use when you already have the ID; to find a contact, page through directiq_list_contacts. Returns an error if no contact has that ID.

directiq_get_contact input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric contact ID (from directiq_list_contacts or directiq_get_contact)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_get_contact annotations
{
  "title": "Get Contact",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_list_contacts
Advertised by the server during the last successful anonymous check.
Advertised read-only

List contacts one page at a time, oldest first, with each contact's ID, email, name, status, tags, and lists. Returns { pageNumber, totalCount, result, hasNextPage }; request the next pageNumber while hasNextPage is true. Use to browse contacts or find an ID. For just the total, use directiq_contact_count instead.

directiq_list_contacts input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "pageSize": {
      "type": "integer",
      "maximum": 500,
      "minimum": 50,
      "description": "Results per page, 50–500 (default 50)"
    },
    "pageNumber": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "1-based page number (default 1)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_list_contacts annotations
{
  "title": "List Contacts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_contact_count
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return the total number of contacts in the account as a single number. Use for a quick count; for counts plus active/disabled status, lists, tags, and senders, use directiq_account_overview.

directiq_contact_count input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
directiq_contact_count annotations
{
  "title": "Contact Count",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_upsert_contact
Advertised by the server during the last successful anonymous check.
Advertised destructive

Add a contact to a list, creating the contact if the email is new or updating its name if it already exists. Optionally applies tags (created if missing). Use this to create contacts; to change other fields on an existing contact, use directiq_update_contact. Returns import counts (inserted, alreadyExisting, addedToList); emails on a suppression or bounce list are counted but not added.

directiq_upsert_contact input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "listId",
    "email"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "description": "Tag names to apply; missing tags are created"
    },
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "Contact email address"
    },
    "listId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric list ID (from directiq_list_lists)",
      "exclusiveMinimum": 0
    },
    "lastName": {
      "type": "string",
      "description": "Last name; overwrites the existing value"
    },
    "firstName": {
      "type": "string",
      "description": "First name; overwrites the existing value"
    }
  },
  "additionalProperties": false
}
directiq_upsert_contact annotations
{
  "title": "Add or Update Contact",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
directiq_update_contact
Advertised by the server during the last successful anonymous check.
Advertised destructive

Update fields on an existing contact by ID, such as firstName, lastName, or email. Only the fields you pass change, and they overwrite the current values. To create a contact, use directiq_upsert_contact; to change list or tag membership, use the list and tag tools.

directiq_update_contact input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "fields"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric contact ID (from directiq_list_contacts or directiq_get_contact)",
      "exclusiveMinimum": 0
    },
    "fields": {
      "type": "object",
      "description": "Contact fields to change, e.g. {\"firstName\": \"Jamie\"}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "additionalProperties": false
}
directiq_update_contact annotations
{
  "title": "Update Contact",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
directiq_delete_contact
Advertised by the server during the last successful anonymous check.
Advertised destructive

Permanently delete a contact by ID, removing it from every list and tag. This cannot be undone. Confirm with the user first; to only take a contact off one list, use directiq_remove_contact_from_list.

directiq_delete_contact input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric contact ID (from directiq_list_contacts or directiq_get_contact)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_delete_contact annotations
{
  "title": "Delete Contact",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
directiq_list_lists
Advertised by the server during the last successful anonymous check.
Advertised read-only

List every contact list in the account with its ID and name. Use to find a list ID before adding contacts, sending campaigns, or calling directiq_get_list.

directiq_list_lists input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
directiq_list_lists annotations
{
  "title": "List Contact Lists",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_get_list
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one contact list by ID: name, created and modified dates, and total, active, and disabled contact counts. Use directiq_list_lists to find the ID. Returns an error if no list has that ID.

directiq_get_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric list ID (from directiq_list_lists)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_get_list annotations
{
  "title": "Get Contact List",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_create_list
Advertised by the server during the last successful anonymous check.

Create a new, empty contact list and return it with its new ID. Calling it twice creates two lists with the same name, so check directiq_list_lists first. Add contacts afterwards with directiq_upsert_contact or directiq_add_contact_to_list.

directiq_create_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "List name, 1–200 characters"
    }
  },
  "additionalProperties": false
}
directiq_create_list annotations
{
  "title": "Create Contact List",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
directiq_rename_list
Advertised by the server during the last successful anonymous check.
Advertised destructive

Rename a contact list by ID. Its contacts are unchanged; the previous name is overwritten.

directiq_rename_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "name"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric list ID (from directiq_list_lists)",
      "exclusiveMinimum": 0
    },
    "name": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "New name, 1–200 characters"
    }
  },
  "additionalProperties": false
}
directiq_rename_list annotations
{
  "title": "Rename Contact List",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
directiq_delete_list
Advertised by the server during the last successful anonymous check.
Advertised destructive

Permanently delete a contact list by ID. The contacts themselves are kept, but their membership in this list is lost. This cannot be undone; confirm with the user first.

directiq_delete_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric list ID (from directiq_list_lists)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_delete_list annotations
{
  "title": "Delete Contact List",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
directiq_add_contact_to_list
Advertised by the server during the last successful anonymous check.

Add an existing contact (by contact ID) to a list. Adding a contact that is already on the list has no effect. To add someone by email who may not exist yet, use directiq_upsert_contact.

directiq_add_contact_to_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "listId",
    "contactId"
  ],
  "properties": {
    "listId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric list ID (from directiq_list_lists)",
      "exclusiveMinimum": 0
    },
    "contactId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric contact ID (from directiq_list_contacts or directiq_get_contact)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_add_contact_to_list annotations
{
  "title": "Add Contact to List",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_remove_contact_from_list
Advertised by the server during the last successful anonymous check.
Advertised destructive

Remove a contact from one list. The contact stays in the account and on its other lists; to delete the contact entirely, use directiq_delete_contact.

directiq_remove_contact_from_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "listId",
    "contactId"
  ],
  "properties": {
    "listId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric list ID (from directiq_list_lists)",
      "exclusiveMinimum": 0
    },
    "contactId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric contact ID (from directiq_list_contacts or directiq_get_contact)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_remove_contact_from_list annotations
{
  "title": "Remove Contact from List",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
directiq_list_segments
Advertised by the server during the last successful anonymous check.
Advertised read-only

List saved segments (rule-based groups of contacts) with their IDs and names. Returns an empty array if the account has none. Segments are managed in the DirectIQ dashboard.

directiq_list_segments input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
directiq_list_segments annotations
{
  "title": "List Segments",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_list_tags
Advertised by the server during the last successful anonymous check.
Advertised read-only

List every tag in the account with its ID and name. Use to check whether a tag exists or to find its ID before renaming or deleting it.

directiq_list_tags input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
directiq_list_tags annotations
{
  "title": "List Tags",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_get_tag
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one tag by ID with its name and details. Use directiq_list_tags to find the ID. Returns an error if no tag has that ID.

directiq_get_tag input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric tag ID (from directiq_list_tags)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_get_tag annotations
{
  "title": "Get Tag",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_create_tag
Advertised by the server during the last successful anonymous check.

Create a new tag and return it with its ID. Check directiq_list_tags first to avoid duplicates. To tag a contact, use directiq_tag_contact, which also creates missing tags.

directiq_create_tag input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Tag name"
    }
  },
  "additionalProperties": false
}
directiq_create_tag annotations
{
  "title": "Create Tag",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
directiq_rename_tag
Advertised by the server during the last successful anonymous check.
Advertised destructive

Rename a tag by ID. Contacts keep the tag under its new name; the previous name is overwritten.

directiq_rename_tag input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "name"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric tag ID (from directiq_list_tags)",
      "exclusiveMinimum": 0
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "New tag name"
    }
  },
  "additionalProperties": false
}
directiq_rename_tag annotations
{
  "title": "Rename Tag",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
directiq_delete_tag
Advertised by the server during the last successful anonymous check.
Advertised destructive

Permanently delete a tag by ID and remove it from every contact. Contacts are kept. This cannot be undone; confirm with the user first.

directiq_delete_tag input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric tag ID (from directiq_list_tags)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_delete_tag annotations
{
  "title": "Delete Tag",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
directiq_tag_contact
Advertised by the server during the last successful anonymous check.

Apply one or more tags to a contact by contact ID. Tags that do not exist yet are created. Applying a tag the contact already has has no effect.

directiq_tag_contact input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "contactId",
    "tags"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "minItems": 1,
      "description": "Tag names to apply"
    },
    "contactId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric contact ID (from directiq_list_contacts or directiq_get_contact)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_tag_contact annotations
{
  "title": "Tag Contact",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_untag_contact
Advertised by the server during the last successful anonymous check.
Advertised destructive

Remove a tag from a contact, identified by the contact email and the tag name. The tag itself and the contact are kept; to delete the tag everywhere, use directiq_delete_tag.

directiq_untag_contact input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "email",
    "tag"
  ],
  "properties": {
    "tag": {
      "type": "string",
      "minLength": 1,
      "description": "Tag name to remove"
    },
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "Contact email address"
    }
  },
  "additionalProperties": false
}
directiq_untag_contact annotations
{
  "title": "Untag Contact",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
directiq_list_campaigns
Advertised by the server during the last successful anonymous check.
Advertised read-only

List email campaigns and automation flows with ID, name, type (Regular or Flow), status, subject, sender, target lists, recipient count, and scheduled send time. Returns { campaigns, nextPageToken }; pass nextPageToken back to get the next page (null means no more). Use the IDs with directiq_campaign_stats for performance.

directiq_list_campaigns input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "nextPageToken": {
      "type": "string",
      "description": "Token from the previous page; omit for the first page"
    }
  },
  "additionalProperties": false
}
directiq_list_campaigns annotations
{
  "title": "List Campaigns",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_get_campaign
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one campaign by ID: name, type, status, subject, sender, target lists and segments, template ID, recipient count, and scheduled send time. For opens, clicks, and other results, use directiq_campaign_stats.

directiq_get_campaign input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric campaign ID (from directiq_list_campaigns)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_get_campaign annotations
{
  "title": "Get Campaign",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_campaign_stats
Advertised by the server during the last successful anonymous check.
Advertised read-only

Summarize how a campaign performed: counts of recipients, opens, clicks, bounces, unsubscribes, and complaints, plus open, click, bounce, and unsubscribe rates as percentages of recipients. Use directiq_campaign_report to see which contacts did what. A section that fails to load is returned as an error without failing the rest.

directiq_campaign_stats input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "campaignId"
  ],
  "properties": {
    "campaignId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric campaign ID (from directiq_list_campaigns)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_campaign_stats annotations
{
  "title": "Campaign Stats",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_campaign_report
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the contacts behind one campaign result, one page at a time: who received, opened, clicked, bounced, unsubscribed, or complained. Returns { totalCount, result }. Optionally filter to one email address, or for clicks, to one link. For totals and rates only, use directiq_campaign_stats.

directiq_campaign_report input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "campaignId",
    "type"
  ],
  "properties": {
    "link": {
      "type": "string",
      "description": "For type \"clicks\" only: only return clicks on this URL"
    },
    "type": {
      "enum": [
        "recipients",
        "opens",
        "clicks",
        "bounces",
        "unsubscribes",
        "complaints"
      ],
      "type": "string",
      "description": "Which result to list"
    },
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "Only return rows for this contact email"
    },
    "pageSize": {
      "type": "integer",
      "maximum": 500,
      "description": "Results per page, up to 500",
      "exclusiveMinimum": 0
    },
    "campaignId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Numeric campaign ID (from directiq_list_campaigns)",
      "exclusiveMinimum": 0
    },
    "pageNumber": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "1-based page number (default 1)",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
directiq_campaign_report annotations
{
  "title": "Campaign Report",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_send_email
Advertised by the server during the last successful anonymous check.
Open-world

Send one transactional email (a receipt, confirmation, or one-to-one message) immediately. It is delivered to real recipients and cannot be recalled, and it counts toward the account’s sending plan. The from address must be a confirmed sender on the account (see directiq_account_overview). Not for bulk marketing: campaigns are sent from the DirectIQ dashboard.

directiq_send_email input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "from",
    "to",
    "subject",
    "content"
  ],
  "properties": {
    "cc": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "email",
        "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      },
      "description": "CC recipient addresses"
    },
    "to": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "Recipient email address"
    },
    "bcc": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "email",
        "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      },
      "description": "BCC recipient addresses"
    },
    "from": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "Sender address; must be a confirmed sender on the account"
    },
    "content": {
      "type": "string",
      "minLength": 2,
      "description": "Message body as HTML or plain text, at least 2 characters"
    },
    "subject": {
      "type": "string",
      "minLength": 2,
      "description": "Subject line, at least 2 characters"
    },
    "fromName": {
      "type": "string",
      "description": "Sender display name, e.g. \"Acme Support\""
    }
  },
  "additionalProperties": false
}
directiq_send_email annotations
{
  "title": "Send Transactional Email",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
directiq_list_endpoints
Advertised by the server during the last successful anonymous check.
Advertised read-only

List known DirectIQ API operations (HTTP method, API group, path, summary). Optionally filter by a search term. Call GET operations with directiq_read_request and POST/PUT/PATCH/DELETE operations with directiq_write_request.

directiq_list_endpoints input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "search": {
      "type": "string",
      "description": "Optional case-insensitive filter matched against each operation path or summary"
    }
  },
  "additionalProperties": false
}
directiq_list_endpoints annotations
{
  "title": "List DirectIQ Endpoints",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_read_request
Advertised by the server during the last successful anonymous check.
Advertised read-only

Issue an authenticated GET request to any DirectIQ endpoint and return the JSON response. Prefer a dedicated directiq_* tool when one exists; use this for read operations without one, found with directiq_list_endpoints (e.g. segments for a contact, email client reports). Full request/response schemas for each group are in the DirectIQ API docs at https://rest.directiq.com/{group}/swagger/index.html (core, contacts, subscription).

directiq_read_request input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "group",
    "path"
  ],
  "properties": {
    "path": {
      "type": "string",
      "pattern": "^\\/",
      "minLength": 1,
      "description": "Endpoint path within the group, e.g. '/contact/list' or '/email/send'"
    },
    "group": {
      "enum": [
        "core",
        "contacts",
        "subscription"
      ],
      "type": "string",
      "description": "DirectIQ API group: core, contacts, or subscription"
    },
    "query": {
      "type": "object",
      "description": "Optional query parameters",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": [
          "string",
          "number",
          "boolean"
        ]
      }
    }
  },
  "additionalProperties": false
}
directiq_read_request annotations
{
  "title": "DirectIQ Read Request",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directiq_write_request
Advertised by the server during the last successful anonymous check.
Advertised destructive

Issue an authenticated POST, PUT, PATCH, or DELETE request to any DirectIQ endpoint. May create, modify, or permanently delete account data, including bulk operations. Prefer a dedicated directiq_* tool when one exists; use this only for operations without one, found with directiq_list_endpoints, and confirm destructive calls with the user first. Full request/response schemas for each group are in the DirectIQ API docs at https://rest.directiq.com/{group}/swagger/index.html (core, contacts, subscription).

directiq_write_request input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "group",
    "method",
    "path"
  ],
  "properties": {
    "body": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "array",
          "items": {}
        }
      ],
      "description": "Optional JSON request body: an object, or an array for bulk operations"
    },
    "path": {
      "type": "string",
      "pattern": "^\\/",
      "minLength": 1,
      "description": "Endpoint path within the group, e.g. '/contact/list' or '/email/send'"
    },
    "group": {
      "enum": [
        "core",
        "contacts",
        "subscription"
      ],
      "type": "string",
      "description": "DirectIQ API group: core, contacts, or subscription"
    },
    "query": {
      "type": "object",
      "description": "Optional query parameters",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": [
          "string",
          "number",
          "boolean"
        ]
      }
    },
    "method": {
      "enum": [
        "POST",
        "PUT",
        "PATCH",
        "DELETE"
      ],
      "type": "string",
      "description": "HTTP method"
    }
  },
  "additionalProperties": false
}
directiq_write_request annotations
{
  "title": "DirectIQ Write Request",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (5 of 5 answered).

  1. 2026-11-02: 3 of 3 checks answered
  2. 2026-11-03: 2 of 2 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
473 ms
95th percentile latency
473 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · repository · passed · metadata changed · updated
  • · backfill · recorded · Pre-expansion baseline; unobserved rich metadata remains unknown
  • · probe · passed · 473 ms · metadata changed · 30 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http directiq-mcp https://mcp.directiq.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add directiq-mcp --url https://mcp.directiq.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable directiq-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "directiq-mcp": {
      "url": "https://mcp.directiq.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "directiq-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.directiq.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start directiq-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "directiq-mcp": {
      "type": "http",
      "url": "https://mcp.directiq.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http directiq-mcp https://mcp.directiq.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "directiq-mcp": {
      "url": "https://mcp.directiq.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "directiq-mcp": {
      "serverUrl": "https://mcp.directiq.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like DirectIQ MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run DirectIQ MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing