commentkeyword-mcp
OfficialAutomates Instagram 'comment a keyword and I'll DM you the link' flows: creates, re-targets (next post, all posts, or specific posts), pauses, lists and deletes keyword automations for posts and reels, sending the DM and public reply to everyone who comments the keyword.
Delivers the Instagram comment-to-DM automations through Meta's official Instagram API, so messages go out via the platform's supported channel rather than unofficial automation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@commentkeyword-mcpSet up a DM automation for keyword GUIDE on my next reel"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CommentKeyword agent toolkit
Set up an Instagram "Comment GUIDE and I'll DM you the link" automation straight from the AI agent that edits or scripts your Reel.
This repository is the official CommentKeyword toolkit for AI agents. It contains:
Part | What it does |
Agent Skill | Finds or writes the "comment X" CTA in a video's script, transcript, overlays and caption. Helps choose a keyword that won't misfire, and writes the DM. Then sets up the automation. |
MCP server ( | Tools to create, re-target, pause and delete keyword automations through the CommentKeyword API. |
Claude Code plugin | Installs both in one step. |
CommentKeyword sends the DM to everyone who comments the keyword on your post or reel. It uses Meta's official Instagram API.
You need a CommentKeyword account (the Free plan works) with an Instagram professional account connected, plus an API token. This repo is MIT-licensed; the CommentKeyword service it talks to is a hosted product with free and paid plans. See Before you start.
How it works
You: Edit this into a Reel. CTA: comment GUIDE to get the free checklist.
Claude: …edits the video, adds a "Comment GUIDE 👇" overlay inside the safe zone, writes the caption…
Ready to arm the DM:
Keyword: GUIDE (whole word) · Posts: your next post or reel
DM: "Here's the checklist, {{namefirst}} 👉 https://…"
Public reply: "Sent! Check your DMs 📩"
Create it?
You: Yes
Claude: Done. GUIDE is waiting for your next post. Publish the Reel, then comment GUIDE from
another account to test it.The next_post target means you don't need the post's ID. The keyword attaches itself to the next post or reel the account publishes.
Related MCP server: Instagram DMs MCP
Before you start
Create a CommentKeyword account at https://commentkeyword.com. API access is included on every plan, including Free.
Connect an Instagram professional account (Business or Creator).
Create an API token under Settings → API (https://commentkeyword.com/settings?tab=api). Give it
keywords:read,keywords:writeandagents:read. Addkeywords:deleteonly if you want the agent to be able to delete automations.
Install
Claude Code (skill and MCP server)
/plugin marketplace add commentkeyword/agent-toolkit
/plugin install commentkeyword@commentkeywordClaude Code asks for your API token when the plugin is enabled. It stores the token in your system keychain.
Claude Code (MCP server only)
claude mcp add --transport stdio --env COMMENTKEYWORD_API_TOKEN=YOUR_TOKEN commentkeyword -- npx -y github:commentkeyword/agent-toolkit#v0.2.0Claude Desktop, Cursor, Windsurf and other MCP clients
Add the server to the client's MCP config. For Claude Desktop that file is claude_desktop_config.json (Settings → Developer → Edit Config).
{
"mcpServers": {
"commentkeyword": {
"command": "npx",
"args": ["-y", "github:commentkeyword/agent-toolkit#v0.2.0"],
"env": { "COMMENTKEYWORD_API_TOKEN": "YOUR_TOKEN" }
}
}
}Skill only (Claude.ai, Claude Desktop, other agents that read SKILL.md)
With the skills CLI (Claude Code, Cursor, Codex and other agents):
npx skills add commentkeyword/agent-toolkitOr by hand:
Download
skills/comment-to-dm-ctaas a folder and zip it.In Claude, upload the zip under Customize → Skills → Upload a skill.
Without the MCP server, the skill still plans the CTA and the DM. It can also call the REST API directly where the agent has network access (see references/api.md).
Add-ons for video toolkits
Toolkit | Add-on |
|
MCP tools
Tool | What it does |
| Create an automation. |
| Change any field. Re-arm it for the next upload with |
| Check for conflicts and see whether the next post was caught ( |
| Delete an automation. Asks for confirmation when an AI agent is attached. |
| List the AI agents already set up in your dashboard, so one can be attached to a keyword to continue the conversation after the first DM. Agents are created and edited in the dashboard, not through the API. |
Environment variable | |
| Required. Your personal access token. |
| Optional. Defaults to |
Network and data
One destination. The MCP server and the skill's curl examples only call the CommentKeyword API, at
https://commentkeyword.com/api(orCOMMENTKEYWORD_API_URLif you set it). No telemetry, no other hosts.What gets sent: your API token (as a Bearer header) and the automation you confirm: keyword, DM and reply text, target posts and options.
What comes back: your keyword automations and the names of your AI agents.
Nothing on disk. The server stores nothing locally.
Privacy policy: https://commentkeyword.com/privacy
Safety
Every automation messages real people. The skill and the tool descriptions tell the agent to confirm the keyword, the DM and the target with you before creating or activating anything.
Each token works for one workspace and can be revoked at any time in Settings → API.
Use the narrowest permissions you need.
Development
npm test # end-to-end tests: spawns the server over stdio against a mock APIThe MCP server has no dependencies and no build step. It is two readable files in server/: core.mjs holds the tools, the validation and the JSON-RPC handling; commentkeyword-mcp.mjs is the stdio entry point. It needs Node 18 or newer.
License
MIT. Maintained by CommentKeyword. Issues and PRs welcome.
Available Tools
6 toolscreate_keywordCreate a keyword automationA
Create a comment-to-DM automation: when someone comments the keyword, CommentKeyword sends them the DM (and optionally replies publicly). Confirm the details with the user first, because it messages real people. Fails with 409 if the keyword already exists for the same posts, or with keyword_limit_exceeded when the plan has no free active-keyword slot.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Which posts trigger the DM. next_post: the next post or reel published on the connected Instagram account (best for a video that is not live yet). all_posts: every post, current and future. specific_posts: only the Instagram media IDs in mediaIds. | |
| keyword | Yes | The word people comment, e.g. "GUIDE". Matching is case-insensitive. Prefer one distinctive word. | |
| isActive | No | Create it active (default) or paused. Only active keywords count toward the plan limit. | |
| mediaIds | No | Instagram media IDs. Required for target "specific_posts"; with "next_post" they are matched too. | |
| aiAgentId | No | Optional publicId of an existing Live AI agent (from list_agents) that takes over the conversation when the person replies to the DM. Its conversation hook is appended to the DM. Only works on paid plans; on Free the agent is ignored. null detaches it. | |
| matchMode | No | contains (default): the comment only has to include the keyword as a word, e.g. "GUIDE please!". exact: the whole comment must be the keyword. | |
| dmMessages | Yes | DM variants (1-10); one is picked at random per commenter, so 2-3 wordings of the same message feel less robotic. Each must deliver the promised link. Max 1,000 characters each. Supports {{handle}}, {{name}}, {{namefirst}}. | |
| trackLinks | No | Replace links in the DM with tracked links to count clicks. | |
| commentReplies | No | Optional public reply variants (up to 10), one picked at random per comment, e.g. "Sent! Check your DMs {{namefirst}}". Max 500 characters each. | |
| publicReplyEnabled | No | Post one of commentReplies publicly. Defaults to true when commentReplies is not empty. | |
| matchWithoutAccents | No | Only for keywords with Latin accents: also match the unaccented spelling (e.g. "guía" also matches "guia"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true and destructiveHint=false; the description adds real value on top by disclosing that DMs reach real people (a social/irreversible side effect), and by naming two concrete failure modes: 409 on duplicate keyword for the same posts and keyword_limit_exceeded when the plan has no free active-keyword slot. Missing are what gets returned on success and any permission/scope requirements, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: what it does, the caution about real recipients, then failure modes — front-loaded and ordered by what the agent needs first. No restatement of the title and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no output schema, the description covers purpose, side-effect caution, and error paths, which is most of what's needed. It stops short of saying what the successful call returns (presumably the created keyword with an id) or noting that the new keyword counts against the plan limit, which an agent creating keywords in bulk would want to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every one of the 11 parameters is documented in detail in the schema, so the schema does the heavy lifting. The description only adds a passing reference to the optional public reply, offering essentially no parameter meaning beyond structured data — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create a comment-to-DM automation) and goes further to explain the actual mechanism: a comment triggers the keyword and CommentKeyword sends the DM, optionally with a public reply. That mechanism makes it unambiguously distinct from the list/get/update/delete_keyword siblings without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition for use — confirm details with the user first, because it messages real people — which is genuinely actionable guidance for an agent. It does not explicitly contrast with update_keyword (e.g. 'use this only for new keywords; to change an existing one use update_keyword'), so the when-not case is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_keywordDelete a keyword automationADestructiveIdempotent
Permanently delete a keyword automation. Prefer update_keyword with isActive false to pause it instead. If the keyword has an AI agent, the first call returns DELETE_CONFIRMATION_REQUIRED with an impact summary; show it to the user and call again with confirm true only if they agree.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The keyword publicId. | |
| confirm | No | Set true only after the user has reviewed a DELETE_CONFIRMATION_REQUIRED response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It adds crucial behavioral context beyond the annotations by detailing a multi-step conversational workflow: the first call returns a confirmation requirement, which then necessitates a second, conditional call using the 'confirm' parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly condensed yet comprehensive, front-loading the operational alternative ('Prefer update_keyword...') before detailing the complex, conditional deletion flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive nature and the multi-step conversational requirement (waiting for confirmation), the description provides maximum possible context without needing an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema defines 'confirm' as a boolean, the description provides the essential semantic context, explaining that it must only be set to true after a specific DELETE_CONFIRMATION_REQUIRED response is received.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the purpose (permanently delete a keyword automation) and effectively distinguishes this tool from the sibling update_keyword tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to use this tool versus the alternative, stating that users should 'prefer update_keyword with isActive false' to pause the keyword.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keywordGet a keyword automationARead-only
Get one keyword automation by its publicId, including whether it is still waiting for the next post (nextPostStatus).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The keyword publicId. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one piece of behavioral context beyond that: the response includes whether the automation is still waiting for the next post (nextPostStatus). It says nothing about error behavior for an unknown/invalid id or the rest of the returned shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with zero filler, front-loading the verb and resource and appending the most notable returned field. Nothing to remove.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with a full annotation safety profile and no output schema, the description covers what it does and highlights a key returned field. Slightly richer return-value context would be needed for a 5 given the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'id' parameter is documented as the keyword publicId with UUID format. The description's 'by its publicId' simply echoes the schema, adding no format, lookup, or failure semantics beyond it. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one keyword automation') and explicitly scopes it to a single item, which implicitly separates it from the sibling list_keywords. It stops short of explicitly naming or contrasting with list_keywords, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by its publicId' implies you must already know the identifier, which hints at when this is appropriate versus a list call, but the description never states when to use this instead of list_keywords or what to do if the id is unknown. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_agentsList AI agentsARead-only
List the AI agents already set up in the workspace (agents are created and edited in the CommentKeyword dashboard). Pass the publicId of a Live agent as aiAgentId to create_keyword or update_keyword so it keeps chatting after the first DM.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true; the description adds the non-obvious constraint that agents cannot be created or edited through this API (dashboard-only) and that only 'Live' agents are usable downstream. It does not cover pagination or failure behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, purpose front-loaded, second sentence carrying only the chaining instruction. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description supplies enough: what it returns (identifiable agents via publicId), which agents matter (Live), and how to use them. It doesn't describe the response shape or ordering, which is a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description instead adds return-semantics value by identifying that results carry a publicId and a Live status that feeds other tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the AI agents already set up in the workspace') and immediately distinguishes itself from the keyword siblings by noting agents are created and edited in the CommentKeyword dashboard, not here. An agent can tell this is a read-only enumeration of agents versus the keyword CRUD tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete next step: pass the publicId of a Live agent as aiAgentId to create_keyword or update_keyword so it keeps chatting. That implicitly covers the main reason to call it, but there is no explicit 'do not use this to create/manage agents' exclusion, so it stops short of full 5-level guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_keywordsList keyword automationsARead-only
List the comment-keyword automations in the workspace, newest first. Use it to check whether a keyword already exists before creating one.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, default 50. | |
| offset | No | ||
| search | No | Case-insensitive search in the keyword text. | |
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true and openWorldHint=true already establish the safety profile, so the description only needs to add context. It contributes the result ordering (newest first), which is useful, but says nothing about pagination behavior, result count limits, or what a page contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the resource and ordering front-loaded and the usage hint immediately after. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with four optional filters and no output schema, the description leaves the return shape and most filter semantics unstated. It is adequate to identify the tool, but not to invoke it with confidence around paging or filtering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, and the description mentions no parameters at all. The undocumented offset and status filter have no explanation anywhere, and limit/search only get one-line schema notes, so the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list comment-keyword automations), the scope (workspace), and the ordering (newest first). This cleanly separates it from get_keyword (single fetch) and the create/update/delete siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it to check whether a keyword already exists before creating one" gives a concrete trigger that points at the create_keyword workflow. It gives no explicit when-not or pagination guidance, but the primary usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_keywordUpdate a keyword automationAIdempotent
Change a keyword automation. Only the fields you pass change. Passing target re-targets it (e.g. next_post to wait for the next upload again). dmMessages and commentReplies replace all existing variants. Set isActive false to pause it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The keyword publicId. | |
| target | No | Which posts trigger the DM. next_post: the next post or reel published on the connected Instagram account (best for a video that is not live yet). all_posts: every post, current and future. specific_posts: only the Instagram media IDs in mediaIds. | |
| keyword | No | The word people comment, e.g. "GUIDE". Matching is case-insensitive. Prefer one distinctive word. | |
| isActive | No | Create it active (default) or paused. Only active keywords count toward the plan limit. | |
| mediaIds | No | Instagram media IDs. Required for target "specific_posts"; with "next_post" they are matched too. | |
| aiAgentId | No | Optional publicId of an existing Live AI agent (from list_agents) that takes over the conversation when the person replies to the DM. Its conversation hook is appended to the DM. Only works on paid plans; on Free the agent is ignored. null detaches it. | |
| matchMode | No | contains (default): the comment only has to include the keyword as a word, e.g. "GUIDE please!". exact: the whole comment must be the keyword. | |
| dmMessages | No | DM variants (1-10); one is picked at random per commenter, so 2-3 wordings of the same message feel less robotic. Each must deliver the promised link. Max 1,000 characters each. Supports {{handle}}, {{name}}, {{namefirst}}. | |
| trackLinks | No | Replace links in the DM with tracked links to count clicks. | |
| commentReplies | No | Optional public reply variants (up to 10), one picked at random per comment, e.g. "Sent! Check your DMs {{namefirst}}". Max 500 characters each. | |
| publicReplyEnabled | No | Post one of commentReplies publicly. Defaults to true when commentReplies is not empty. | |
| matchWithoutAccents | No | Only for keywords with Latin accents: also match the unaccented spelling (e.g. "guía" also matches "guia"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a non-destructive, idempotent, open-world write. The description adds value beyond them: it discloses PATCH semantics, that array fields wholesale-replace existing variants (not merge), and that isActive=false pauses. It does not mention permission requirements or whether pausing affects in-flight DMs, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, zero filler, front-loaded with the update-semantics that matter most (partial change, re-targeting, array replacement, pausing). Every sentence carries a distinct behavioral fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation with no output schema, the description covers the highest-risk surprises (silent array replacement, re-targeting side effect, pause semantics) while the rich schema handles field detail. The remaining gap is return behavior — nothing says what the response contains after the update — which is minor given the tool's straightforward shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 12 parameters thoroughly, establishing the baseline of 3. The description does add meaning beyond the schema — that passing target re-targets (including the next_post reset case) and that dmMessages/commentReplies replace rather than append — but it covers only 3 of the 12 fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb ("Change") and resource ("keyword automation"), and the immediate follow-up "Only the fields you pass change" pins the operation as a partial update rather than a full replace. It is clearly distinguishable from create_keyword/delete_keyword/get_keyword by name alone, though no sibling is explicitly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (modify an existing automation) but never stated as a when-to-use rule, and no alternative is named — e.g. nothing says to use create_keyword for new automations or get_keyword to inspect before changing. The field-level guidance about retargeting and pausing is helpful but is operational detail rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.2.0- First observed
create_keyword - First observed
delete_keyword - First observed
get_keyword - First observed
list_agents - First observed
list_keywords - First observed
update_keyword
TDQS
Scored across 6 tools
Each tool maps to a distinct action on the keyword resource (list, get, create, update, delete), with list_keywords explicitly positioned as the pre-create existence check. list_agents targets a different resource (AI agents) and is clearly scoped as a read-only lookup for supplying aiAgentId. No two tools compete for the same selection.
All six tools follow a strict snake_case verb_noun pattern (list_/get_/create_/update_/delete_keyword, list_agents). The single resource deviation (agents) still uses the same convention, so the pattern is fully predictable.
Six tools is a tight, well-scoped surface for a keyword-automation CRUD domain — nothing looks padded or missing. Every tool earns its place, and the destructive delete is balanced by update_keyword's pause path.
Full lifecycle coverage for keywords (create/read/list/update/delete with confirmation flow) with no dead ends. Agents are intentionally read-only since they are authored in the dashboard, but there is no get_agent for a single agent and no way to proactively check plan/keyword limits beyond relying on error codes.
Maintenance
Related MCP Connectors
- DMParrotOAuthcom.dmparrot
Instagram comment-to-DM automation for AI agents: keyword funnels, private replies, broadcasts.
Instagram comment-to-DM automation your AI can set up and leave running, on the official Meta API.
Instagram for AI agents: publish, read comments and DMs, insights, and engage from your account.
Agentic Instagram DM automation: comment-to-DM links, follow to unlock, inbox, post scheduling.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceEnables AI assistants to interact with Instagram and Facebook accounts through their APIs, supporting messaging, post management, commenting, and content creation.14-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to read, send, and manage Instagram direct messages, including viewing conversations, sending DMs to users, reacting to messages, and searching for users by username.10-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Instagram Business accounts by automating content publishing, scheduling posts, and analyzing performance metrics. Supports posts, stories, reels, and carousels with detailed audience insights and hashtag discovery.1-
- FlicenseBqualityDmaintenanceEnables AI agents to control Instagram accounts programmatically, supporting profile management, media interaction, direct messaging, and follower management.132-