pincushion-mcp
Allows linking pull requests in Bitbucket to resolved annotations via the prUrl parameter.
Provides configuration for Windsurf, a Codeium product, to use the MCP server for AI-native development.
Allows linking pull requests in GitHub to resolved annotations via the prUrl parameter.
Allows linking pull requests in GitLab to resolved annotations via the prUrl parameter.
Supports OpenAI Codex and other REST API clients via a REST API wrapper for tool invocation.
Enables remote sync of feedback data with a Supabase backend using sync-url and api-key flags.
Pincushion MCP Server
The implementation-context layer for AI-native development. Stakeholders drop visual pins on any page of your live app; your AI coding agent reads each pin through MCP and ships the fix — in Claude Code, Cursor, VS Code, Windsurf, or any MCP client.
What makes a Pincushion pin different
A pin isn't a feedback item — it's an agent work packet. Each one carries everything an agent needs to implement the change without a back-and-forth:
URL + element selector — exactly what, exactly where
Screenshot + viewport + DOM snippet — the visual and structural context
Thread + project context — the conversation and the codebase it lives in
Likely files + acceptance criteria — where to look, and how to know it's done
The loop closes itself: a stakeholder pins it → your agent reads it via MCP and fixes it in your IDE → the resolve records the commit, branch, and PR → an optional post-deploy critique verifies the fix actually landed.
This server is also how Pincushion AI runs design/copy/a11y critiques on a live page and writes the pins straight back onto it.
Related MCP server: Lens
Installation
# npm
npm install -g pincushion-mcp
# pnpm
pnpm add -g pincushion-mcp
# yarn
yarn global add pincushion-mcpOr run directly without installing:
# npm
npx pincushion-mcp --project-dir .
# pnpm
pnpm dlx pincushion-mcp --project-dir .
# yarn
yarn dlx pincushion-mcp --project-dir .Quick Start
1. Install the Browser Extension
Download the Pincushion Chrome extension from pincushion.io/install/chrome.
2. Configure Your Agent
Pick your AI agent below and follow the configuration for your setup.
3. Start Using
Once configured, your agent can:
See all feedback:
get_feedback_summaryFind specific pins:
search_annotationsFix and mark as done:
fix_and_resolve
Agent Configuration Guides
Cursor
File: .cursor/mcp.json
{
"mcpServers": {
"pincushion": {
"command": "npx",
"args": ["pincushion-mcp", "--project-dir", "."]
}
}
}pnpm / yarn users: replace
"command": "npx"with"command": "pnpm"and add"dlx"as the first arg, or use"command": "yarn"with"dlx"likewise.
With Supabase sync:
{
"mcpServers": {
"pincushion": {
"command": "npx",
"args": [
"pincushion-mcp",
"--project-dir", ".",
"--sync-url", "https://your-supabase.com/api",
"--api-key", "YOUR_API_KEY"
]
}
}
}Claude Desktop
File: ~/.config/Claude/claude_desktop_config.json (Linux/Windows)
or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
{
"mcpServers": {
"pincushion": {
"command": "npx",
"args": ["pincushion-mcp", "--project-dir", "/path/to/your/project"]
}
}
}pnpm users:
{
"mcpServers": {
"pincushion": {
"command": "pnpm",
"args": ["dlx", "pincushion-mcp", "--project-dir", "/path/to/your/project"]
}
}
}yarn users:
{
"mcpServers": {
"pincushion": {
"command": "yarn",
"args": ["dlx", "pincushion-mcp", "--project-dir", "/path/to/your/project"]
}
}
}With Supabase sync:
{
"mcpServers": {
"pincushion": {
"command": "npx",
"args": [
"pincushion-mcp",
"--project-dir", "/path/to/your/project",
"--sync-url", "https://your-supabase.com/api",
"--api-key", "YOUR_API_KEY"
]
}
}
}Claude Code (CLI)
Run this command to add Pincushion to Claude Code:
claude mcp add pincushion -- npx pincushion-mcp --project-dir .Or with Supabase sync:
claude mcp add pincushion -- npx pincushion-mcp --project-dir . --sync-url https://your-supabase.com/api --api-key YOUR_API_KEYVS Code (Copilot / Continue)
File: .vscode/settings.json
{
"mcp.servers": {
"pincushion": {
"command": "npx",
"args": ["pincushion-mcp", "--project-dir", "${workspaceFolder}"]
}
}
}Windsurf / Codeium Windsurf
File: ~/.windsurf/mcp.json or ~/.config/windsurf/mcp.json
{
"mcpServers": {
"pincushion": {
"command": "npx",
"args": ["pincushion-mcp", "--project-dir", "."]
}
}
}Antigravity
File: ~/.antigravity/mcp.json
{
"mcpServers": {
"pincushion": {
"command": "npx",
"args": ["pincushion-mcp", "--project-dir", "."]
}
}
}OpenAI Codex / REST API Clients
For tools that don't support MCP directly, use the REST API wrapper:
npx pincushion-mcp --rest --port 3456This starts an HTTP server on localhost:3456. Endpoints:
GET /health— Check server statusPOST /call-tool— Invoke a toolBody:
{ "toolName": "get_feedback_summary", "args": {} }
Example using curl:
curl -X POST http://localhost:3456/call-tool \
-H "Content-Type: application/json" \
-d '{"toolName": "get_feedback_summary", "args": {}}'CLI Flags
npx pincushion-mcp [flags]Flag | Description | Default |
| Root directory containing | Current working directory |
| Supabase API endpoint for remote sync | None (local only) |
| API key for Supabase authentication | None |
| Pro license key (optional) | None |
| Enable REST API mode | Disabled (uses MCP/stdio) |
| Port for REST API server | 3456 |
Examples
Local project:
npx pincushion-mcp --project-dir /path/to/projectWith Supabase sync:
npx pincushion-mcp \
--project-dir /path/to/project \
--sync-url https://abcd1234.supabase.co/api \
--api-key sb_project_key_abc123...REST API server:
npx pincushion-mcp --rest --port 8080Tools
get_annotations
Retrieve annotations from .feedback/. Filter by page, component, or status.
Parameters:
pageUrl(string, optional) — Filter by page URL (partial match)componentName(string, optional) — Filter by LWC component namestatus(string, optional) — Filter byopen,in-progress, orresolved
Example:
await mcp.callTool('get_annotations', {
componentName: 'wmlHomePage',
status: 'open'
});search_annotations
Full-text search across all annotations, comments, selectors, and tags.
Parameters:
query(string, required) — Search term
Example:
await mcp.callTool('search_annotations', {
query: 'button label'
});get_feedback_summary
High-level rollup of all feedback: counts by status, priority, page, and component.
Example:
await mcp.callTool('get_feedback_summary', {});get_component_feedback
Get all feedback for a specific LWC component with a plain-language summary.
Parameters:
componentName(string, required) — LWC component name
Example:
await mcp.callTool('get_component_feedback', {
componentName: 'wmlHomePage'
});resolve_annotation
Mark an annotation as resolved after fixing the issue.
Parameters:
annotationId(string, required) — Annotation IDcomment(string, optional) — Resolution messageresolvedBy(string, optional) — Name to attribute resolution (default: "AI Agent")
Example:
await mcp.callTool('resolve_annotation', {
annotationId: 'ann_abc123',
comment: 'Updated button label in line 42 of wmlHomePage.js'
});add_agent_reply
Add a reply to an annotation thread (e.g., ask clarifying questions).
Parameters:
annotationId(string, required) — Annotation IDbody(string, required) — Reply messageauthor(string, optional) — Author name (default: "AI Agent")
Example:
await mcp.callTool('add_agent_reply', {
annotationId: 'ann_abc123',
body: 'Is this button in the main navigation or sidebar?'
});fix_and_resolve
Combine fixing code and marking an annotation as resolved in one call. Optionally records commit / branch / PR metadata so the dashboard can backlink to what shipped.
Parameters:
annotationId(string, required) — Annotation IDfixDescription(string, required) — Description of the fixfilePath(string, optional) — File where fix was appliedlineNumber(number, optional) — Line number of the fixcommitSha(string, optional) — Commit SHA that landed the changebranchName(string, optional) — Branch the commit was made onprUrl(string, optional) — Pull request URL (GitHub/GitLab/Bitbucket; shape-validated)
Example:
await mcp.callTool('fix_and_resolve', {
annotationId: 'ann_abc123',
fixDescription: 'Updated button label to match design spec',
filePath: 'src/components/wmlHomePage.js',
lineNumber: 42,
commitSha: 'abc123def456',
branchName: 'pincushion/checkout-fix',
prUrl: 'https://github.com/acme/app/pull/142'
});get_implementation_packet
Fetch a single implementation packet for one page URL — selector list, full pin payloads, suggested branch name, and traceability config. Use when an agent wants to batch-fix one page in a single branch.
await mcp.callTool('get_implementation_packet', { pageUrl: '/checkout' });assign_pin_to_agent
Dispatch a pin straight to your local coding agent. Promotes the pin to ready if not already, marks pending_implementation, and writes a .feedback/.agent-queue/<id>.json trigger file that agent-loop.mjs picks up and shells out to Cursor / Claude Code / Codex.
await mcp.callTool('assign_pin_to_agent', { annotationId: 'ann_abc123' });link_pin_deploy
Attach a deploy URL to a resolved pin. Typically called by the deploy-hook edge function once production includes the fix, but available manually too.
await mcp.callTool('link_pin_deploy', {
annotationId: 'ann_abc123',
deployUrl: 'https://acme-app.vercel.app'
});record_pin_verification
Write Pincushion AI's post-deploy verdict back to the pin. Called by the critic agent after /critique-latest-deploy runs against a fresh deploy.
await mcp.callTool('record_pin_verification', {
annotationId: 'ann_abc123',
status: 'verified', // or 'regressed' or 'inconclusive'
notes: 'Button matches the primary token. No regression on adjacent CTAs.'
});get_time_to_fix_metrics
Pro/Team feature — Free callers get sample size + upgrade hint. Median + p25/p75 of pin-to-resolve duration, with a 5-pin minimum so the metric is never noise.
await mcp.callTool('get_time_to_fix_metrics', { scope: 'project', projectId: 'pc_proj_abc' });
// → { sampleSize, thresholdMet, median, p25, p75, medianHuman, ... }get_setup_instructions (NEW)
Get setup and configuration instructions for all supported agents.
Example:
await mcp.callTool('get_setup_instructions', {});Slack and Microsoft Teams integrations
Pincushion can notify Slack or Microsoft Teams through project-scoped incoming webhooks. The defaults are intentionally quiet and Figma-inspired: notify when a pin is ready for implementation, when someone is @mentioned, and when a collaborator adds follow-up on work already being handled. Every newly dropped pin and every resolution are opt-in events.
Recommended use cases:
Developer channel:
pin_readyandfollow_upDesign or PM channel:
mentionand optionallyresolvedLaunch or QA channel:
pageUrlPatternspluspin_ready,follow_up, andresolvedTemporary incident channel: enable a focused subscription, then pause it after the ship window
Example:
await mcp.callTool('configure_collaboration_integration', {
projectId: 'my-project',
provider: 'slack',
webhookUrl: 'https://hooks.slack.com/services/...',
targetLabel: '#product-feedback',
events: ['pin_ready', 'mention', 'follow_up'],
pageUrlPatterns: ['staging.example.com/checkout'],
sendTest: true
});For Slack, use create_slack_install_link when the hosted Slack app secrets are configured. It returns an Add-to-Slack URL; after approval, Slack returns the incoming webhook and Pincushion stores it automatically.
Use list_collaboration_integrations to audit configured destinations, remove_collaboration_integration to disconnect one, and preview_collaboration_notification to see the payload shape before adding a real webhook. Webhook URLs are stored server-side and returned only as masked values.
Auto-Agent Loop (Optional)
For agents that don't watch the file system (Claude Code, Cursor, generic),
agent-loop.mjs polls .feedback/.agent-queue/ and dispatches new pins
to the configured agent automatically.
# from inside the pincushion-mcp directory
npm run agent-loop -- --project-dir /path/to/your/project
# or directly
node agent-loop.mjs --project-dir /path/to/your/project [--agent claude-code|cursor|generic] [--interval 3000]The bridge (server.js) writes one trigger file per approved pin into
.feedback/.agent-queue/. The loop reads them, builds a prompt with
the pin's thread + element selector, and shells out to the chosen agent.
The agent uses MCP tools (claim_pin → fix → fix_and_resolve) and
the queue file is removed when the pin closes.
detectAgent() auto-detects claude or cursor on the PATH; falls
back to generic (writes the prompt to .feedback/.agent-prompt and
stdout). Run with --interval 3000 to control poll cadence.
Local File Structure
The server reads annotations from .feedback/ in your project:
.feedback/
├── annotations/
│ ├── example-com-login.json
│ ├── example-com-dashboard.json
│ └── ...
└── index.jsonEach annotation file contains:
{
"pageUrl": "https://example.com/login",
"pageTitle": "Login",
"annotations": [
{
"id": "ann_abc123",
"status": "open",
"priority": "high",
"tags": ["design", "accessibility"],
"createdAt": "2026-03-19T10:30:00Z",
"element": {
"lwcComponent": "wmlLoginForm",
"selector": ".login-button",
"textContent": "Sign In"
},
"thread": [
{
"author": "Design Team",
"timestamp": "2026-03-19T10:30:00Z",
"body": "Button label should say 'Sign In' not 'Login'",
"type": "comment"
}
]
}
]
}Supabase Sync
To sync annotations with a remote Supabase database:
Set up a Supabase project at supabase.com
Create an
annotationstable with columns matching the annotation schemaGenerate an API key from your project settings
Configure the server with
--sync-urland--api-key
Example:
npx pincushion-mcp \
--project-dir . \
--sync-url https://your-project.supabase.co/rest/v1 \
--api-key sb_project_key_abc123...The server merges local .feedback/ files with remote data, with remote taking precedence on newer updates.
Pro License
Pincushion Pro includes additional features. Activate with --license-key:
npx pincushion-mcp --project-dir . --license-key YOUR_PRO_KEYTroubleshooting
"Module not found" error
Make sure you have Node.js 18+ installed:
node --versionInstall dependencies:
npm install @modelcontextprotocol/sdkAnnotations not appearing
Check that .feedback/ exists in your project directory:
ls -la .feedback/If it doesn't exist, create it and add some test annotations, or the extension will create it when you pin your first feedback.
Supabase sync not working
Verify your credentials:
curl -H "x-api-key: YOUR_API_KEY" \
https://your-project.supabase.co/rest/v1/annotationsAgent can't find the server
In your agent config, use the full path to pincushion-mcp:
which pincushion-mcp
# Use the output path in your configOr use npx to let it find the package:
{
"command": "npx",
"args": ["pincushion-mcp", "--project-dir", "."]
}Development
Clone the repository and install dependencies:
git clone https://github.com/jcooley8/pincushion-plugin.git
cd pincushion-plugin
npm installRun the server:
npm startOr with test data:
npm start -- --project-dir ./test-feedbackLicense
MIT License. See LICENSE file for details.
Support
Issues: GitHub Issues
Docs: Pincushion Documentation
Changelog
v1.0.0 (March 2026)
Initial release
Support for Cursor, Claude Desktop, Claude Code, VS Code, Windsurf, Antigravity
Local
.feedback/file supportSupabase remote sync
REST API wrapper for non-MCP clients
New tools:
fix_and_resolve,get_setup_instructions
Available Tools
39 toolsadd_agent_replyB
Add a reply to an annotation thread (e.g. to ask a clarifying question or note a finding).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The reply message body | |
| author | No | Author name (defaults to "AI Agent") | |
| annotationId | Yes | The annotation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only states that a reply is added, implying a creation operation, but fails to mention critical details such as required permissions, whether the operation is idempotent, any side effects (e.g., notifications), or the response format. This lack of transparency increases the risk of misuse.
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 a single sentence that efficiently conveys the tool's purpose and a usage hint. Every word serves a purpose, with no redundancy or irrelevant details. This makes it quick for an AI agent to parse and understand.
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 simple tool with three parameters and no output schema, the description provides the essential purpose and usage hint. However, it omits what the tool returns (e.g., the created reply object or a success indicator), which would help the agent confirm the action's result. Given the tool's simplicity, the gap is moderate.
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 input schema has 100% description coverage for all three parameters, so the schema already documents them sufficiently. The description adds no additional semantic context about the parameters, neither clarifying defaults (like author defaults to 'AI Agent') nor explaining allowed values. Under high schema coverage, a baseline score of 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?
The description clearly states the verb ('Add') and the resource ('reply to an annotation thread'), and provides concrete examples ('ask a clarifying question or note a finding'), making the tool's purpose clear. However, it does not explicitly distinguish this tool from similar siblings like 'add_bot_reply', which may share the same resource but differ in actor or intent.
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 description gives an example of when to use the tool ('to ask a clarifying question or note a finding'), implying a conversational or investigative context. But it does not specify when not to use it, or mention alternative tools (e.g., add_bot_reply) for bot-generated replies, leaving the agent with limited guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_bot_replyA
Post a Pincushion AI reply to a pin's thread. Hardcodes author="Pincushion AI" and authorEmail="pincushion-bot@pincushion.io" so the Chrome extension applies bot styling. ONLY call from the /pincushion-replies flow — never as a generic reply. Refuses to post if the latest thread message is already bot-authored (defense-in-depth idempotency).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Reply text. Concrete, useful, on-brand. <2 short paragraphs. Same tone constraints as the critic — no UX-blog hedging. | |
| annotationId | Yes | The pin to reply on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses the hardcoded author fields, bot styling trigger, and idempotency check, but omits side effects or response details.
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 clear, front-loaded sentences with no waste. Each sentence adds critical information.
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?
Despite no output schema, the description covers purpose, constraints, and idempotency. Lacks return value details but sufficient for a simple creation tool.
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 baseline is 3. The description adds constraints for 'body' (paragraph limits, tone) but mostly reinforces existing schema descriptions.
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 clearly states the verb ('Post') and resource ('reply to a pin's thread'), and distinguishes itself from sibling 'add_agent_reply' by hardcoding author fields.
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?
Explicitly restricts usage to the /pincushion-replies flow and mentions idempotency conditions, but does not explicitly name alternative tools for generic replies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_memberA
Add a collaborator to a PinCushion project. Developers consume a paid seat and can implement pins. Commenters are free and unlimited. Returns an upgrade prompt if the seat limit is reached.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name (defaults to email prefix) | |
| role | Yes | Role: "developer" (paid seat, can implement) or "commenter" (free, can drop pins and comment) | |
| Yes | Email of the person to add | ||
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, disclosing that developers consume paid seats, commenters are free, and a prompt appears if the seat limit is reached. This is comprehensive for a simple add tool.
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, front-loaded with purpose, followed by role details and seat limit warning. Every sentence serves a purpose with no waste.
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 tool's simplicity and no output schema, the description explains key outcomes (upgrade prompt). Covers roles, seat limits, and default name behavior adequately.
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 covers all four parameters with descriptions (100% coverage). The description adds marginal value, e.g., 'name defaults to email prefix'. Baseline of 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?
The description clearly states 'Add a collaborator to a PinCushion project' with a specific verb (add) and resource (collaborator). It distinguishes from siblings like 'remove_member' and 'list_members' by specifying roles and seat limits.
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?
Provides guidance on when to use (adding members) and differentiates between developer (paid) and commenter (free) roles. Mentions seat limit behavior but lacks explicit exclusions or alternatives for member management.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_pinA
Mark a pin as approved for implementation. Only approved pins should be implemented by agents. This transitions the pin from "open" to "approved" status.
| Name | Required | Description | Default |
|---|---|---|---|
| approvedBy | No | Who approved the pin (e.g. "Josh") | |
| annotationId | Yes | Pin ID to approve (e.g. "ann_abc123") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It states the status transition but omits side effects, reversibility, or authorization requirements. Adequate but minimal.
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 efficient sentences, front-loaded with action and outcome. No wasted words.
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 no output schema and no annotations, the description covers purpose, effect, and a usage hint (only approved should be implemented). Could mention prerequisite of 'open' status, but implicitly covered. Generally complete for a simple state transition tool.
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?
Input schema has 100% coverage; description adds no additional meaning to parameters beyond what schema already provides. Baseline score 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?
Clearly states the verb 'approve' on the resource 'pin', with explicit outcome of transitioning from 'open' to 'approved' status. It distinguishes from sibling tools like 'claim_pin' or 'implement_approved_pins'.
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?
Implies use before implementation via 'Only approved pins should be implemented by agents.' but lacks explicit when-not-to-use or alternatives (e.g., 'assign_pin_to_agent' or 'claim_pin').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_pin_to_agentA
Assign a pin directly to your local coding agent. Promotes the pin to "ready" (if not already), marks it as pending_implementation, and drops a trigger file in .feedback/.agent-queue/ that agent-loop.mjs picks up and dispatches to Cursor / Claude Code / Codex. This is the first-class "assign to agent" action — turns a pin into agent work in one call. Workflow: assign_pin_to_agent → (agent-loop dispatches) → fix_and_resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| assignedBy | No | Who assigned it (defaults to "Unknown") | |
| annotationId | Yes | The pin ID to assign (e.g. "ann_abc123") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Details side effects: promotes pin, marks pending, drops trigger file; discloses integration with agent-loop.mjs and Cursor/Claude Code/Codex.
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, each adding value; front-loaded with main action.
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?
Covers action and side effects; no output schema but return value not critical for understanding.
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 covers both params with descriptions; description adds context that pin becomes agent work.
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?
Clearly states it assigns a pin to the local coding agent, promotes status, and triggers dispatch. Distinguishes from siblings by being the direct assign-to-agent action.
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?
Describes workflow but doesn't explicitly mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_pending_slack_installA
LEGACY FALLBACK. Since May 2026, Slack installs auto-link to a Pincushion license when the installer's Slack email matches, and channels are subscribed via /pincushion subscribe inside Slack — no claim token needed. This tool only applies when the installer's Slack email did NOT match an active Pincushion license at install time (the user sees a claim_token on the post-install page in that case). Pass claimToken (the on-page token, valid 7 days) + projectId to attach the webhook. Calling with no claimToken returns the new flow instructions instead of an error.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Subscription name. Default: default. | |
| events | No | Optional events override. Defaults to whatever the storefront install captured (pin_ready, mention, follow_up). | |
| projectId | Yes | The Pincushion project ID to attach the webhook to. Caller must be owner or editor. | |
| claimToken | Yes | The one-time token shown on the post-install page after Add to Slack. | |
| targetLabel | No | Optional human-readable label override; defaults to the Slack channel name from install. | |
| pageUrlPatterns | No | Optional URL substrings for page-specific subscriptions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of behavioral disclosure. It reveals that the tool is a legacy fallback, the claimToken is valid for 7 days, and alternative behavior without the token. It does not detail success/failure responses or side effects, but the given information is sufficient for safe invocation.
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 front-loaded with 'LEGACY FALLBACK' to set immediate context. It efficiently explains the new flow before describing the tool's purpose, avoiding confusion. While slightly verbose, every sentence provides unique value, earning a score of 4 for structure and conciseness.
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 tool's complexity (6 parameters, legacy fallback scenario) and lack of output schema, the description covers the key aspects: when it applies, parameter details, and behavior edge cases. It lacks explicit return value description, but the mention of 'attach the webhook' and 'returns new flow instructions' provides sufficient context for an agent to understand the tool's effect.
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 baseline is 3. The description adds some context for claimToken (one-time, 7-day validity) and projectId (owner/editor requirement), but these details are marginal. Other parameters are adequately described in the schema, and the description does not significantly enhance understanding beyond the schema.
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 clearly identifies this as a legacy fallback tool for linking Slack installs to a Pincushion license when automatic matching fails. It specifies the action (attach webhook via claimToken and projectId) and distinguishes it from the modern auto-link flow, providing high purpose clarity.
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 description explicitly states when to use this tool (only when the installer's Slack email did not match a Pincushion license at install time) and when not to use (since May 2026, auto-link is preferred). It also explains the behavior when calling without a claimToken (returns new flow instructions), offering clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_pinA
Claim an actionable pin before starting work on it. Transitions the pin from "pending_implementation" to "implementing" so other agents know it is being worked on. Call this before making changes, then call fix_and_resolve when done.
| Name | Required | Description | Default |
|---|---|---|---|
| implementer | No | Name of the agent/person claiming it (defaults to "AI Agent") | |
| annotationId | Yes | The annotation ID to claim (e.g. "ann_abc123") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided so description carries full burden. It discloses the state transition and coordination purpose. Missing details on error cases (e.g., already claimed pin) but sufficient for typical use.
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, no filler. Front-loaded with purpose, then state info, then workflow instructions. Every sentence earns its place.
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 simple state-transition tool with no output schema, description covers purpose, workflow, and state change. Could mention handling of already claimed pins, but overall adequate.
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% with descriptions for both parameters. Description does not add extra meaning beyond what schema provides, so baseline 3.
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?
Description clearly states the tool claims an actionable pin, transitions state, and is part of a workflow. It distinguishes from siblings like 'fix_and_resolve' and 'approve_pin' by specifying the before-start context.
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?
Explicitly says when to call (before starting work, before changes) and provides next step (fix_and_resolve). Lacks explicit when-not-to-use or alternatives beyond the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_critique_requestA
Mark a critique_queue request as completed after the critic subagent has run on its page URLs. Pass the request id (from get_pending_critiques) and the total pin_count produced. The server scopes the update to your license — you cannot complete another tenant's request even if you know the id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The critique_queue row id from get_pending_critiques. | |
| pinCount | No | Total bot pins created for this request across all page URLs. Defaults to 0 if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses license scoping and default pin_count, but lacks details on error conditions (e.g., invalid id, already completed) or side effects. Adequate for a simple update but could be more thorough.
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 efficient sentences with no fluff. Purpose, prerequisite, and a key constraint are front-loaded. Every sentence earns its place.
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 simple two-parameter tool with no output schema, the description covers purpose, prerequisite, and scoping. Missing details on idempotency or status preconditions, but overall complete enough within the broader toolset context.
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% with clear descriptions. The description adds minimal extra value by tying id to get_pending_critiques and explaining pin_count's purpose. Per guidelines, baseline 3 applies.
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 clearly states the tool marks a critique_queue request as completed after the critic subagent runs, using the request ID from get_pending_critiques. It distinguishes itself from siblings like get_pending_critiques and create_critique_pin by focusing on completion.
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?
Explicitly states when to use ('after the critic subagent has run') and provides a critical scoping constraint (cannot complete another tenant's request). Does not list alternative tools for other actions, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_collaboration_integrationA
Connect a Pincushion project to Slack or Microsoft Teams using an incoming webhook. Low-noise defaults mirror Figma-style subscriptions: notify on pins marked ready, @mentions, and follow-up comments on work already being handled. Raw new-pin and resolved updates are opt-in.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Subscription name. Use multiple names for separate project/page subscriptions. Default: default. | |
| events | No | Events to send. Default: pin_ready, mention, follow_up. | |
| status | No | Pause without deleting the subscription. Default: active. | |
| provider | Yes | Destination provider. | |
| sendTest | No | When true, posts a one-time test message to the webhook after saving. | |
| projectId | Yes | The Pincushion project ID. | |
| webhookUrl | Yes | Slack incoming webhook URL or Microsoft Teams incoming webhook/workflow URL. Stored server-side and not returned in full. | |
| targetLabel | No | Human label for the destination, such as #design-review or Teams QA channel. | |
| pageUrlPatterns | No | Optional URL substrings for page-specific subscriptions. Empty means all project URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It mentions test message and storage behavior but lacks details on mutation side effects, permissions, or error handling.
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 concise sentences, front-loaded with purpose, no fluff.
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 9 parameters and no output schema, the description covers defaults and some parameters but doesn't describe return value, error conditions, or success confirmation.
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%, baseline 3. Description adds value by explaining 'Figma-style subscriptions' and that webhookUrl is stored and not returned, enhancing semantic understanding.
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 clearly states the verb 'Connect' and the resources 'Pincushion project to Slack or Microsoft Teams using an incoming webhook.' It defines default behavior and distinguishes from sibling tools like list and remove.
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?
Description explains the low-noise defaults and opt-in events, guiding when to use. It doesn't explicitly mention alternatives or when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_projectA
Register a Pincushion project and associate it with your app's URLs. Once registered, anyone visiting those URLs with the Pincushion extension installed will automatically see the pin UI — no meta tag or manual setup needed. Pass both your local dev URL and your live/staging URL so the extension activates in all environments. Optional traceability knobs (commitTrailers, attributionComments, recordCommitSha) control how implemented pins are recorded in git and source — see each property's description. NOTE for read-only use cases: if you only need to look up brand context, URLs, or other project metadata, call get_project_context instead — configure_project mutates state (upserts the project row, syncs to cloud, creates a deploy hook, idempotently inserts the bot member).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable project name (e.g. "Superbill Pro", "My SaaS Staging") | |
| urls | No | URLs or origins where this project lives. Include both local and live environments (e.g. ["localhost:3000", "superbill-pro.vercel.app"]). The extension activates automatically on any matching URL. | |
| autoCritique | No | When true (default for Pro/Team), every deploy-hook trigger enqueues an AI critique request the dev can run via /critique-latest-deploy. Set false to opt out without dropping plan. Free licenses ignore this — auto-queue is a Pro/Team feature. | |
| brandContext | No | LEGACY single-blob brand context (max 2048 chars). Kept for back-compat. Prefer the layered `critiqueContext` + `critiquePolicy` + `critiqueSignals` triplet — `get_project_context` falls back to brandContext only when no compiled critique context exists. | |
| commentAccess | No | Who can drop pins on this project. "open" (default — Free, Pro, Team) — anyone with the URL. "domain" (Pro/Team) — only emails in the allowedDomains list. "invited" (Pro/Team) — only emails added via add_member. Free projects can only use "open"; the server returns 402 plan_required if a Free license attempts "domain" or "invited". | |
| allowedDomains | No | Bare domains permitted to comment when commentAccess is "domain" (e.g. ["acme.com", "acme.co.uk"]). Required for "domain" mode, ignored otherwise. | |
| commitTrailers | No | Which trailers go in the body of pin commits. "minimal" (default): Pin-ID only — today's behavior. "standard": adds Reviewed-By with the pin's approver, suppressed when the approver is the same person as the committer. "full": standard plus Pincushion-Pin-Url for terminal-first workflows. Per-shell override: set env PINCUSHION_TRAILERS=off to force minimal regardless of project setting. | |
| critiquePolicy | No | User-editable critique policy override (max 4096 chars). Survives recompiles, so users can hand-tune what good critique looks like for their project. Example: "Weight copy concerns 2x. Ignore AAA contrast — audience is technical developers. Reject playful microcopy; tone is restrained, confident." Empty / null means "no override — use signals alone". | |
| critiqueContext | No | Compiled critique brief (max 8192 chars). The Pincushion AI critic loads THIS into its prompt at pin time. Produced by the dev agent at /setup or /refresh-brand by synthesizing `critiqueSignals` + `critiquePolicy` + recent resolved-pin patterns into a tight markdown brief. Updating this stamps `critiqueContextCompiledAt` + a pin-count baseline for staleness detection. Pass null to clear and force a recompile. | |
| critiqueSignals | No | Raw brand signals the dev agent gathered from the repo at /setup or /refresh-brand. Shape is flexible JSONB — recommended keys: { framework: e.g. "next-app-router"|"astro"|"static-html", projectType: "marketing"|"app"|"mixed", pages: [{ url, source, slice, headings, ctas, components, bodyExcerpt }], themeTokens, brandDocs, readmeExcerpt, competitors, mission, audience, tone, tenantContexts (reserved/null in v1 — future multi-tenant SaaS support keyed by pageUrl prefix), sources }. Retained for traceability + future recompiles; the AI critic does NOT read this directly — it reads the compiled `critiqueContext` instead. | |
| recordCommitSha | No | Whether fix_and_resolve stores the implementing commit SHA on the pin for the dashboard backlink. Default: true. Invisible plumbing — has no source-code or commit-log cost. Set false only if you specifically don't want commit SHAs synced to Pincushion. | |
| attributionComments | No | When the implementing agent should leave inline source comments. "off" (default): never — keep code clean, rely on the commit. "context-warrants": one-line comment ONLY when the pin captures a non-obvious WHY (a constraint, intent, or rationale not self-evident from the diff). "always": every Pincushion-implemented change gets a comment (escape hatch for teams that want maximum visibility and accept the rot risk). Format is fixed: // Pincushion <pinId>: <one-line WHY>. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully covers behavioral traits: it mutates state (upserts project row, syncs to cloud, creates deploy hook, inserts bot member), lists traceability knobs (commitTrailers, attributionComments, recordCommitSha), and mentions idempotent insertion. No contradictions.
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 a single paragraph front-loaded with the main action and benefit, then details and usage note. Every sentence adds value; no wasted words. Efficiently structured for scanning.
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 12 parameters, no output schema, and high complexity, the description covers purpose, mutation behavior, and usage guidance. However, it does not specify the return value or error conditions (e.g., plan restrictions for commentAccess), which would enhance completeness.
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% with each parameter documented. The description adds context beyond the schema, e.g., explaining why both local and live URLs are needed ('so the extension activates in all environments') and summarizing traceability knobs. Slightly above baseline.
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 clearly states the action: 'Register a Pincushion project and associate it with your app's URLs.' It uses a specific verb (register/configure) and resource (project), distinguishing it from the read-only sibling `get_project_context`.
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?
Explicitly notes when NOT to use: 'if you only need to look up brand context, URLs, or other project metadata, call `get_project_context` instead.' Also explains that this tool mutates state, providing clear context for when to choose alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_critique_pinA
Create a pin authored by Pincushion AI. ONLY call this from the pincushion-critic subagent or the /critique-latest-deploy flow — never from a regular user prompt, since the bot voice is reserved for AI-driven UI/copy/a11y feedback. Each call should produce one tasteful, high-signal pin (max 3 per page in a critique run). The body must be concrete and actionable: name the specific element + the specific problem + the suggested fix in <40 words. Forbidden: layout philosophy, business-model commentary, generic "consider improving hierarchy" advice. Always read the project's critique context (ai.critique.effectiveContext from get_project_context — falls back to brandContext when no compiled brief exists) before drafting the body so the critique is on-brand. If ai.critique.staleness is "stale" or "missing", suggest the user run /refresh-brand before continuing.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The critique itself. Concrete + actionable, <40 words, names the element and proposes a fix. This becomes the first thread message on the pin. | |
| tags | No | Optional tags. "pincushion-ai" is added automatically. Add domain tags like "a11y", "copy", "deploy:<hash>" for traceability. | |
| pageUrl | Yes | Full URL of the page being critiqued (e.g. "http://localhost:3000/dashboard"). | |
| selector | No | CSS selector for the element the critique targets. The Chrome extension uses this to position the pin since the bot has no live page coords. Be specific (e.g. 'main button[type="submit"]' not just 'button'). | |
| severity | No | "high" = ships-blocking (broken contrast, broken keyboard nav, misleading CTA copy). "medium" = worth-fixing (minor copy issues, cramped spacing, polish opportunities). 'low' is intentionally not allowed — bot pins must be worth acting on. | |
| pageTitle | No | Optional page title for the .feedback file header. Defaults to pageUrl if omitted. | |
| projectId | No | Project ID to associate the pin with. Defaults to the MCP server's configured project. | |
| componentName | No | Optional component name (e.g. LWC component, React component) for grouping. Used by get_component_feedback. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility. It discloses that the pin must be concrete/actionable, forbids certain topics, and requires reading project context. However, it does not explicitly mention the return value or side effects beyond creating a pin, which marks a minor gap.
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 succinct (~120 words) yet packed with essential rules. It front-loads the invocation restriction, then provides actionable parameter details and process prerequisites. No superfluous sentences; every part earns its place.
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?
The description covers usage, parameter constraints, prerequisite context checks, and forbidden content. Without an output schema, it could briefly mention expected return (e.g., the created pin ID), but the overall completeness is high given the tool complexity.
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?
All 8 parameters have schema descriptions (100% coverage), but the description adds significant value: it gives concrete examples ('body <40 words'), clarifies automatic tag addition, specifies selector specificity, and explains severity thresholds. This enriches the schema and helps the agent craft correct calls.
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 clearly states the tool creates a pin authored by Pincushion AI and distinguishes it from user-driven actions. It specifies the verb ('Create'), the resource ('pin'), and the context ('AI-driven UI/copy/a11y feedback'), making it unambiguous among sibling tools like approve_pin or claim_pin.
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?
Explicit guidance is provided: 'ONLY call this from the pincushion-critic subagent or the /critique-latest-deploy flow — never from a regular user prompt.' It further states constraints like 'max 3 per page' and prerequisites like checking 'ai.critique.staleness', leaving no ambiguity about when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invite_linkA
Generate a Figma-style shareable invite URL for a project. The recipient opens it, enters their name + email, and joins as the specified role. Returns the share URL plus expiry. Owners can mint Editor and Commenter links; Editors can mint Commenter links only. Editor links consume a paid seat on redemption.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Role granted on redemption. Default: commenter (free, unlimited). | |
| maxUses | No | How many people can redeem this link. 0 = unlimited. Default: 0. | |
| projectId | Yes | The project ID | |
| expiresInDays | No | Days until the link expires. 1–365. Default: 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses redemption flow, role restrictions, seat consumption, and return values. Missing details on link revocation or error handling.
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 sentences, front-loaded with the action. Every sentence provides unique value without redundancy.
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?
Covers core behavior, return values, and authorization. Lacks mention of prerequisites (e.g., project membership) or error conditions, but sufficient for typical use.
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?
All 4 parameters are described in schema (100% coverage). Description adds value by explaining role permissions, default values, and the meaning of maxUses=0, supplementing schema info.
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 clearly states the tool generates a Figma-style shareable invite URL for a project, specifying verb and resource. It distinguishes itself from sibling tools like add_member by focusing on link generation rather than direct addition.
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?
Provides authorization context (owners vs editors) and cost implications (Editor links consume paid seats). However, lacks explicit comparison to alternatives like add_member for direct user addition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_slack_install_linkA
Generate an Add-to-Slack OAuth URL pre-bound to a project. Most users should prefer the public storefront URL (also returned, https://pincushion.io/install/slack) — since May 2026, that auto-links to a Pincushion license when the installer's Slack email matches, and channels are subscribed afterward via /pincushion subscribe inside Slack. Use this agent-flow URL only when you want the install to attach to one specific project up front.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Subscription name. Default: default. | |
| events | No | Events to send. Default: pin_ready, mention, follow_up. | |
| projectId | Yes | The Pincushion project ID. | |
| targetLabel | No | Optional expected channel label, used only before Slack returns the selected channel. | |
| pageUrlPatterns | No | Optional URL substrings for page-specific subscriptions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It explains the generation of the URL, the pre-binding to a project, and contrasts with the public URL behavior. It does not mention response format or side effects, but covers key behavioral aspects.
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 a single paragraph that is relatively concise (4-5 sentences), front-loading the main purpose and usage guidelines. It could be slightly more structured, but it is efficient and avoids wordiness.
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 5 parameters (1 required), 100% schema coverage, and no output schema, the description adequately explains the tool's context and when to use it. It lacks detail on the response, but the core context for selection and invocation is covered.
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%, so baseline is 3. The description does not add extra meaning to individual parameters beyond what the schema already provides, but it contextualizes the overall purpose. No additional parameter insights are given.
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 clearly states the tool generates an Add-to-Slack OAuth URL pre-bound to a project, with specific verb and resource. It distinguishes from the public storefront URL, which is also mentioned, making the purpose unambiguous.
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 description explicitly advises that most users should prefer the public storefront URL and to use this tool only for attaching to a specific project. This provides clear when-to-use and when-not-to-use guidance, naming an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fix_and_resolveA
Resolve a pin after applying a code fix. Transitions the pin directly to "resolved" status so it disappears from the stakeholder view. No thread comment is added — the commit is the record of the fix. Pass commitSha (from git rev-parse HEAD), branchName (git branch --show-current), and prUrl (from gh pr view --json url -q .url if a PR was opened) so the Pincushion dashboard can link the pin to the implementing commit, branch, and PR.
| Name | Required | Description | Default |
|---|---|---|---|
| prUrl | No | Optional pull request URL (GitHub/GitLab/Bitbucket). Validated against PR-URL shape before storage. Surfaces as a clickable "Resolved in PR #N" link on the pin. | |
| filePath | No | Optional file path where the fix was made | |
| commitSha | No | Optional git commit SHA that implemented the fix. Stored on the annotation for bidirectional pin↔commit traceability when the project has recordCommitSha enabled (default: true). | |
| branchName | No | Optional branch name the fix was implemented on. Surfaces on the pin in the dashboard so stakeholders can see where the change shipped. | |
| lineNumber | No | Optional line number of the fix | |
| annotationId | Yes | The annotation ID to fix | |
| fixDescription | Yes | Description of the fix applied (e.g. "Updated button label to match design spec") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: transitions to 'resolved' status, disappears from stakeholder view, no thread comment added, and commit linking. No annotations provided, so description carries full burden; it covers major effects but omits potential side effects or reversibility.
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?
Highly concise: three sentences packed with purpose, behavior, and parameter derivation instructions. No wasted words, front-loaded with essential information.
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 7 parameters and no output schema, the description adequately covers purpose, behavior, and parameter usage. Lacks return value details, but tool likely returns a success/error status implicitly.
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% (baseline 3). Description adds meaningful context for commitSha, branchName, prUrl (e.g., shell commands to derive values). For other params, it restates schema descriptions but adds linking behavior context.
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 clearly states the verb 'resolve' and the resource 'a pin after applying a code fix'. It differentiates from siblings like 'resolve_annotation' by emphasizing the post-fix scenario and the lack of a thread comment.
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?
Provides explicit context on when to use (after a code fix) and instructions for populating commitSha, branchName, prUrl. However, it does not explicitly state when not to use or compare to alternatives like 'resolve_annotation'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_actionable_pinsA
Get all pins waiting for developer attention. Returns three categories: (1) "auto-agent" — pins explicitly sent to the agent via "Send to Agent" or YOLO mode; (2) "follow-up" — previously implemented pins with new user comments; (3) "review" — open reviewer comments that a developer has not yet picked up (the standard team collaboration queue). Use this as your starting point for both auto-agent workflows and manual review sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Optional filter to return only pins of a specific mode. Omit to return all. | |
| projectId | No | Optional project ID to filter by. If omitted, returns actionable pins across all projects. | |
| mentionedUser | No | Optional username to filter by @mention. Returns only pins where the thread contains "@username". Leading @ is optional (e.g. "josh" or "@josh"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the three categories of pins returned but does not mention potential behaviors like pagination, sorting, performance implications, or whether the operation is read-only (though implied by 'get'). The description is adequate but not exhaustive.
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 two sentences plus a bulleted list, highly concise and front-loaded. Every sentence earns its place: the first states the overall purpose, the list details the categories, and the final sentence gives usage guidance. No redundant or filler content.
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 tool's simplicity (three optional parameters, no output schema), the description covers the key aspects: what it returns, the three categories, and usage context. It might be missing information on ordering or default limit, but for basic usage it is complete enough.
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%, so the baseline is 3. The description adds value by explaining the semantics of the 'mode' parameter through the three categories and their meanings (e.g., 'auto-agent' corresponds to pins sent via Send to Agent or YOLO mode). This goes beyond the enum labels in the schema.
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 tool's purpose ('Get all pins waiting for developer attention') and distinguishes three clear categories that align with the 'mode' parameter. It also positions the tool as the starting point for both auto-agent and manual workflows, clearly differentiating it from sibling tools like get_pending_critiques or get_selected_pins.
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 description provides clear context for when to use this tool ('starting point for both auto-agent workflows and manual review sessions'), implying it is the primary entry point for actionable pins. However, it does not explicitly state when not to use it or mention specific alternatives among sibling tools, which would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_annotationsA
Retrieve annotation pins from the .feedback/ directory. Filter by page URL, LWC component name, or status. Use this to understand what feedback exists before making changes.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by status | |
| pageUrl | No | Filter by page URL (partial match OK). e.g. "WML_Care_Home" | |
| componentName | No | Filter by LWC component name. e.g. "wmlHomePage" or "c-wml-home-page" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavior. It indicates a read operation ('retrieve' and 'understand'), but does not elaborate on side effects, authorization, or data freshness. The description is clear but not rich.
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 two sentences, front-loaded with the core action, and succinctly provides purpose and usage guidance. No extraneous content.
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 no output schema, the description does not specify return format, pagination, or ordering. It is adequate for basic understanding but lacks details about what the response contains, which is important for a retrieval tool.
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%, so the parameters are already described. The tool description merely restates the filter options without adding new semantic context or examples beyond what the schema provides.
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 clearly states the tool retrieves annotation pins from the .feedback/ directory with filtering options (page URL, LWC component name, or status). It distinguishes itself from siblings like search_annotations by specifying the directory and filter types, but does not explicitly differentiate usage from other read 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?
The description says 'Use this to understand what feedback exists before making changes,' providing a usage context. However, it lacks explicit when-not-to-use guidance or alternative tools, leaving the choice to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_component_feedbackA
Get all feedback pins targeting a specific LWC component, with a plain-language summary ready for implementation. Returns element selectors, comments, and thread history.
| Name | Required | Description | Default |
|---|---|---|---|
| componentName | Yes | LWC component name. e.g. "wmlHomePage", "wmlAgentSidebar", or "c-wml-home-page" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description provides clear behavioral context: it retrieves feedback pins and returns element selectors, comments, and thread history. It does not mention destructive or mutating actions, which aligns with the tool's name. Minor gap: no disclosure of whether resolved pins are included.
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 that efficiently convey purpose, benefit, and return contents. No filler or redundancy.
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 tool with no output schema, the description explains the return value reasonably well. However, it could be more precise about the return structure (e.g., list of pin objects) and mention any default filters like status.
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% with a clear description for componentName. The tool description reinforces that the parameter is the target component but adds no new semantic detail beyond the schema. 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?
The description clearly states the tool retrieves feedback pins for a specific LWC component, with a plain-language summary. It distinguishes from siblings like get_actionable_pins and get_feedback_summary by specifying the component focus and the inclusion of a summary.
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?
No explicit guidance on when to use this tool versus alternatives such as get_actionable_pins or get_feedback_summary. The description implies it is for component-specific feedback but omits selection criteria or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feedback_summaryA
Get a high-level rollup of all open feedback: counts by status, page, and component. Use this to plan what to address first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Clearly states it's a read operation ('Get') providing a rollup. Does not mention rate limits or data freshness, but the behavior is simple and non-destructive.
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 concise sentences. First defines what the tool does, second gives usage advice. No redundancy or 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?
Given zero parameters and no output schema, the description sufficiently conveys the tool's purpose and result. Minor gap: doesn't specify if the summary is paginated or sorted, but acceptable for a high-level rollup.
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?
No parameters defined; schema coverage is 100% by default. The description adds value by explaining that the result includes counts by status, page, and component, providing context beyond the empty schema.
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?
Clear verb 'Get' and resource 'feedback summary', specifies rollup of open feedback with counts by status, page, component. Distinct from siblings like get_component_feedback which focuses on individual component feedback.
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?
Explicitly says 'Use this to plan what to address first', providing a usage context. Does not list when not to use it or alternative tools, but the purpose is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_implementation_packetA
Get a single implementation packet for one page URL. Useful when you want to batch-fix one page at a time. Returns the same shape as a single entry in implement_approved_pins.packets — pins, aggregated selectors, suggested branch, traceability config. Matches by exact URL or partial substring.
| Name | Required | Description | Default |
|---|---|---|---|
| pageUrl | Yes | The page URL to fetch the packet for (exact match or substring, case-insensitive). | |
| projectId | No | Optional project ID to scope the search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It explains matching (exact or substring) and return shape, but does not mention that the operation is read-only, any required permissions, or potential side effects. For a getter, this is adequate but leaves gaps.
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 contains four sentences, each with distinct value: purpose, usage context, return shape, and matching logic. It is front-loaded, no redundancy, and keeps the definition tight.
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 no output schema, the description details the return structure via cross-reference, helping the agent understand output. Parameters are fully covered. Missing details on error handling (e.g., no match) and potential multiple matches, but overall sufficient for a simple retrieval tool.
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% with both parameters described. The description repeats the matching behavior for 'pageUrl' already in the schema, adding no new semantic meaning beyond aligning with the purpose. Baseline 3 applies.
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 clearly states it retrieves a single implementation packet for one page URL, specifying the return shape and matching behavior. However, it does not explicitly differentiate from sibling tools like 'get_actionable_pins' or 'implement_approved_pins', relying on implicit context.
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 description notes it is 'useful when you want to batch-fix one page at a time,' which provides usage context. But it does not specify when to avoid using it (e.g., for multiple packets) or name alternatives explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pending_critiquesA
Used by /critique-latest-deploy. Lists pending critique requests queued by the deploy-hook for the current license. Returns request id + page URLs + deploy hash. Newest-first. Free on all plans (the gating happened at enqueue time on the deploy-hook side: only Pro/Team licenses produce queue entries).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Optional project ID filter. Omit to list across all the license's projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavioral traits: return fields (id, page URLs, deploy hash), ordering (newest-first), and pricing/licensing (free, but gating at enqueue). This is comprehensive for a list tool.
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 concise sentences: purpose, return fields, ordering/pricing. No fluff, front-loaded with key information. Every sentence serves a purpose.
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 simple list tool with one optional parameter and no output schema, the description provides sufficient context: return fields, ordering, and licensing. Nothing essential is missing.
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 only parameter, projectId, is already well-described in the input schema (optional filter). The description adds no additional parameter semantics beyond what the schema provides. Schema coverage is 100%, so 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?
The description clearly states it lists pending critique requests, specifies the source (deploy-hook), and the context of the current license. Verb 'lists' and resource 'pending critique requests' are precise. It distinguishes itself from sibling tools like 'complete_critique_request' by focusing on pending items.
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 description implies usage via '/critique-latest-deploy' and notes pricing implications, but does not explicitly contrast with alternative tools like 'complete_critique_request' or 'create_critique_pin'. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_contextA
Read-only lookup of a project's context (name, URLs, brand context, autoCritique flag, traceability settings). Use this whenever you only need to inspect — never mutates, never touches the network. The Pincushion AI critic subagent calls this before generating any pin, since configure_project would otherwise upsert the project, sync to cloud, and create a deploy hook on a typo'd project name. Pass projectId for an exact lookup, name to look up by display name, or no arguments to list all projects in this workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional project display name. Returns the matching project if found, or `availableProjects` if not. | |
| projectId | No | Optional exact project ID. Mutually exclusive with `name`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Clearly states 'never mutates, never touches the network' and that it is a read-only lookup. No annotations provided, so the description fully discloses behavior.
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 well-structured and front-loaded, but slightly verbose with multiple sentences. However, every sentence adds value, so it remains effective.
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?
Despite no output schema, the description lists the returned fields. It covers all three parameter scenarios (projectId, name, none) and gives context on why this tool is preferred over alternatives. Complete for a simple read tool.
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 description adds meaning beyond the schema by explaining how to use projectId for exact lookup, name for display name lookup, and no arguments to list all projects. Schema coverage is 100%, but description enhances utility.
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 clearly states the tool is for read-only lookup of a project's context, listing specific fields (name, URLs, brand context, etc.). It distinguishes from sibling tools like configure_project which mutates.
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?
Explicitly says 'Use this whenever you only need to inspect' and contrasts with configure_project. Provides specific advice for the Pincushion AI critic subagent and explains parameter usage for different lookup scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reply_candidatesA
Used by /pincushion-replies. Returns pins where Pincushion AI should respond, with each candidate tagged by trigger reason. Two triggers: (a) "mention" — the latest thread message contains @pincushion AND was authored by a human; (b) "reply-on-bot-pin" — the pin was originally authored by Pincushion AI and the latest message is from a human. Skips resolved/archived pins and any pin where the latest message is already bot-authored (idempotency). Newest-first ordering so the slash command can pace replies.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Optional project ID to filter by. If omitted, returns candidates across all projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: trigger conditions, idempotency (skip bot-authored latest message), filtering (resolved/archived), and ordering (newest-first). This is comprehensive.
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 front-loaded with purpose, then explains triggers, exclusions, and ordering in a logical flow. It is efficient but the second sentence could be slightly more concise. Overall good structure.
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 only one optional parameter, no output schema, and no nested objects, the description covers all necessary aspects: purpose, trigger conditions, filtering criteria, and ordering. It is complete for the tool's complexity.
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% for the single parameter 'projectId', and the description adds no extra semantics beyond what the schema provides. Baseline of 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?
The description clearly states the tool returns pins where Pincushion AI should respond, tagged by trigger reason ('mention' or 'reply-on-bot-pin'). It distinguishes from sibling tools by specifying its use case for the slash command and the inclusion of trigger tags.
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 description explicitly says 'Used by /pincushion-replies' and details triggers and exclusions (skips resolved/archived, bot-authored). It provides clear context for when to use, though it does not explicitly state when not to use or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_selected_pinsA
Get pins that the developer has selected for implementation from the dashboard or PINS.md checkboxes. Returns the selected pin IDs with full context (element, thread, deep link). Use this to know which pins the developer wants you to work on next.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It describes the return value but does not mention side effects, permissions, rate limits, or whether the operation is safe/idempotent. This is insufficient for an unannotated tool.
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 concise sentences with no redundancy: first defines the tool, second describes output, third provides usage guidance. Each sentence adds value.
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 tool with zero parameters and no output schema, the description is largely complete: source (dashboard/PINS.md), return type (IDs with context), and purpose (know what to work on next). Minor gaps exist (e.g., state requirements, availability), but overall adequate.
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?
There are no parameters, so schema coverage is 100% trivially. The description adds no parameter info because none exist, meeting the baseline of 4.
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 clearly specifies the verb 'Get', the resource 'pins that the developer has selected for implementation', and the scope 'from the dashboard or PINS.md checkboxes'. It distinguishes from siblings like 'get_actionable_pins' by emphasizing 'selected' vs. 'actionable', making the purpose unambiguous.
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 last sentence explicitly tells the agent when to use this tool: 'Use this to know which pins the developer wants you to work on next.' It provides clear context but does not mention when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_setup_instructionsA
Get instructions for setting up and connecting the PinCushion browser extension to this MCP server. Includes configuration examples for Cursor, Claude Desktop, Claude Code, VS Code, Windsurf, and other agents.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden. It clearly indicates a read-only operation ('Get instructions') with no side effects. While it doesn't detail return format or data size, the simplicity of the tool makes this acceptable.
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 well-structured sentences, front-loaded with the main purpose, and each sentence adds value (purpose + examples). No wasted words.
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 no output schema, the description sufficiently explains what the tool returns (instructions with configuration examples). It is complete for a simple information retrieval tool.
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?
No parameters exist, so baseline 4 applies. The description does not need to add parameter info.
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 clearly states the tool retrieves setup instructions for a specific extension, using a clear verb-resource pair. It distinguishes from sibling tools, none of which are about setup.
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 description implies the tool is for obtaining setup instructions and lists example use contexts (various agents). It lacks explicit when-not or alternatives, but given no competing setup tools, it's adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_time_to_fix_metricsA
Compute median + p25/p75 time-to-fix from resolved pins. Returns sample size + threshold flag so callers can honestly hide the metric when the dataset is too small (< 5 resolved pins). This is the marketing proof point that distinguishes Pincushion from "manage feedback" tools — agent-native means fast.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | "project" (default) restricts to one project. "global" computes across all projects accessible in this workspace — used by the landing widget for aggregate proof. | |
| projectId | No | Optional project ID to scope the metrics. Required when scope = "project". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns a sample size and threshold flag, and explains that the threshold allows callers to hide the metric when the dataset is too small (<5 resolved pins). This provides valuable behavioral context beyond the parameter schema.
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 two sentences, but the second sentence is somewhat promotional ('This is the marketing proof point...') and does not add functional information. While not verbose, it could be more concise by removing the marketing fluff.
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?
There is no output schema, so the description should explain the return value structure. It mentions 'sample size and threshold flag' but does not provide details on the exact format or names of fields. For a metrics tool, this leaves some ambiguity for the agent.
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%, so the baseline is 3. The description adds value by explaining the scope parameter in more detail: 'global' is used for the landing widget for aggregate proof, and projectId is required when scope='project'. This goes beyond the schema descriptions.
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 clearly states the tool computes median and p25/p75 time-to-fix from resolved pins, and returns sample size and a threshold flag. This is a specific verb+resource combination with no sibling tools performing a similar function, so it is well-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 description implies the tool is used for marketing proof points and distinguishes Pincushion. It does not explicitly state when to use versus alternatives, but given the uniqueness of the tool and no similar sibling tools, the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
implement_approved_pinsA
CALL THIS FIRST when approved pins exist. Returns all stakeholder-approved pins grouped into implementation packets by page URL, each containing aggregated CSS selectors, full comment threads, and a suggested git branch name. One packet = one branch / one PR. Use the selectors to grep the source code, read the thread to understand what the stakeholder wants, then implement the fix. Workflow: implement_approved_pins → claim_pin → code change → fix_and_resolve. The result exposes both packets (canonical) and pages (alias).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Optional project ID to filter by. If omitted, returns approved pins across all projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes the output structure and usage workflow. It does not mention side effects, auth, or rate limits, but as a retrieval tool this is adequate.
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 four sentences, front-loading purpose. Some redundancy in explaining workflow, but concise overall and well-structured.
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 no output schema, description explains output shape (packets with CSS selectors, threads, branch name) and how to use it. Missing error cases or detailed return format, but sufficient for this tool.
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% with one optional parameter (projectId). Description adds minimal meaning beyond schema; it repeats the filtering behavior but does not enrich parameter semantics significantly.
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 clearly states the tool returns stakeholder-approved pins grouped into implementation packets, specifying verb 'returns' and resource 'approved pins'. It distinguishes from sibling tools like get_implementation_packet and claim_pin by indicating it is the first step.
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?
Explicitly says 'CALL THIS FIRST when approved pins exist' and provides a workflow: implement_approved_pins → claim_pin → code change → fix_and_resolve. This guides when to use it vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_pin_deployA
Link a deploy URL to a resolved pin. Typically called by the deploy-hook edge function once a deploy that includes the pin's fix goes live. Stakeholders see the deploy URL on the resolved pin in the dashboard. Re-runs overwrite the previous deploy URL (latest deploy wins).
| Name | Required | Description | Default |
|---|---|---|---|
| deployUrl | Yes | The http(s) URL of the deploy that includes the fix (e.g. "https://pincushion.io" or a Vercel preview URL) | |
| deployedAt | No | Optional ISO timestamp of the deploy. Defaults to now. | |
| annotationId | Yes | The annotation ID to link |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It reveals the overwrite behavior on re-runs, which is a key trait, but does not cover authentication requirements, error states (e.g., invalid annotationId), or the extent of side effects beyond the dashboard display.
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 three sentences long, front-loaded with the core action. Every sentence contributes essential information without redundancy.
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 lack of output schema and three parameters, the description adequately covers the tool's purpose, typical invocation context, and idempotency behavior. It lacks details on error handling or return values, but the tool's simplicity makes this acceptable.
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?
All three parameters have descriptions in the schema (100% coverage), so the description adds limited extra meaning. It provides context ('Typically called by the deploy-hook...') but does not enrich the parameter semantics beyond what the schema already offers.
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 opens with 'Link a deploy URL to a resolved pin', which is a specific verb+resource combination. It clearly distinguishes this tool from its many siblings by focusing on a unique linking action.
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 description explicitly states it is 'Typically called by the deploy-hook edge function once a deploy that includes the pin's fix goes live', providing clear usage context. It also notes that re-runs overwrite previous URLs, implying idempotent behavior, but doesn't mention when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collaboration_integrationsA
List Slack and Microsoft Teams webhook subscriptions for a Pincushion project. Webhook URLs are masked.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The Pincushion project ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions that webhook URLs are masked, which is a helpful behavioral detail. However, it does not disclose other traits such as read-only nature, authentication requirements, or rate limits, which are important since no annotations are provided.
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 extremely concise with two sentences, no unnecessary words, and effectively front-loads the purpose.
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 lack of an output schema, the description gives a basic idea of what is returned (subscriptions with masked URLs) but does not mention other fields like subscription names or statuses, leaving some ambiguity.
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% and the schema already describes the only parameter (projectId). The description does not add any additional meaning beyond what the schema provides.
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 clearly states the verb 'List' and the specific resource 'Slack and Microsoft Teams webhook subscriptions for a Pincushion project', which distinguishes it from sibling tools like configure or remove.
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 description provides context for when to use the tool (for a Pincushion project) but does not explicitly state when to use it versus alternatives like configure_collaboration_integration or remove_collaboration_integration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membersA
List all members of a PinCushion project with their roles, plus seat usage info.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It conveys a read-only listing operation but omits details like pagination, permissions, or return format. For a simple list tool, this is minimally adequate but not fully transparent.
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 a single, front-loaded sentence with zero wasted words. It efficiently conveys the tool's primary action and additional output detail.
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 low complexity (1 parameter, no output schema), the description is largely complete for a list operation. However, it lacks mention of pagination or limits, and the return shape is unspecified, leaving minor gaps.
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% with one parameter (projectId) that already has a clear description. The tool description does not add additional parameter semantics beyond what the schema provides, matching the baseline for high coverage.
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 clearly states the verb 'List' and the resource 'members of a PinCushion project', with additional detail about including roles and seat usage. It effectively distinguishes itself from sibling tools like add_member and remove_member.
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 description implies usage for viewing membership, but does not explicitly state when to use versus alternatives or provide exclusions. The context from sibling names helps, but no direct guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_collaboration_notificationA
Preview the Slack/Teams notification shape and recommended event routing before connecting a real webhook.
| Name | Required | Description | Default |
|---|---|---|---|
| event | No | Event to preview. Default: pin_ready. | |
| provider | No | Provider payload to preview. Default: slack. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool is a preview, implying non-destructive behavior, but does not detail the output, auth needs, or side effects. It adds value beyond the schema by explaining the preparatory context, but could be more explicit.
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 a single sentence that is concise and front-loaded. It includes the essential information without any waste, earning its place efficiently.
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 tool's simplicity (2 params, no output schema, no annotations), the description is sufficient. It explains the use case and timing. It does not cover return format, but that is less critical for a preview tool. Overall, it is complete enough for an agent to understand.
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%, so the schema already documents both parameters with enums and descriptions. The tool description does not add new meaning to the parameters, just restates them indirectly (Slack/Teams, events). 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?
The description clearly states the tool's purpose: to preview the notification shape and routing for Slack/Teams before connecting a webhook. It uses a specific verb 'preview' and identifies the resource (notification shape/routing), distinguishing it from sibling tools like configure or list integrations.
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 description provides clear context on when to use this tool: 'before connecting a real webhook.' It implies a preparatory step, but does not explicitly state when not to use it or mention alternatives. This is good but leaves some room for interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_pin_verificationA
Record the outcome of Pincushion AI's post-deploy verification on a resolved pin. Called by the critic subagent after running auto-critique on a fresh deploy. Lets stakeholders see "Pincushion AI verified this fix" (or regressed/inconclusive) directly on the pin in the dashboard, closing the "did my feedback actually ship correctly?" loop.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional plain-text verification notes (up to 2KB) explaining the verdict. | |
| status | Yes | "verified" — fix is in place, no regressions. "regressed" — the fix introduced a new issue. "inconclusive" — couldn't determine outcome (e.g. element gone, page errored). "pending" — explicit reset. | |
| verifiedAt | No | Optional ISO timestamp. Defaults to now. | |
| annotationId | Yes | The pin ID being verified |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It conveys that this is a write operation recording a verification outcome and displays the verdict on the dashboard. It does not describe idempotency, side effects, or error behavior, but it adequately covers the core behavior for a simple recording tool.
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 with no fluff. First sentence states purpose, second specifies caller, third explains impact. Efficient and well-structured.
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 4 parameters all described in schema and no output schema, the description provides sufficient context about when and why to use the tool. It covers the caller, purpose, and result. It could briefly mention how notes are displayed or the meaning of 'pending', but overall complete for the use case.
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 baseline is 3. The description mentions the status values like 'verified', 'regressed', 'inconclusive', but these are already defined in the schema with enum descriptions. The description adds no additional meaning beyond what the schema provides.
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 clearly states the verb 'Record the outcome' and the resource 'on a resolved pin', specifying it is for post-deploy verification by a critic subagent. It distinguishes from sibling tools like 'approve_pin' or 'resolve_annotation' by focusing on the AI verification use case.
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 description explicitly states it is called by the critic subagent after auto-critique on a fresh deploy, providing clear context when to use. However, it does not list explicit exclusions or alternatives, though the context implies it is not for general pin updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_collaboration_integrationB
Remove a Slack or Microsoft Teams webhook subscription from a Pincushion project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Subscription name to remove with provider. Default: default. | |
| provider | No | Provider to remove when integrationId is omitted. | |
| projectId | Yes | The Pincushion project ID. | |
| integrationId | No | Exact integration ID from list_collaboration_integrations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should fully disclose behavioral traits. It confirms the removal action but fails to mention if it is irreversible, requires specific permissions, or affects other services.
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 a single sentence that is concise and front-loaded. It is appropriate for a simple removal tool, though it could provide more detail without becoming verbose.
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 lack of annotations and output schema, the description is insufficient. It does not explain the interplay between provider and integrationId, default behavior, or potential consequences of removal.
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 fully describes parameters. The description adds no additional context about parameter usage or relationships beyond what is in the schema.
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 clearly states the verb 'Remove', the resource 'webhook subscription', and the scope 'from a Pincushion project'. It specifies the providers (Slack or Microsoft Teams), effectively differentiating from sibling tools like configure_collaboration_integration or list_collaboration_integrations.
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?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, such as obtaining an integration ID from list_collaboration_integrations, nor does it suggest when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_memberA
Remove a collaborator from a PinCushion project. Frees up the seat if they were an editor.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email of the person to remove | ||
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It discloses seat freeing for editors, which is helpful, but lacks details on reversibility, notifications, or impact on shared work. The description adds some behavioral context but remains minimal.
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 two sentences, front-loaded, and every word adds value. No redundancy or unnecessary information.
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 simple nature of a removal tool with two parameters and no output schema, the description adequately explains the core action and a key side effect. It is mostly complete, though additional details on side effects or system behavior could improve it.
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%, and the description adds no extra meaning beyond what the schema already provides for email and projectId. Baseline 3 is appropriate as the description does not enhance parameter understanding.
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 clearly states it removes a collaborator from a PinCushion project and specifies a key side effect (freeing a seat for editors). This distinguishes it from siblings like add_member and remove_collaboration_integration.
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 description implies usage for removing collaborators but provides no explicit when-to-use or when-not-to-use guidance. It does not mention alternatives or prerequisites, offering only implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_annotationA
Mark an annotation as resolved after addressing the feedback. Optionally add a resolution comment explaining what was changed.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional comment explaining the resolution (e.g. "Changed label to Recent Orders in wmlHomePage.html line 42") | |
| resolvedBy | No | Name to attribute the resolution to (defaults to "AI Agent") | |
| annotationId | Yes | The annotation ID (e.g. "ann_abc123") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, yet description fails to disclose behavioral traits like irreversibility, permissions required, or notifications triggered. Only states the action without additional context.
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?
Single sentence, front-loaded with the action, no redundant words. Every word earns its place.
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?
Covers main action and optional comment, but lacks behavioral details and fails to leverage sibling context for completeness. Adequate for a simple tool but not exemplary.
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 baseline is 3. Description adds minimal context (comment explains change), but does not significantly enhance understanding over schema defaults.
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?
Description uses specific verb 'Mark' and resource 'annotation as resolved', clearly distinguishing from siblings like 'fix_and_resolve' which combines fixing and resolving, and 'search_annotations' which is read-only.
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?
Implies usage 'after addressing the feedback' but does not explicitly compare with alternatives such as 'fix_and_resolve', nor states when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_annotationsA
Full-text search across all annotation comments, selectors, component names, and tags.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, description carries full burden. It lists searchable fields but omits behavioral details like performance, pagination, auth needs, or search syntax. Adequate but minimal.
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?
Single sentence with no wasted words, key info front-loaded.
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?
Fairly complete for a simple search tool with one parameter, but lacks return format, pagination info, or limitations.
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 baseline is 3. Description adds no extra meaning beyond schema's 'Search query string'.
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 clearly states the tool performs full-text search across specific annotation fields (comments, selectors, component names, tags), distinguishing it from sibling tools like get_annotations.
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?
No explicit guidance on when to use this tool vs alternatives (e.g., get_annotations). Usage is implied but not contrasted with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_slack_preferencesA
Read or update the caller's Slack DM preferences. Resolves the user via license_key → email, then applies the change across every Slack workspace the email is linked to. Call with no args to see current state. Call with mute: "1h" (or "today", "forever", "off") to silence DMs for a window. Call with eventNewPin: false (or any event_* flag) to toggle individual event types off. Same surface as the App Home toggles and /pincushion mute, accessible from the agent — useful for "mute pin DMs during this refactor" workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| mute | No | Friendly mute alias. "off" unmutes. | |
| timezone | No | IANA timezone (e.g. America/Los_Angeles) for quiet hours. | |
| digestMode | No | Delivery cadence. "instant" is the default; "hourly" and "daily" are reserved for a future digest implementation. | |
| mutedUntil | No | Alternative to `mute`: ISO timestamp until which DMs are silenced, or null to unmute. | |
| eventNewPin | No | DM on new pins. | |
| eventMention | No | DM on @-mentions of you. | |
| eventFollowUp | No | DM on replies in threads you authored or commented on. | |
| eventPinReady | No | DM on pins marked ready for implementation. | |
| eventResolved | No | DM on resolved pins. | |
| quietHoursEnd | No | Quiet-hours end hour (0-23) in `timezone`. | |
| quietHoursStart | No | Quiet-hours start hour (0-23) in `timezone`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It discloses that the tool resolves user across all Slack workspaces, but does not mention permissions, idempotency, or side effects beyond the described behavior. Adequate but could be more explicit.
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?
Well-structured with clear first sentence, then resolution process, then examples. Slightly long but each sentence adds value; no waste.
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?
Handles all parameters with schema descriptions, but no output schema and description does not detail return structure (only mentions 'see current state'). For a tool with 11 parameters, this is a gap in completeness.
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%, baseline 3. Description adds value by explaining the intent behind parameters (e.g., 'mute is a friendly alias', 'digestMode reserved for future'), enhancing understanding beyond the schema.
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 clearly states 'Read or update the caller's Slack DM preferences', providing a specific verb-resource pair. It distinguishes from sibling tools which focus on pins, replies, and critiques, making this unique.
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?
Provides clear usage examples (with no args, with mute, with event flags) and context ('useful for mute pin DMs during this refactor workflows'). Does not explicitly state when not to use, but covers main use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_critique_contextA
Lightweight write-only path for the layered critique-context system. Use this from /setup and /refresh-brand after the dev agent has gathered repo signals (README, theme tokens, sample copy, competitor URLs, recent resolved pins) and compiled them into a critique brief. Unlike configure_project, this does NOT create a deploy hook, sync members, or validate URLs — it just persists the compiled brief (+ signals + policy) and pushes to cloud. Identify the project by projectId or name. The compiled critiqueContext is what the AI critic actually reads at pin time; critiqueSignals + critiquePolicy are inputs retained for traceability and the next recompile.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The project display name. Used to look up the project when projectId is not known. | |
| projectId | No | The project ID to update. Mutually exclusive with `name`. | |
| critiquePolicy | No | User-editable policy override (max 4096 chars). Persists across recompiles so users keep hand-tuned rules. Pass null to clear. | |
| critiqueContext | No | The compiled critique brief (max 8192 chars). Markdown encouraged. This is what the AI critic loads at pin time. Pass null to clear and force a recompile on the next run. | |
| critiqueSignals | No | Raw signals JSONB. Recommended shape: { framework: e.g. "next-app-router"|"astro"|"static-html", projectType: "marketing"|"app"|"mixed", pages: [{ url, source, slice, headings, ctas, components, bodyExcerpt }], themeTokens, brandDocs, readmeExcerpt, competitors, mission, audience, tone, tenantContexts (reserved/null in v1), sources }. The agent decides exact shape; the AI critic reads the COMPILED context, not the signals directly. Pass null to clear. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that this is a write-only operation, does not create deploy hooks or sync members, simply persists and pushes to cloud. It explains the roles of critiqueContext, critiqueSignals, and critiquePolicy. However, it does not cover failure modes or idempotency.
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 a single paragraph, efficiently front-loaded with the core purpose and usage context. Every sentence adds value, but there is minor redundancy in explaining the role of each field both in description and schema. Slightly verbose but still clear.
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 complexity (5 parameters, nested object, no output schema), the description covers the tool's purpose, usage context, and parameter semantics adequately. It lacks details on return values or error scenarios, but the absence of an output schema reduces the burden. Slightly incomplete on success behavior.
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?
Despite 100% schema coverage, the description adds significant meaning: critiquePolicy is user-editable and persists across recompiles; critiqueContext is what the AI critic reads; critiqueSignals is raw input not directly read by critic. It also gives a recommended shape for critiqueSignals, adding context beyond schema.
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 clearly states it is a 'lightweight write-only path for the layered critique-context system' that persists the compiled brief. It explicitly contrasts with the sibling tool `configure_project`, listing what it does not do, making its purpose distinct and specific.
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 description explicitly says to use this from /setup and /refresh-brand after gathering repo signals, and contrasts with `configure_project` by listing excluded actions (no deploy hook, sync members, validate URLs). This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_page_snapshotA
Upload a full-page screenshot that turns the public share report into an annotated page: viewers see the real page with numbered pin markers at true positions and click-to-open thread bubbles. Capture the page yourself (kill animations, scroll to force lazy loads, full-page shot, JPEG/WebP ≤5MB), resolve each open pin's element.selector to document-pixel coordinates IN THAT CAPTURE, and pass them as pinPositions. Owner/editor only. One snapshot per (project, page) — re-upload replaces it. pageUrl must match the pins' page_url verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | Pixel width of the uploaded image (1–4000). Pin coordinates must be in this same space. | |
| height | Yes | Pixel height of the uploaded image (1–60000). | |
| pageUrl | Yes | Exact page_url the pins carry — copy verbatim from get_annotations. The snapshot is keyed by this string. | |
| imageB64 | No | Base64 image data, if imagePath is not available. | |
| imagePath | No | Absolute path to the JPEG/WebP file on disk (preferred — read server-side, keeps base64 out of the transcript). | |
| projectId | Yes | The project ID | |
| contentType | No | Default image/jpeg. PNG is rejected for page snapshots (size). | |
| pinPositions | No | Document-pixel coordinates of each pin in THIS image, resolved from element.selector at capture time. Pins omitted here render in the notes list only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, description covers auth requirements (owner/editor only), destructive behavior (re-upload replaces), image constraints (≤5MB, JPEG/WebP), and pageUrl matching requirement. Missing rate limits but sufficient.
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?
Single paragraph efficiently covers all key points without fluff. Front-loaded with purpose. Could be slightly more structured but remains concise.
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 8 parameters (4 required) and no output schema, description provides comprehensive workflow, parameter usage, and constraints. Lacks return value details but tool is action-oriented.
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% but description adds significant context: explains imageB64 vs imagePath preference, pinPositions coordinate meaning, contentType defaults to JPEG, and that omitted pins render in notes list. Adds value beyond schema.
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?
Description clearly states verb 'Upload a full-page screenshot' and specific resource 'turn public share report into an annotated page'. It distinguishes from siblings by being the only tool handling snapshot upload with pin mapping.
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?
Provides explicit preparation steps (kill animations, scroll, etc.) and permissions ('Owner/editor only'). Does not contrast with alternatives but context implies uniqueness.
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. Dates show when Glama detected each change.
39 tool updates
v0.1.0- First observed
add_agent_reply - First observed
add_bot_reply - First observed
add_member - First observed
approve_pin - First observed
assign_pin_to_agent - First observed
claim_pending_slack_install - First observed
claim_pin - First observed
complete_critique_request - First observed
configure_collaboration_integration - First observed
configure_project - First observed
create_critique_pin - First observed
create_invite_link - First observed
create_share_report - First observed
create_slack_install_link - First observed
fix_and_resolve - First observed
get_actionable_pins - First observed
get_annotations - First observed
get_component_feedback - First observed
get_feedback_summary - First observed
get_implementation_packet - First observed
get_pending_critiques - First observed
get_project_context - First observed
get_reply_candidates - First observed
get_selected_pins - First observed
get_setup_instructions - First observed
get_time_to_fix_metrics - First observed
implement_approved_pins - First observed
link_pin_deploy - First observed
list_collaboration_integrations - First observed
list_members - First observed
preview_collaboration_notification - First observed
record_pin_verification - First observed
remove_collaboration_integration - First observed
remove_member - First observed
resolve_annotation - First observed
search_annotations - First observed
set_slack_preferences - First observed
update_critique_context - First observed
upload_page_snapshot
TDQS
Each tool has a clearly distinct purpose with detailed descriptions. Even closely related tools (e.g., get_actionable_pins vs get_selected_pins, implement_approved_pins vs get_implementation_packet) are well differentiated by their specific use cases and triggers, minimizing the risk of misselection.
All tool names follow a consistent verb_noun or verb_adjective_noun pattern in snake_case. Verbs like 'get', 'create', 'add', 'remove', 'list', 'configure', 'claim', 'resolve', etc., are used predictably, making the naming intuitive and easy to parse.
With 39 tools, the count is high but justifiable given the breadth of functionality (project setup, member management, pin lifecycle, collaboration integrations, critique, metrics, sharing, etc.). Each tool serves a clear purpose, though some niche tools (e.g., claim_pending_slack_install) could potentially be consolidated.
The tool set covers the full feedback management lifecycle: project configuration, context retrieval, pin creation/state management (claim, assign, approve, resolve, verify), replies, search, reporting, collaboration integrations, metrics, and setup instructions. No obvious dead ends or missing essential operations for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Visual website feedback your coding agent applies: pin change requests on the live site over MCP.
Comment on AI-generated webpages; feedback flows back to your coding agent. Free, MIT, local-first.
The feedback board your AI agents work from: users vote, agents build over MCP. 22 tools.
Give AI coding agents access to your Vynix visual feedback, bug reports, and AI diagnosis.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceHuman-to-AI code review bridge. Annotate UI elements in the browser with review comments, and AI agents read the feedback via MCP to fix code automatically — with full element context (CSS selector, styles, DOM path, accessibility info). 10 MCP tools, framework-agnostic Web Component, zero-config install via uvx.9-
- AlicenseNot gradedqualityDmaintenanceMCP server for visual feedback, video direction, and QA assertions on web pages, enabling AI agents to read, reply, and resolve annotations in real time.4MIT
- FlicenseNot gradedqualityAmaintenanceMCP server that exposes web page annotations to AI coding agents, enabling automated implementation of visual feedback and design tweaks.1149-
- AlicenseAqualityAmaintenanceInteractive feedback layer that lets users pin comments on live web apps with auto-captured context (failing requests, console, AI metadata), and coding agents fix issues via MCP, turning pins green upon verification.1052MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jcooley8/pincushion-plugin'
If you have feedback or need assistance with the MCP directory API, please join our Discord server