MCP server for Claude Code — exposes Yocoolab feedback threads and design selections as tools
This MCP server integrates Yocoolab's design feedback platform with AI coding assistants like Claude Code. It exposes tools to list, triage, and respo...
352files: z.array(z.object({
353 path: z.string().describe('File path relative to repo root'),
354 content: z.string().describe('Full file content (replaces entire file)'),
355})).describe('Array of file changes to include in the commit'),// Network-exposed MCP; exploitable by any LLM prompt that calls create_pr_for_thread with malicious file paths.
323repo: z.string().describe('Repository identifier (e.g., "org/repo-name")'),
324branch: z.string().optional().describe('Optional branch filter (e.g., "main", "feature/xyz")'),
325claude_code_pending: z.boolean().optional().describe('Filter for threads pending Claude Code review (true = only pending threads)'),// Network-exposed MCP; exploitable by any LLM prompt that calls list_open_threads or get_deployment_preview with arbitrary repo names.
574server.tool(
575 'get_activity_summary',
576 'Get a high-level summary of Claude Code activity: total events, active sessions, tool usage breakdown, files touched, and error count.',
577 {},
578 withCompanion(async () => {
579 return handleGetActivitySummary(activityEventStore, sessionManager);
580 })
581);
582
583server.tool(
584 'get_recent_events',
585 'Get the most recent Claude Code activity events (tool calls, prompts, errors). Shows timestamps, tool names, and key details.',
586 {
587 limit: z.number().optional().describe('Number of recent events to return (default: 10, max: 50)'),
588 },
589 withCompanion(async (args) => {
590 return handleGetRecentEvents(activityEventStore, args.limit);
591 })
592);
593
594server.tool(
595 'get_files_touched',
596 'List all files that have been read, written, or edited across Claude Code sessions. Shows file paths with session counts.',
597 {},
598 withCompanion(async () => {
599 return handleGetFilesTouched(sessionManager);
600 })
601);// Network-exposed MCP; exploitable by any LLM prompt that calls activity monitor tools to exfiltrate session data.
550server.tool(
551 'pendo_track_event',
552 'Send a custom track event to Pendo. Use this to track actions like feedback resolved, PR created from feedback, or guide suggestions.',
553 {
554 event_name: z.string().describe('Name of the event (e.g., "feedback_resolved", "pr_created_from_feedback")'),
555 visitor_id: z.string().optional().describe('Pendo visitor ID'),
556 account_id: z.string().optional().describe('Pendo account ID'),
557 properties: z.string().optional().describe('JSON string of additional properties'),
558 },// Network-exposed MCP; exploitable by any LLM prompt that calls pendo_track_event with arbitrary parameters.
502url: z.string().describe('URL of the page being analyzed'),
503question: z.string().describe('What to analyze or ask about the page'),
504page_title: z.string().optional().describe('Page title'),
505headings: z.array(z.string()).optional().describe('Page headings (h1-h3)'),
506body_text: z.string().optional().describe('Page body text snippet (first ~1000 chars)'),// Network-exposed MCP; exploitable by any LLM prompt that calls ai_analyze_page with a malicious URL.
388repo: z.string().describe('Repository identifier (e.g., "org/repo-name")'),
389branch: z.string().describe('Branch name to check for deployments'),
390},// Network-exposed MCP; exploitable by any LLM prompt that calls get_deployment_preview with crafted branch names.