Daily backup: 2026-02-04

This commit is contained in:
Jake Shore 2026-02-04 23:01:37 -05:00
parent ddfa0956fe
commit a2c95437c1
161 changed files with 34505 additions and 100 deletions

View File

@ -1,85 +1,72 @@
# HEARTBEAT.md — Active Task State # HEARTBEAT.md — Active Task State
## Current Task ## Current Task
- **Project:** LocalBosses App — MCP Server Integration Sprint - **Project:** MCP Pipeline Factory + OpenClaw Upwork Launch
- **Last completed:** Built 4 new MCP servers (CloseBot, Meta Ads, Google Console, Twilio), shipped multi-panel thread system, fixed critical bugs, integrated Reonomy - **Last completed:** MCP Pipeline operator system (7 channels, 2 cron jobs, state.json), 8-week agent study plan (1,497 lines), CloseBot MCP (119 tools), factory testing infrastructure (30/30 servers 100% compliant), Das genre universe animation, OpenClaw gallery assets
- **Next step:** SongSense build (queued but hasn't started), live API testing for MCP servers, thread app expansion feature - **Next step:** Jake reviewing OpenClaw video + gallery → Upwork listing, testing strategy decision for 8→9 advancement
- **Blockers:** Expired Anthropic API key in localbosses-app .env.local (competitor-research channel broken) - **Blockers:** Expired Anthropic API key in localbosses-app .env.local, testing strategy decision pending
## Active Projects ## Active Projects
### LocalBosses App (PRIMARY — ACTIVE) ### MCP Pipeline Factory (PRIMARY — ACTIVE)
- **Location:** `mcp-command-center/`
- **Status:** Fully operational — autonomous operator mode
- **Discord channels:** 7 channels in "MCP PIPELINE" category
- **Cron jobs:** Daily standup 9 AM, heartbeat every 2 hours
- **State:** 35 MCPs at Stage 8 (Integration Complete)
- **Pending:** Testing strategy decision (dec-001) — no reaction yet
- **Dashboard:** `http://192.168.0.25:8888`
### OpenClaw Upwork Service Launch
- **Location:** `openclaw-gallery/`
- **Status:** All assets complete, awaiting Jake review
- **Assets:** 15 graphics, 6 mockups, 2 PDFs, 90-sec Remotion video
- **Pricing:** $2,499 / $7,499 / $24,999 tiers finalized
- **Next:** Upwork listing finalization after Jake approves video
### LocalBosses App
- **Location:** `localbosses-app/` - **Location:** `localbosses-app/`
- **Status:** Major feature sprint completed 2/3 - **Status:** Major feature sprint completed, all bugs fixed
- **Channel architecture:** - **Dev server:** `192.168.0.25:3000`
- BUSINESS OPS: #general, #automations, #crm, #google-ads, #competitor-research, #twilio - **Blocker:** Expired Anthropic API key in .env.local
- MARKETING: #google-console, #meta-ads
- TOOLS: #templates, #nodes
- SYSTEM: #health
- **Multi-panel threads:** Shipped — 4-6 simultaneous, cross-channel persistent
- **All bugs fixed:** Channel switch blank screen, workflow builder data flow, thread persistence
- **Dev server:** `192.168.0.25:3000` (Next.js 16.1.6 + Turbopack)
- **TODO:**
- Thread app expansion (iframe covers top section with real data)
- Reonomy route.ts mapping (APP_DIRS + APP_NAME_MAP)
- Cold start fix (10-15s first request)
- Fix expired Anthropic API key
### New MCP Servers (Built 2/3) ### CloseBot MCP (NEW — COMPLETE)
- **CloseBot MCP**`closebot-mcp/` — 119 tools, 14 modules, 6 UI apps - **Location:** `closebot-mcp/`
- **Meta Ads MCP**`meta-ads-mcp/` — ~55 tools, 11 categories, 11 UI apps - **Status:** 119 tools, 4,656 lines, compiles clean
- **Google Console MCP**`google-console-mcp/` — 22 tools, 5 UI apps - **Needs:** CLOSEBOT_API_KEY env var for live testing
- **Twilio MCP** — 54 tools, 19 UI apps (integrated into LocalBosses)
- **All compile clean, none tested against live APIs yet**
### MCP Servers (30 built earlier, all compiled) ### Factory Testing Infrastructure (NEW — COMPLETE)
- **Location:** `mcp-diagrams/mcp-servers/` - **Location:** `factory-tools/`
- **Status:** All 30 built with TypeScript → dist, ~240 tools total - **Status:** All 30 servers patched and rebuilt, 100/100 compliance
- **Next:** Test against live APIs, write READMEs, publish to GitHub - **Tools:** mcp-jest, mcp-validator, mcp-add, MCP Inspector
- **Ready:** 702 test cases for live API testing (needs API keys)
### 8-Week Agent Study Plan (NEW — COMPLETE)
- **Location:** `agent-repos-study-plan.md`
- **Status:** 1,497 lines, posted to #trending-agent-repos
- **Curriculum:** Pydantic-AI → MS Agent Framework → Agent-S → GPT Researcher → Yao → MetaGPT → ElizaOS → Capstone
### SongSense — AI Music Analysis Product (QUEUED) ### SongSense — AI Music Analysis Product (QUEUED)
- **Status:** Full architecture designed, Jake approved, but build hasn't started - **Status:** Full architecture designed, Jake approved, build hasn't started
- **Next step:** Build with paired agent teams (groups of 2, double-checking each other) - **Priority:** Still queued behind current sprint
- **Priority:** Was supposed to be top priority but LocalBosses sprint took over
### MCP Servers (30 built earlier + 5 new)
- **Status:** 35 total, all at Stage 8, all compile clean
- **New:** CloseBot, Meta Ads, Google Console, Twilio, plus others
### GHL MCP Apps (65 apps — COMPLETE) ### GHL MCP Apps (65 apps — COMPLETE)
- **Location:** `mcp-diagrams/GoHighLevel-MCP/src/ui/react-app/src/apps/` - **Location:** `mcp-diagrams/GoHighLevel-MCP/src/ui/react-app/src/apps/`
- **Status:** All 65 built, 3 review rounds done, all builds passing - **Status:** All 65 built, integrated into LocalBosses CRM channel
- **Integrated into:** LocalBosses app CRM channel (toolbar + thread system)
### GoHighLevel-MCP (main repo) ## Das Projects
- **Location:** `mcp-diagrams/GoHighLevel-MCP/` - **Genre Universe Animation:** Delivered to #manim (1080p60, 30 sequences)
- **Repo:** `github.com/BusyBee3333/Go-High-Level-MCP-2026-Complete.git` - **Server Icon:** Set via Discord API
- **Status:** Uncommitted changes — new app-ui, apps system, server-lite, server-apps
- **Next:** Commit & push changes
### MCP Business Research
- **Location:** `mcp-diagrams/`
- **Key finding:** 22 of 30 targets have ZERO MCP competition
- **Revenue projections:** $4-7.6M ARR at 24 months
### MCP Animation Framework (Remotion)
- **Location:** `mcp-diagrams/mcp-animation-framework/`
- **Status:** Dolly camera version built
- **Next:** Get feedback on camera movement, iterate
## Other Active Projects ## Other Active Projects
### Reonomy Scraper v13
- **Location:** workspace root
- **Status:** Production scraper built, also integrated as MCP + LocalBosses channel
### Burton Method Research Intel ### Burton Method Research Intel
- **Location:** `memory/burton-method-research-intel.md` - **Location:** `memory/burton-method-research-intel.md`
- **Status:** Ongoing competitor + EdTech trends tracking - **Status:** Updated Feb 4 — 7Sage reversal, Preply $150M raise
### Das Management
- **Folders:** `das-forum-form/`, `das-surya/`, `das-threads/`, `das-website/`
- **Das Surya Album Review:** Complete (`das-surya-review/`)
### Genre Universe 3D Viz (Das)
- **Location:** `genre-viz/`
- **Status:** Built — Three.js interactive visualization
### Smart Model Routing ### Smart Model Routing
- **Status:** Active — Sonnet default, auto-escalate to Opus - **Status:** Active — Sonnet default, auto-escalate to Opus
@ -87,8 +74,7 @@
## Git Status ## Git Status
- **Workspace repo:** `github.com/BusyBee3333/clawdbot-workspace.git` - **Workspace repo:** `github.com/BusyBee3333/clawdbot-workspace.git`
- **GHL-MCP submodule:** Uncommitted changes
- **Pending:** Daily backup commit - **Pending:** Daily backup commit
--- ---
*Last updated: 2026-02-03 23:00 EST* *Last updated: 2026-02-04 23:00 EST*

572
MCP-FACTORY.md Normal file
View File

@ -0,0 +1,572 @@
# MCP Factory — Production Pipeline
> The systematic process for turning any API into a fully tested, production-ready MCP experience inside LocalBosses.
---
## The Problem
We've been building MCP servers ad-hoc: grab an API, bang out tools, create some apps, throw them in LocalBosses, move on. Result: 30+ servers that compile but have never been tested against live APIs, apps that may not render, tool descriptions that might not trigger correctly via natural language.
## The Pipeline
```
API Docs → Analyze → Build → Design → Integrate → Test → Ship
P1 P2 P3 P4 P5 P6
```
> **6 phases.** Agents 2 (Build) and 3 (Design) run in parallel. QA findings route back to Builder/Designer for fixes before Ship.
Every phase has:
- **Clear inputs** (what you need to start)
- **Clear outputs** (what you produce)
- **Quality gate** (what must pass before moving on)
- **Dedicated skill** (documented, repeatable instructions)
- **Agent capability** (can be run by a sub-agent)
---
## Phase 1: Analyze (API Discovery & Analysis)
**Skill:** `mcp-api-analyzer`
**Input:** API documentation URL(s), OpenAPI spec (if available), user guides, public marketing copy
**Output:** `{service}-api-analysis.md`
### What the analysis produces:
1. **Service Overview** — What the product does, who it's for, pricing tiers
2. **Auth Method** — OAuth2 / API key / JWT / session — with exact flow
3. **Endpoint Catalog** — Every endpoint grouped by domain
4. **Tool Groups** — Logical groupings for lazy loading (aim for 5-15 groups)
5. **Tool Inventory** — Each tool with:
- Name (snake_case, descriptive)
- Description (optimized for LLM routing — what it does, when to use it)
- Required vs optional params
- Read-only / destructive / idempotent annotations
6. **App Candidates** — Which endpoints/features deserve visual UI:
- Dashboard views (aggregate data, KPIs)
- List/Grid views (searchable collections)
- Detail views (single entity deep-dive)
- Forms (create/edit workflows)
- Specialized views (calendars, timelines, funnels, maps)
7. **Rate Limits & Quirks** — API-specific gotchas
### Quality Gate:
- [ ] Every endpoint is cataloged
- [ ] Tool groups are balanced (no group with 50+ tools)
- [ ] Tool descriptions are LLM-friendly (action-oriented, include "when to use")
- [ ] App candidates have clear data sources (which tools feed them)
- [ ] Auth flow is documented with example
---
## Phase 2: Build (MCP Server)
**Skill:** `mcp-server-builder` (updated from existing `mcp-server-development`)
**Input:** `{service}-api-analysis.md`
**Output:** Complete MCP server in `{service}-mcp/`
### Server structure:
```
{service}-mcp/
├── src/
│ ├── index.ts # Server entry, transport, lazy loading
│ ├── client.ts # API client (auth, request, error handling)
│ ├── tools/
│ │ ├── index.ts # Tool registry + lazy loader
│ │ ├── {group1}.ts # Tool group module
│ │ ├── {group2}.ts # ...
│ │ └── ...
│ └── types.ts # Shared TypeScript types
├── dist/ # Compiled output
├── package.json
├── tsconfig.json
├── .env.example
└── README.md
```
### Must-haves (Feb 2026 standard):
- **MCP SDK `^1.26.0`** (security fix: GHSA-345p-7cg4-v4c7 in v1.26.0). Pin to v1.x — SDK v2 is pre-alpha, stable expected Q1 2026
- **Lazy loading** — tool groups load on first use, not at startup
- **MCP Annotations** on every tool:
- `readOnlyHint` (true for GET operations)
- `destructiveHint` (true for DELETE operations)
- `idempotentHint` (true for PUT/upsert operations)
- `openWorldHint` (false for most API tools)
- **Zod validation** on all tool inputs
- **Structured error handling** — never crash, always return useful error messages
- **Rate limit awareness** — respect API limits, add retry logic
- **Pagination support** — tools that list things must handle pagination
- **Environment variables** — all secrets via env, never hardcoded
- **TypeScript strict mode** — no `any`, proper types throughout
### Quality Gate:
- [ ] `npm run build` succeeds (tsc compiles clean)
- [ ] Every tool has MCP annotations
- [ ] Every tool has Zod input validation
- [ ] .env.example lists all required env vars
- [ ] README documents setup + tool list
---
## Phase 3: Design (MCP Apps)
**Skill:** `mcp-app-designer`
**Input:** `{service}-api-analysis.md` (app candidates section), server tool definitions
**Output:** HTML app files in `{service}-mcp/app-ui/` or `{service}-mcp/ui/`
### App types and when to use them:
| Type | When | Example |
|------|------|---------|
| **Dashboard** | Aggregate KPIs, overview | CRM Dashboard, Ad Performance |
| **Data Grid** | Searchable/filterable lists | Contact List, Order History |
| **Detail Card** | Single entity deep-dive | Contact Card, Invoice Preview |
| **Form/Wizard** | Create or edit flows | Campaign Builder, Appointment Booker |
| **Timeline** | Chronological events | Activity Feed, Audit Log |
| **Funnel/Flow** | Stage-based progression | Pipeline Board, Sales Funnel |
| **Calendar** | Date-based data | Appointment Calendar, Schedule View |
| **Analytics** | Charts and visualizations | Revenue Chart, Traffic Graph |
### App architecture (single-file HTML):
```html
<!DOCTYPE html>
<html>
<head>
<style>
/* Dark theme matching LocalBosses (#1a1d23 bg, #ff6d5a accent) */
/* Responsive — works at 280px-800px width */
/* No external dependencies */
</style>
</head>
<body>
<div id="app"><!-- Loading state --></div>
<script>
// 1. Receive data via postMessage
window.addEventListener('message', (event) => {
const data = event.data;
if (data.type === 'mcp_app_data') render(data.data);
// Also handle workflow_ops type for workflow apps
});
// 2. Also fetch from polling endpoint as fallback
async function pollForData() {
try {
const res = await fetch('/api/app-data?app=APP_ID');
if (res.ok) { const data = await res.json(); render(data); }
} catch {}
}
// 3. Render function with proper empty/error/loading states
function render(data) {
if (!data || Object.keys(data).length === 0) {
showEmptyState(); return;
}
// ... actual rendering
}
// Auto-poll on load
pollForData();
setInterval(pollForData, 3000);
</script>
</body>
</html>
```
### Design rules:
- **Dark theme only**`#1a1d23` background, `#2b2d31` cards, `#ff6d5a` accent, `#dcddde` text
- **Responsive** — must work from 280px to 800px width
- **Self-contained** — zero external dependencies, no CDN links
- **Three states** — loading skeleton, empty state, data state
- **Compact** — no wasted space, dense but readable
- **Interactive** — hover effects, click handlers where appropriate
- **Data-driven** — renders whatever data it receives, graceful with missing fields
### Quality Gate:
- [ ] Every app renders with sample data (no blank screens)
- [ ] Every app has loading, empty, and error states
- [ ] Dark theme is consistent with LocalBosses
- [ ] Works at 280px width (thread panel minimum)
- [ ] No external dependencies or CDN links
---
## Phase 4: Integrate (LocalBosses)
**Skill:** `mcp-localbosses-integrator`
**Input:** Built MCP server + apps
**Output:** Fully wired LocalBosses channel
### Files to update:
1. **`src/lib/channels.ts`** — Add channel definition:
```typescript
{
id: "channel-name",
name: "Channel Name",
icon: "🔥",
category: "BUSINESS OPS", // or MARKETING, TOOLS, SYSTEM
description: "What this channel does",
systemPrompt: `...`, // Must include tool descriptions + when to use them
defaultApp: "app-id", // Optional: auto-open app
mcpApps: ["app-id-1", "app-id-2", ...],
}
```
2. **`src/lib/appNames.ts`** — Add display names:
```typescript
"app-id": { name: "App Name", icon: "📊" },
```
3. **`src/lib/app-intakes.ts`** — Add intake questions:
```typescript
"app-id": {
question: "What would you like to see?",
category: "data-view",
skipLabel: "Show dashboard",
},
```
4. **`src/app/api/mcp-apps/route.ts`** — Add app routing:
```typescript
// In APP_NAME_MAP:
"app-id": "filename-without-html",
// In APP_DIRS (if in a different location):
path.join(process.cwd(), "path/to/app-ui"),
```
5. **`src/app/api/chat/route.ts`** — Add tool routing:
- System prompt must know about the tools
- Tool results should include `<!--APP_DATA:{...}:END_APP_DATA-->` blocks
- Or `<!--WORKFLOW_JSON:{...}:END_WORKFLOW-->` for workflow-type apps
### System prompt engineering:
The channel system prompt is CRITICAL. It must:
- Describe the tools available in natural language
- Specify when to use each tool (not just what they do)
- Include the hidden data block format so the AI returns structured data to apps
- Set the tone and expertise level
### Quality Gate:
- [ ] Channel appears in sidebar under correct category
- [ ] All apps appear in toolbar
- [ ] Default app auto-opens on channel entry (if configured)
- [ ] System prompt mentions all available tools
- [ ] Intake questions are clear and actionable
---
## Phase 5: Test (QA & Validation)
**Skill:** `mcp-qa-tester`
**Input:** Integrated LocalBosses channel
**Output:** Test report + fixes
### Testing layers:
#### Layer 1: Static Analysis
- TypeScript compiles clean (`tsc --noEmit`)
- No `any` types in tool handlers
- All apps are valid HTML (no unclosed tags, no script errors)
- All routes resolve (no 404s for app files)
#### Layer 2: Visual Testing (Peekaboo + Gemini)
```bash
# Capture the rendered app
peekaboo capture --app "Safari" --format png --output /tmp/test-{app}.png
# Or use browser tool to screenshot
# browser → screenshot → analyze with Gemini
# Gemini multimodal analysis
gemini "Analyze this screenshot of an MCP app. Check:
1. Does it render correctly (no blank screen, no broken layout)?
2. Is the dark theme consistent (#1a1d23 bg, #ff6d5a accent)?
3. Are there proper loading/empty states?
4. Is it responsive-friendly?
5. Any visual bugs?" -f /tmp/test-{app}.png
```
#### Layer 3: Functional Testing
- **Tool invocation:** Send natural language messages, verify correct tool is triggered
- **Data flow:** Send a message → verify AI returns APP_DATA block → verify app receives data
- **Thread lifecycle:** Create thread → interact → close → delete → verify cleanup
- **Cross-channel:** Open app from one channel, switch channels, come back — does state persist?
#### Layer 4: Live API Testing (when credentials available)
- Authenticate with real API credentials
- Call each tool with real parameters
- Verify response shapes match what apps expect
- Test error cases (invalid IDs, missing permissions, rate limits)
#### Layer 5: Integration Testing
- Full flow: user sends message → AI responds → app renders → user interacts in thread
- Test with 2-3 realistic use cases per channel
### Automated test script pattern:
```bash
#!/bin/bash
# MCP QA Test Runner
SERVICE="$1"
RESULTS="/tmp/mcp-qa-${SERVICE}.md"
echo "# QA Report: ${SERVICE}" > "$RESULTS"
echo "Date: $(date)" >> "$RESULTS"
# Static checks
echo "## Static Analysis" >> "$RESULTS"
cd "${SERVICE}-mcp"
npm run build 2>&1 | tail -5 >> "$RESULTS"
# App file checks
echo "## App Files" >> "$RESULTS"
for f in app-ui/*.html ui/dist/*.html; do
[ -f "$f" ] && echo "✅ $f ($(wc -c < "$f") bytes)" >> "$RESULTS"
done
# Route mapping check
echo "## Route Mapping" >> "$RESULTS"
# ... verify APP_NAME_MAP entries exist
```
### Quality Gate:
- [ ] All static analysis passes
- [ ] Every app renders visually (verified by screenshot)
- [ ] At least 3 NL messages trigger correct tools
- [ ] Thread create/interact/delete cycle works
- [ ] No console errors in browser dev tools
### QA → Fix Feedback Loop
QA findings don't just get logged — they route back to the responsible agent for fixes:
| Finding Type | Routes To | Fix Cycle |
|-------------|-----------|-----------|
| Tool description misrouting | Agent 1 (Analyst) — update analysis doc, then Agent 2 rebuilds | Re-run QA Layer 3 after fix |
| Server crash / protocol error | Agent 2 (Builder) — fix server code | Re-run QA Layers 0-1 |
| App visual bug / accessibility | Agent 3 (Designer) — fix HTML app | Re-run QA Layers 2-2.5 |
| Integration wiring issue | Agent 4 (Integrator) — fix channel config | Re-run QA Layers 3, 5 |
| APP_DATA shape mismatch | Agent 3 + Agent 4 — align app expectations with system prompt | Re-run QA Layer 3 + 5 |
**Rule:** No server ships with any P0 QA failures. P1 warnings are documented. The fix cycle repeats until QA passes.
---
## Phase 6: Ship (Documentation & Deployment)
**Skill:** Part of each phase (not separate)
### Per-server README must include:
- What the service does
- Setup instructions (env vars, API key acquisition)
- Complete tool list with descriptions
- App gallery (screenshots or descriptions)
- Known limitations
### Post-Ship: MCP Registry Registration
Register shipped servers in the [MCP Registry](https://registry.modelcontextprotocol.io) for discoverability:
- Server metadata (name, description, icon, capabilities summary)
- Authentication requirements and setup instructions
- Tool catalog summary (names + descriptions)
- Link to README and setup guide
The MCP Registry launched preview Sep 2025 and is heading to GA. Registration makes your servers discoverable by any MCP client.
---
## Post-Ship Lifecycle
Shipping is not the end. APIs change, LLMs update, user patterns evolve.
### Monitoring (continuous)
- **APP_DATA parse success rate** — target >98%, alert at <95% (see QA Tester Layer 6)
- **Tool correctness sampling** — 5% of interactions weekly, LLM-judged
- **User retry rate** — if >25%, system prompt needs tuning
- **Thread completion rate** — >80% target
### API Change Detection (monthly)
- Check API changelogs for breaking changes, new endpoints, deprecated fields
- Re-run QA Layer 4 (live API testing) quarterly for active servers
- Update MSW mocks when API response shapes change
### Re-QA Cadence
| Trigger | Scope | Frequency |
|---------|-------|-----------|
| API version bump | Full QA (all layers) | On detection |
| MCP SDK update | Layers 0-1 (protocol + static) | Monthly |
| System prompt change | Layers 3, 5 (functional + integration) | On change |
| App template update | Layers 2-2.5 (visual + accessibility) | On change |
| LLM model upgrade | DeepEval tool routing eval | On model change |
| Routine health check | Layer 4 (live API) + smoke test | Quarterly |
---
## MCP Apps Protocol (Adopt Now)
> The MCP Apps extension is **live** as of January 26, 2026. Supported by Claude, ChatGPT, VS Code, and Goose.
Key features:
- **`_meta.ui.resourceUri`** on tools — tools declare which UI to render
- **`ui://` resource URIs** — server-side HTML/JS served as MCP resources
- **JSON-RPC over postMessage** — standardized bidirectional app↔host communication
- **`@modelcontextprotocol/ext-apps`** SDK — App class with `ontoolresult`, `callServerTool`
**Implication for LocalBosses:** The custom `<!--APP_DATA:...:END_APP_DATA-->` pattern works but is LocalBosses-specific. MCP Apps is the official standard for delivering UI from tools. **New servers should adopt MCP Apps. Existing servers should add MCP Apps support alongside the current pattern for backward compatibility.**
Migration path:
1. Add `_meta.ui.resourceUri` to tool definitions in the server builder
2. Register app HTML files as `ui://` resources in each server
3. Update app template to use `@modelcontextprotocol/ext-apps` App class
4. Maintain backward compat with postMessage/polling for LocalBosses during transition
---
## Operational Notes
### Version Control Strategy
All pipeline artifacts should be tracked:
```
{service}-mcp/
├── .git/ # Each server is its own repo (or monorepo)
├── src/ # Server source
├── app-ui/ # App HTML files
├── test-fixtures/ # Test data (committed)
├── test-baselines/ # Visual regression baselines (committed via LFS for images)
├── test-results/ # Test outputs (gitignored)
└── mcp-factory-reviews/ # QA reports (committed for trending)
```
- **Branching:** `main` is production. `dev` for active work. Feature branches for new tool groups.
- **Tagging:** Tag each shipped version: `v1.0.0-{service}`. Tag corresponds to the analysis doc version + build.
- **Monorepo option:** For 30+ servers, consider a Turborepo workspace with shared packages (logger, client base class, types).
### Capacity Planning (Mac Mini)
Running 30+ MCP servers as stdio processes on a Mac Mini:
| Config | Capacity | Notes |
|--------|----------|-------|
| Mac Mini M2 (8GB) | ~15 servers | Each Node.js process uses 50-80MB RSS at rest |
| Mac Mini M2 (16GB) | ~25 servers | Leave 4GB for OS + LocalBosses app |
| Mac Mini M2 Pro (32GB) | ~40 servers | Comfortable headroom |
**Mitigations for constrained memory:**
- Lazy loading (already implemented) — tools only load when called
- On-demand startup — only start servers that have active channels
- HTTP transport with shared process — multiple "servers" behind one Node process
- Containerized with memory limits — `docker run --memory=100m` per server
- PM2 with max memory restart — `pm2 start index.js --max-memory-restart 150M`
### Server Prioritization (30 Untested Servers)
For the 30 built-but-untested servers, prioritize by:
| Criteria | Weight | How to Assess |
|----------|--------|---------------|
| **Business value** | 40% | Which services do users ask about most? Check channel requests. |
| **Credential availability** | 30% | Can we get API keys/sandbox access today? No creds = can't do Layer 4. |
| **API stability** | 20% | Is the API mature (v2+) or beta? Stable APIs = fewer re-QA cycles. |
| **App complexity** | 10% | Simple CRUD (fast) vs complex workflows (slow). Start with simple. |
**Recommended first batch (highest priority):**
Servers with sandbox APIs + high business value + simple CRUD patterns. Run them through the full pipeline first to validate the process, then tackle complex ones.
---
## Agent Roles
For mass production, these phases map to specialized agents:
### Agent 1: API Analyst (`mcp-analyst`)
- **Input:** "Here's the API docs for ServiceX"
- **Does:** Reads all docs, produces `{service}-api-analysis.md`
- **Model:** Opus (needs deep reading comprehension)
- **Skills:** `mcp-api-analyzer`
### Agent 2: Server Builder (`mcp-builder`)
- **Input:** `{service}-api-analysis.md`
- **Does:** Generates full MCP server with all tools
- **Model:** Sonnet (code generation, well-defined patterns)
- **Skills:** `mcp-server-builder`, `mcp-server-development`
### Agent 3: App Designer (`mcp-designer`)
- **Input:** `{service}-api-analysis.md` + built server
- **Does:** Creates all HTML apps
- **Model:** Sonnet (HTML/CSS generation)
- **Skills:** `mcp-app-designer`, `frontend-design`
### Agent 4: Integrator (`mcp-integrator`)
- **Input:** Built server + apps
- **Does:** Wires into LocalBosses (channels, routing, intakes, system prompts)
- **Model:** Sonnet
- **Skills:** `mcp-localbosses-integrator`
### Agent 5: QA Tester (`mcp-qa`)
- **Input:** Integrated LocalBosses channel
- **Does:** Visual + functional testing, produces test report
- **Model:** Opus (multimodal analysis, judgment calls)
- **Skills:** `mcp-qa-tester`
- **Tools:** Peekaboo, Gemini, browser screenshots
### Orchestration (6 phases with feedback loop):
```
[You provide API docs]
P1: Agent 1 — Analyst ──→ analysis.md
├──→ P2: Agent 2 — Builder ──→ MCP server ──┐
│ │ (parallel)
└──→ P3: Agent 3 — Designer ──→ HTML apps ──┘
P4: Agent 4 — Integrator ──→ LocalBosses wired up
P5: Agent 5 — QA Tester ──→ Test report
┌────────┴────────┐
│ Findings? │
│ P0 failures ──→ Route back to
│ Agent 2/3/4 for fix
│ All clear ──→ │
└────────┬────────┘
P6: Ship + Registry Registration + Monitoring
```
Agents 2 and 3 run in parallel since apps only need the analysis doc + tool definitions. QA failures loop back to the responsible agent — no server ships with P0 issues.
---
## Current Inventory (Feb 3, 2026)
### Completed (in LocalBosses):
- n8n (automations channel) — 8 apps
- GHL CRM (crm channel) — 65 apps
- Reonomy (reonomy channel) — 3 apps
- CloseBot (closebot channel) — 6 apps
- Meta Ads (meta-ads channel) — 11 apps
- Google Console (google-console channel) — 5 apps
- Twilio (twilio channel) — 19 apps
### Built but untested (30 servers):
Acuity Scheduling, BambooHR, Basecamp, BigCommerce, Brevo, Calendly, ClickUp, Close, Clover, Constant Contact, FieldEdge, FreshBooks, Freshdesk, Gusto, Help Scout, Housecall Pro, Jobber, Keap, Lightspeed, Mailchimp, Pipedrive, Rippling, ServiceTitan, Squarespace, Toast, TouchBistro, Trello, Wave, Wrike, Zendesk
### Priority: Test the 30 built servers against live APIs and bring the best ones into LocalBosses.
---
## File Locations
| What | Where |
|------|-------|
| This document | `MCP-FACTORY.md` |
| Skills | `~/.clawdbot/workspace/skills/mcp-*/` |
| Built servers | `mcp-diagrams/mcp-servers/{service}/` or `{service}-mcp/` |
| LocalBosses app | `localbosses-app/` |
| GHL apps (65) | `mcp-diagrams/GoHighLevel-MCP/src/ui/react-app/src/apps/` |
| App routing | `localbosses-app/src/app/api/mcp-apps/route.ts` |
| Channel config | `localbosses-app/src/lib/channels.ts` |

1497
agent-repos-study-plan.md Normal file

File diff suppressed because it is too large Load Diff

105
factory-tools/README.md Normal file
View File

@ -0,0 +1,105 @@
# MCP Factory Tools
Toolchain for building, testing, validating, and shipping MCP servers at scale.
## What's Installed
### Testing & Validation
| Tool | Type | Purpose |
|------|------|---------|
| **mcp-jest** (global CLI) | npm | Discover tools, generate tests, validate protocol compliance, watch mode |
| **mcp-validator** (Janix-ai) | Python (cloned) | Formal MCP protocol compliance reports (2024-11-05 → 2025-06-18) |
| **MCP Inspector** (official) | Cloned | Visual web UI for interactive server debugging |
### Development
| Tool | Type | Purpose |
|------|------|---------|
| **FastMCP** (npm) | Library | Opinionated TS framework for building new MCP servers fast |
| **mcp-add** (global CLI) | npm | One-liner install for customers to add servers to any MCP client |
## Quick Commands
### Discover all tools across 30 servers
```bash
cd factory-tools && node scripts/discover-all.mjs
```
Generates test configs in `test-configs/` for every server.
### Validate all servers for MCP compliance
```bash
cd factory-tools && node scripts/validate-all.mjs
```
Produces compliance reports in `reports/` (JSON + Markdown).
### Validate a single server
```bash
mcp-jest validate --config test-configs/calendly.json
```
### Discover a single server's tools
```bash
mcp-jest discover --config test-configs/calendly.json
```
### Run tests against a server (requires real API keys)
```bash
# Edit test-configs/calendly.json to add real CALENDLY_API_KEY
mcp-jest --config test-configs/calendly-tests.json
```
### Compliance report via mcp-validator (Python)
```bash
cd mcp-validator && source .venv/bin/activate
python -m mcp_testing.scripts.compliance_report \
--server-command "node ../mcp-diagrams/mcp-servers/calendly/dist/index.js" \
--protocol-version 2025-06-18
```
## Directory Structure
```
factory-tools/
├── README.md
├── package.json
├── server-registry.json # All 30 servers, their env vars
├── scripts/
│ ├── discover-all.mjs # Batch discovery
│ ├── validate-all.mjs # Batch validation
│ └── fix-unknown-tool-error.mjs # Template-level bug fix (already applied)
├── test-configs/ # Generated per-server test configs
│ ├── calendly.json # Base config (for discover/validate)
│ └── calendly-tests.json # Full test suite (for testing)
├── reports/ # Compliance & discovery reports
├── mcp-validator/ # Cloned: Python compliance testing
├── mcp-inspector/ # Cloned: Visual debugging UI
└── node_modules/ # fastmcp, mcp-jest (local)
```
## Server Status (as of 2026-02-04)
- **30 servers**, **243 tools**
- **702 test cases** auto-generated
- **100/100 compliance** (all servers FULL compliant after bug fix)
- Bug fixed: Unknown tool error handling (McpError + ErrorCode.MethodNotFound)
## For New Servers (use FastMCP)
```typescript
import { FastMCP } from "fastmcp";
import { z } from "zod";
const server = new FastMCP({ name: "My Server", version: "1.0.0" });
server.addTool({
name: "my_tool",
description: "Does a thing",
parameters: z.object({ input: z.string() }),
execute: async (args) => String(result),
});
server.start({ transportType: "stdio" });
```
## For Customer Install Docs
```bash
npx mcp-add --name calendly --type local \
--command "npx mcp-server-calendly" \
--scope global --clients "claude,cursor,vscode"
```

@ -0,0 +1 @@
Subproject commit dd027374636888a830bc22f389ccabcfc7fa7af2

@ -0,0 +1 @@
Subproject commit bb099ddc3b9d9564e13d138d5378705657566706

View File

@ -0,0 +1,16 @@
{
"name": "mcp-factory-tools",
"version": "1.0.0",
"description": "MCP Factory toolchain — testing, validation, scaffolding",
"private": true,
"scripts": {
"test:all": "node scripts/test-all-servers.mjs",
"validate:all": "node scripts/validate-all-servers.mjs",
"report": "node scripts/generate-report.mjs"
},
"type": "module",
"dependencies": {
"fastmcp": "^3.31.0",
"mcp-jest": "^1.2.1"
}
}

View File

@ -0,0 +1,194 @@
{
"date": "2026-02-05T01:09:13.163Z",
"summary": {
"total": 30,
"validated": 30,
"avgScore": 100,
"perfect": 30,
"good": 0,
"needsWork": 0
},
"commonIssues": [],
"servers": [
{
"name": "acuity-scheduling",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "bamboohr",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "basecamp",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "bigcommerce",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "brevo",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "calendly",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "clickup",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "close",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "clover",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "constant-contact",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "fieldedge",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "freshbooks",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "freshdesk",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "gusto",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "helpscout",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "housecall-pro",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "jobber",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "keap",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "lightspeed",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "mailchimp",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "pipedrive",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "rippling",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "servicetitan",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "squarespace",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "toast",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "touchbistro",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "trello",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "wave",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "wrike",
"score": 100,
"level": "FULL",
"issues": []
},
{
"name": "zendesk",
"score": 100,
"level": "FULL",
"issues": []
}
]
}

View File

@ -0,0 +1,37 @@
# MCP Factory Compliance Report
**Date:** 2/4/2026
**Average Score:** 100/100
| Server | Score | Level | Issues |
|--------|-------|-------|--------|
| 🟢 acuity-scheduling | 100/100 | FULL | None |
| 🟢 bamboohr | 100/100 | FULL | None |
| 🟢 basecamp | 100/100 | FULL | None |
| 🟢 bigcommerce | 100/100 | FULL | None |
| 🟢 brevo | 100/100 | FULL | None |
| 🟢 calendly | 100/100 | FULL | None |
| 🟢 clickup | 100/100 | FULL | None |
| 🟢 close | 100/100 | FULL | None |
| 🟢 clover | 100/100 | FULL | None |
| 🟢 constant-contact | 100/100 | FULL | None |
| 🟢 fieldedge | 100/100 | FULL | None |
| 🟢 freshbooks | 100/100 | FULL | None |
| 🟢 freshdesk | 100/100 | FULL | None |
| 🟢 gusto | 100/100 | FULL | None |
| 🟢 helpscout | 100/100 | FULL | None |
| 🟢 housecall-pro | 100/100 | FULL | None |
| 🟢 jobber | 100/100 | FULL | None |
| 🟢 keap | 100/100 | FULL | None |
| 🟢 lightspeed | 100/100 | FULL | None |
| 🟢 mailchimp | 100/100 | FULL | None |
| 🟢 pipedrive | 100/100 | FULL | None |
| 🟢 rippling | 100/100 | FULL | None |
| 🟢 servicetitan | 100/100 | FULL | None |
| 🟢 squarespace | 100/100 | FULL | None |
| 🟢 toast | 100/100 | FULL | None |
| 🟢 touchbistro | 100/100 | FULL | None |
| 🟢 trello | 100/100 | FULL | None |
| 🟢 wave | 100/100 | FULL | None |
| 🟢 wrike | 100/100 | FULL | None |
| 🟢 zendesk | 100/100 | FULL | None |

View File

@ -0,0 +1,126 @@
{
"passed": [
{
"name": "acuity-scheduling",
"tools": 16
},
{
"name": "bamboohr",
"tools": 12
},
{
"name": "basecamp",
"tools": 14
},
{
"name": "bigcommerce",
"tools": 31
},
{
"name": "brevo",
"tools": 25
},
{
"name": "calendly",
"tools": 15
},
{
"name": "clickup",
"tools": 22
},
{
"name": "close",
"tools": 46
},
{
"name": "clover",
"tools": 23
},
{
"name": "constant-contact",
"tools": 27
},
{
"name": "fieldedge",
"tools": 30
},
{
"name": "freshbooks",
"tools": 26
},
{
"name": "freshdesk",
"tools": 25
},
{
"name": "gusto",
"tools": 9
},
{
"name": "helpscout",
"tools": 23
},
{
"name": "housecall-pro",
"tools": 22
},
{
"name": "jobber",
"tools": 24
},
{
"name": "keap",
"tools": 32
},
{
"name": "lightspeed",
"tools": 32
},
{
"name": "mailchimp",
"tools": 15
},
{
"name": "pipedrive",
"tools": 31
},
{
"name": "rippling",
"tools": 21
},
{
"name": "servicetitan",
"tools": 23
},
{
"name": "squarespace",
"tools": 18
},
{
"name": "toast",
"tools": 19
},
{
"name": "touchbistro",
"tools": 21
},
{
"name": "trello",
"tools": 34
},
{
"name": "wave",
"tools": 23
},
{
"name": "wrike",
"tools": 22
},
{
"name": "zendesk",
"tools": 21
}
],
"failed": [],
"total": 30
}

View File

@ -0,0 +1,107 @@
#!/usr/bin/env node
/**
* MCP Factory Batch Discovery
* Runs mcp-jest discover on all 30 servers, generates test configs.
* Uses dummy env vars so servers start without real API keys.
*/
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
import { execSync } from 'child_process';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
const __dirname = dirname(fileURLToPath(import.meta.url));
const FACTORY_ROOT = resolve(__dirname, '..');
const registry = JSON.parse(readFileSync(resolve(FACTORY_ROOT, 'server-registry.json'), 'utf-8'));
const SERVERS_ROOT = resolve(FACTORY_ROOT, registry.servers_root);
// Output dirs
const CONFIGS_DIR = resolve(FACTORY_ROOT, 'test-configs');
const REPORTS_DIR = resolve(FACTORY_ROOT, 'reports');
mkdirSync(CONFIGS_DIR, { recursive: true });
mkdirSync(REPORTS_DIR, { recursive: true });
const results = { passed: [], failed: [], total: 0 };
for (const [name, meta] of Object.entries(registry.servers)) {
results.total++;
const serverDir = resolve(SERVERS_ROOT, name);
const distEntry = resolve(serverDir, 'dist/index.js');
if (!existsSync(distEntry)) {
console.log(`⚠️ ${name}: No dist/index.js — needs build`);
results.failed.push({ name, reason: 'no dist' });
continue;
}
// Build env object with dummy values
const env = {};
for (const envVar of meta.env) {
env[envVar] = 'factory_discovery_dummy';
}
// Create test config
const config = {
server: {
command: 'node',
args: [distEntry],
env
}
};
const configPath = resolve(CONFIGS_DIR, `${name}.json`);
writeFileSync(configPath, JSON.stringify(config, null, 2));
try {
console.log(`🔍 Discovering ${name}...`);
const output = execSync(`mcp-jest discover --config "${configPath}"`, {
timeout: 30000,
encoding: 'utf-8',
cwd: CONFIGS_DIR,
stdio: ['pipe', 'pipe', 'pipe']
});
// Move generated config
const generatedPath = resolve(CONFIGS_DIR, 'mcp-jest.generated.json');
if (existsSync(generatedPath)) {
const generated = JSON.parse(readFileSync(generatedPath, 'utf-8'));
// Merge env into generated config
generated.server.env = env;
writeFileSync(resolve(CONFIGS_DIR, `${name}-tests.json`), JSON.stringify(generated, null, 2));
execSync(`rm "${generatedPath}"`);
const toolCount = Object.keys(generated.tests?.tools || {}).length;
console.log(`${name}: ${toolCount} test cases generated`);
results.passed.push({ name, tools: toolCount });
}
} catch (err) {
const stderr = err.stderr?.toString() || err.message;
console.log(`${name}: ${stderr.split('\n')[0]}`);
results.failed.push({ name, reason: stderr.split('\n')[0] });
}
}
// Summary
console.log('\n' + '═'.repeat(60));
console.log(' MCP FACTORY — DISCOVERY REPORT');
console.log('═'.repeat(60));
console.log(`\nTotal: ${results.total}`);
console.log(`Passed: ${results.passed.length}`);
console.log(`Failed: ${results.failed.length}`);
if (results.passed.length > 0) {
const totalTools = results.passed.reduce((sum, r) => sum + r.tools, 0);
console.log(`\nTotal test cases generated: ${totalTools}`);
}
if (results.failed.length > 0) {
console.log('\nFailed servers:');
for (const f of results.failed) {
console.log(` - ${f.name}: ${f.reason}`);
}
}
// Write report
const reportPath = resolve(REPORTS_DIR, `discovery-${new Date().toISOString().split('T')[0]}.json`);
writeFileSync(reportPath, JSON.stringify(results, null, 2));
console.log(`\nReport saved: ${reportPath}`);

View File

@ -0,0 +1,125 @@
#!/usr/bin/env node
/**
* MCP Factory Fix Unknown Tool Error
* Patches all 30 servers to properly throw McpError for unknown tools
* instead of catching and returning isError:true (which MCP spec treats as success).
*
* The fix:
* 1. Import McpError and ErrorCode from the SDK
* 2. Check tool name against known tools before calling handler
* 3. Throw McpError(ErrorCode.MethodNotFound) for unknown tools
*/
import { readFileSync, writeFileSync, readdirSync, existsSync } from 'fs';
import { execSync } from 'child_process';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
const __dirname = dirname(fileURLToPath(import.meta.url));
const FACTORY_ROOT = resolve(__dirname, '..');
const registry = JSON.parse(readFileSync(resolve(FACTORY_ROOT, 'server-registry.json'), 'utf-8'));
const SERVERS_ROOT = resolve(FACTORY_ROOT, registry.servers_root);
let fixed = 0;
let skipped = 0;
let errors = 0;
for (const [name] of Object.entries(registry.servers)) {
const srcPath = resolve(SERVERS_ROOT, name, 'src/index.ts');
if (!existsSync(srcPath)) {
console.log(`⚠️ ${name}: No src/index.ts`);
skipped++;
continue;
}
let src = readFileSync(srcPath, 'utf-8');
// Check if already fixed
if (src.includes('McpError')) {
console.log(`⏭️ ${name}: Already has McpError import`);
skipped++;
continue;
}
try {
// Step 1: Add McpError and ErrorCode to imports
// Find the import from types.js
const typesImportMatch = src.match(/(import\s*\{[^}]*\}\s*from\s*"@modelcontextprotocol\/sdk\/types\.js";)/);
if (typesImportMatch) {
const oldImport = typesImportMatch[1];
// Extract existing imports
const existingImports = oldImport.match(/\{([^}]+)\}/)[1].trim();
const newImport = oldImport.replace(
`{${existingImports}}`,
`{${existingImports}, McpError, ErrorCode}`
);
src = src.replace(oldImport, newImport);
}
// Step 2: Add tool name validation before the try/catch in CallToolRequestSchema handler
// Pattern: Find the handler and add a check
const toolNames = [...src.matchAll(/name:\s*"([^"]+)"/g)].map(m => m[1]);
// Filter to only tool names (in the tools array, not other name fields)
const validToolNames = toolNames.filter(n => !['text', 'object'].includes(n));
// Find the CallToolRequestSchema handler and add validation
const handlerPattern = /server\.setRequestHandler\(CallToolRequestSchema,\s*async\s*\(request\)\s*=>\s*\{\s*const\s*\{\s*name,\s*arguments:\s*args\s*\}\s*=\s*request\.params;\s*\n\s*try\s*\{/;
if (handlerPattern.test(src)) {
src = src.replace(
handlerPattern,
`server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, \`Unknown tool: \${name}\`);
}
try {`
);
} else {
// Try a more flexible pattern
const altPattern = /server\.setRequestHandler\(CallToolRequestSchema,\s*async\s*\(request\)\s*=>\s*\{/;
if (altPattern.test(src)) {
// Check if there's already a tool validation
const handlerBlock = src.substring(src.search(altPattern));
if (handlerBlock.includes('const { name') && !handlerBlock.includes('knownTools')) {
// Insert after the destructuring
src = src.replace(
/const\s*\{\s*name,\s*arguments:\s*args\s*\}\s*=\s*request\.params;\s*\n/,
`const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, \`Unknown tool: \${name}\`);
}
`
);
}
}
}
writeFileSync(srcPath, src);
console.log(`${name}: Patched`);
fixed++;
// Rebuild
try {
execSync('npm run build', { cwd: resolve(SERVERS_ROOT, name), timeout: 15000, stdio: 'pipe' });
console.log(` 🔨 ${name}: Rebuilt`);
} catch (buildErr) {
console.log(` ⚠️ ${name}: Build warning (check manually)`);
}
} catch (err) {
console.log(`${name}: ${err.message}`);
errors++;
}
}
console.log('\n' + '═'.repeat(60));
console.log(`Fixed: ${fixed} | Skipped: ${skipped} | Errors: ${errors}`);

View File

@ -0,0 +1,127 @@
#!/usr/bin/env node
/**
* MCP Factory Batch Protocol Validation
* Runs mcp-jest validate on all 30 servers, collects compliance scores.
*/
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
import { execSync } from 'child_process';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
const __dirname = dirname(fileURLToPath(import.meta.url));
const FACTORY_ROOT = resolve(__dirname, '..');
const registry = JSON.parse(readFileSync(resolve(FACTORY_ROOT, 'server-registry.json'), 'utf-8'));
const SERVERS_ROOT = resolve(FACTORY_ROOT, registry.servers_root);
const CONFIGS_DIR = resolve(FACTORY_ROOT, 'test-configs');
const REPORTS_DIR = resolve(FACTORY_ROOT, 'reports');
mkdirSync(REPORTS_DIR, { recursive: true });
const results = [];
let totalScore = 0;
for (const [name, meta] of Object.entries(registry.servers)) {
const configPath = resolve(CONFIGS_DIR, `${name}.json`);
if (!existsSync(configPath)) {
console.log(`⚠️ ${name}: No config — run discover first`);
results.push({ name, score: null, level: 'SKIPPED', issues: ['No config file'] });
continue;
}
try {
console.log(`🔬 Validating ${name}...`);
const output = execSync(`mcp-jest validate --config "${configPath}" 2>&1`, {
timeout: 30000,
encoding: 'utf-8',
stdio: ['pipe', 'pipe', 'pipe']
});
// Parse score from output
const scoreMatch = output.match(/Score:\s*(\d+)\/100/);
const levelMatch = output.match(/Level:\s*(\S+)/);
const failedTests = [...output.matchAll(/❌\s*\[(\w+)\s*\]\s*(.+)/g)].map(m => m[2].trim());
const score = scoreMatch ? parseInt(scoreMatch[1]) : null;
const level = levelMatch ? levelMatch[1] : 'UNKNOWN';
totalScore += score || 0;
results.push({ name, score, level, issues: failedTests });
const emoji = score >= 95 ? '🟢' : score >= 80 ? '🟡' : '🔴';
console.log(` ${emoji} ${name}: ${score}/100 (${level}) ${failedTests.length > 0 ? '— ' + failedTests.length + ' issue(s)' : ''}`);
} catch (err) {
// mcp-jest validate exits with code 1 for non-compliant, but still has output
const output = err.stdout?.toString() || err.stderr?.toString() || '';
const scoreMatch = output.match(/Score:\s*(\d+)\/100/);
const levelMatch = output.match(/Level:\s*(\S+)/);
const failedTests = [...output.matchAll(/❌\s*\[(\w+)\s*\]\s*(.+)/g)].map(m => m[2].trim());
const score = scoreMatch ? parseInt(scoreMatch[1]) : 0;
const level = levelMatch ? levelMatch[1] : 'ERROR';
totalScore += score;
results.push({ name, score, level, issues: failedTests.length > 0 ? failedTests : [output.split('\n')[0]] });
const emoji = score >= 95 ? '🟢' : score >= 80 ? '🟡' : '🔴';
console.log(` ${emoji} ${name}: ${score}/100 (${level}) ${failedTests.length > 0 ? '— ' + failedTests.length + ' issue(s)' : ''}`);
}
}
// Summary
const validResults = results.filter(r => r.score !== null);
const avgScore = validResults.length > 0 ? Math.round(totalScore / validResults.length) : 0;
const perfect = validResults.filter(r => r.score >= 95).length;
const good = validResults.filter(r => r.score >= 80 && r.score < 95).length;
const needsWork = validResults.filter(r => r.score < 80).length;
console.log('\n' + '═'.repeat(60));
console.log(' MCP FACTORY — COMPLIANCE REPORT');
console.log('═'.repeat(60));
console.log(`\nServers validated: ${validResults.length}/${results.length}`);
console.log(`Average score: ${avgScore}/100`);
console.log(`🟢 Compliant (95+): ${perfect}`);
console.log(`🟡 Near (80-94): ${good}`);
console.log(`🔴 Needs work (<80): ${needsWork}`);
// Common issues
const allIssues = results.flatMap(r => r.issues);
const issueFreq = {};
for (const issue of allIssues) {
issueFreq[issue] = (issueFreq[issue] || 0) + 1;
}
const sortedIssues = Object.entries(issueFreq).sort((a, b) => b[1] - a[1]);
if (sortedIssues.length > 0) {
console.log('\nMost common issues:');
for (const [issue, count] of sortedIssues.slice(0, 5)) {
console.log(` ${count}x — ${issue}`);
}
}
// Write report
const report = {
date: new Date().toISOString(),
summary: { total: results.length, validated: validResults.length, avgScore, perfect, good, needsWork },
commonIssues: sortedIssues,
servers: results
};
const reportPath = resolve(REPORTS_DIR, `compliance-${new Date().toISOString().split('T')[0]}.json`);
writeFileSync(reportPath, JSON.stringify(report, null, 2));
// Also write markdown
let md = `# MCP Factory Compliance Report\n\n`;
md += `**Date:** ${new Date().toLocaleDateString()}\n`;
md += `**Average Score:** ${avgScore}/100\n\n`;
md += `| Server | Score | Level | Issues |\n|--------|-------|-------|--------|\n`;
for (const r of results) {
const emoji = r.score >= 95 ? '🟢' : r.score >= 80 ? '🟡' : r.score === null ? '⚪' : '🔴';
md += `| ${emoji} ${r.name} | ${r.score ?? '-'}/100 | ${r.level} | ${r.issues.join('; ') || 'None'} |\n`;
}
const mdPath = resolve(REPORTS_DIR, `compliance-${new Date().toISOString().split('T')[0]}.md`);
writeFileSync(mdPath, md);
console.log(`\nReports saved:\n ${reportPath}\n ${mdPath}`);

View File

@ -0,0 +1,35 @@
{
"servers_root": "../mcp-diagrams/mcp-servers",
"servers": {
"acuity-scheduling": { "env": ["ACUITY_API_KEY", "ACUITY_USER_ID"] },
"bamboohr": { "env": ["BAMBOOHR_API_KEY", "BAMBOOHR_COMPANY_DOMAIN"] },
"basecamp": { "env": ["BASECAMP_ACCESS_TOKEN", "BASECAMP_ACCOUNT_ID", "BASECAMP_APP_IDENTITY"] },
"bigcommerce": { "env": ["BIGCOMMERCE_ACCESS_TOKEN", "BIGCOMMERCE_STORE_HASH"] },
"brevo": { "env": ["BREVO_API_KEY"] },
"calendly": { "env": ["CALENDLY_API_KEY"] },
"clickup": { "env": ["CLICKUP_API_KEY"] },
"close": { "env": ["CLOSE_API_KEY"] },
"clover": { "env": ["CLOVER_API_KEY", "CLOVER_MERCHANT_ID", "CLOVER_REGION", "CLOVER_SANDBOX"] },
"constant-contact": { "env": ["CONSTANT_CONTACT_ACCESS_TOKEN"] },
"fieldedge": { "env": ["FIELDEDGE_API_KEY", "FIELDEDGE_SUBSCRIPTION_KEY"] },
"freshbooks": { "env": ["FRESHBOOKS_ACCESS_TOKEN", "FRESHBOOKS_ACCOUNT_ID"] },
"freshdesk": { "env": ["FRESHDESK_API_KEY", "FRESHDESK_DOMAIN"] },
"gusto": { "env": ["GUSTO_ACCESS_TOKEN"] },
"helpscout": { "env": ["HELPSCOUT_ACCESS_TOKEN"] },
"housecall-pro": { "env": ["HOUSECALL_PRO_API_KEY"] },
"jobber": { "env": ["JOBBER_ACCESS_TOKEN"] },
"keap": { "env": ["KEAP_ACCESS_TOKEN"] },
"lightspeed": { "env": ["LIGHTSPEED_ACCESS_TOKEN", "LIGHTSPEED_ACCOUNT_ID"] },
"mailchimp": { "env": ["MAILCHIMP_API_KEY"] },
"pipedrive": { "env": ["PIPEDRIVE_API_TOKEN"] },
"rippling": { "env": ["RIPPLING_API_KEY"] },
"servicetitan": { "env": ["SERVICETITAN_CLIENT_ID", "SERVICETITAN_CLIENT_SECRET", "SERVICETITAN_TENANT_ID"] },
"squarespace": { "env": ["SQUARESPACE_API_KEY"] },
"toast": { "env": ["TOAST_CLIENT_ID", "TOAST_CLIENT_SECRET", "TOAST_RESTAURANT_GUID"] },
"touchbistro": { "env": ["TOUCHBISTRO_API_KEY", "TOUCHBISTRO_VENUE_ID"] },
"trello": { "env": ["TRELLO_API_KEY", "TRELLO_TOKEN"] },
"wave": { "env": ["WAVE_API_TOKEN"] },
"wrike": { "env": ["WRIKE_ACCESS_TOKEN"] },
"zendesk": { "env": ["ZENDESK_API_TOKEN", "ZENDESK_EMAIL", "ZENDESK_SUBDOMAIN"] }
}
}

View File

@ -0,0 +1,174 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/acuity-scheduling/dist/index.js"
],
"env": {
"ACUITY_API_KEY": "factory_discovery_dummy",
"ACUITY_USER_ID": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_appointments": {
"args": {
"minDate": "test_value",
"maxDate": "test_value",
"calendarID": 50,
"appointmentTypeID": 50,
"canceled": true,
"max": 50
},
"expect": "content && content.length > 0"
},
"list_appointments:empty-minDate": {
"args": {
"minDate": "",
"maxDate": "test_value",
"calendarID": 50,
"appointmentTypeID": 50,
"canceled": true,
"max": 50
},
"expect": "exists"
},
"list_appointments:empty-maxDate": {
"args": {
"minDate": "test_value",
"maxDate": "",
"calendarID": 50,
"appointmentTypeID": 50,
"canceled": true,
"max": 50
},
"expect": "exists"
},
"get_appointment": {
"args": {
"id": 50
},
"expect": "content && content.length > 0"
},
"create_appointment": {
"args": {
"datetime": "test_value",
"appointmentTypeID": 50,
"calendarID": 50,
"firstName": "Test Name",
"lastName": "Test Name",
"email": "test@example.com",
"phone": "test_value",
"notes": "test_value",
"fields": []
},
"expect": "content && content.length > 0"
},
"create_appointment:empty-phone": {
"args": {
"datetime": "test_value",
"appointmentTypeID": 50,
"calendarID": 50,
"firstName": "Test Name",
"lastName": "Test Name",
"email": "test@example.com",
"phone": "",
"notes": "test_value",
"fields": []
},
"expect": "exists"
},
"create_appointment:empty-notes": {
"args": {
"datetime": "test_value",
"appointmentTypeID": 50,
"calendarID": 50,
"firstName": "Test Name",
"lastName": "Test Name",
"email": "test@example.com",
"phone": "test_value",
"notes": "",
"fields": []
},
"expect": "exists"
},
"cancel_appointment": {
"args": {
"id": 50,
"cancelNote": "test_value",
"noShow": true
},
"expect": "content && content.length > 0"
},
"cancel_appointment:empty-cancelNote": {
"args": {
"id": 50,
"cancelNote": "",
"noShow": true
},
"expect": "exists"
},
"list_calendars": {
"args": {},
"expect": "content && content.length > 0"
},
"get_availability": {
"args": {
"appointmentTypeID": 50,
"calendarID": 50,
"date": "test_value",
"month": "test_value",
"timezone": "test_value"
},
"expect": "content && content.length > 0"
},
"get_availability:empty-date": {
"args": {
"appointmentTypeID": 50,
"calendarID": 50,
"date": "",
"month": "test_value",
"timezone": "test_value"
},
"expect": "exists"
},
"get_availability:empty-month": {
"args": {
"appointmentTypeID": 50,
"calendarID": 50,
"date": "test_value",
"month": "",
"timezone": "test_value"
},
"expect": "exists"
},
"get_availability:empty-timezone": {
"args": {
"appointmentTypeID": 50,
"calendarID": 50,
"date": "test_value",
"month": "test_value",
"timezone": ""
},
"expect": "exists"
},
"list_clients": {
"args": {
"search": "test query",
"max": 50
},
"expect": "content && content.length > 0"
},
"list_clients:empty-search": {
"args": {
"search": "",
"max": 50
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,12 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/acuity-scheduling/dist/index.js"
],
"env": {
"ACUITY_API_KEY": "factory_discovery_dummy",
"ACUITY_USER_ID": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,113 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/bamboohr/dist/index.js"
],
"env": {
"BAMBOOHR_API_KEY": "factory_discovery_dummy",
"BAMBOOHR_COMPANY_DOMAIN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_employees": {
"args": {},
"expect": "content && content.length > 0"
},
"get_employee": {
"args": {
"employee_id": "test-id-123",
"fields": []
},
"expect": "content && content.length > 0"
},
"list_time_off_requests": {
"args": {
"start": "test_value",
"end": "test_value",
"status": "approved",
"employee_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_time_off_requests:empty-start": {
"args": {
"start": "",
"end": "test_value",
"status": "approved",
"employee_id": "test-id-123"
},
"expect": "exists"
},
"list_time_off_requests:empty-end": {
"args": {
"start": "test_value",
"end": "",
"status": "approved",
"employee_id": "test-id-123"
},
"expect": "exists"
},
"list_time_off_requests:empty-status": {
"args": {
"start": "test_value",
"end": "test_value",
"status": "",
"employee_id": "test-id-123"
},
"expect": "exists"
},
"list_time_off_requests:empty-employee_id": {
"args": {
"start": "test_value",
"end": "test_value",
"status": "approved",
"employee_id": ""
},
"expect": "exists"
},
"request_time_off": {
"args": {
"employee_id": "test-id-123",
"time_off_type_id": "test-id-123",
"start": "test_value",
"end": "test_value",
"amount": 50,
"notes": "test_value"
},
"expect": "content && content.length > 0"
},
"request_time_off:empty-notes": {
"args": {
"employee_id": "test-id-123",
"time_off_type_id": "test-id-123",
"start": "test_value",
"end": "test_value",
"amount": 50,
"notes": ""
},
"expect": "exists"
},
"list_goals": {
"args": {
"employee_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"get_directory": {
"args": {},
"expect": "content && content.length > 0"
},
"list_files": {
"args": {
"employee_id": "test-id-123"
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,12 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/bamboohr/dist/index.js"
],
"env": {
"BAMBOOHR_API_KEY": "factory_discovery_dummy",
"BAMBOOHR_COMPANY_DOMAIN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,150 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/basecamp/dist/index.js"
],
"env": {
"BASECAMP_ACCESS_TOKEN": "factory_discovery_dummy",
"BASECAMP_ACCOUNT_ID": "factory_discovery_dummy",
"BASECAMP_APP_IDENTITY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_projects": {
"args": {
"status": "active"
},
"expect": "content && content.length > 0"
},
"list_projects:empty-status": {
"args": {
"status": ""
},
"expect": "exists"
},
"get_project": {
"args": {
"project_id": 50
},
"expect": "content && content.length > 0"
},
"list_todos": {
"args": {
"project_id": 50,
"todolist_id": 50,
"status": "active",
"completed": true
},
"expect": "content && content.length > 0"
},
"list_todos:empty-status": {
"args": {
"project_id": 50,
"todolist_id": 50,
"status": "",
"completed": true
},
"expect": "exists"
},
"create_todo": {
"args": {
"project_id": 50,
"todolist_id": 50,
"content": "Sample content for testing",
"description": "test_value",
"assignee_ids": [],
"due_on": "test_value",
"starts_on": "test_value",
"notify": true
},
"expect": "content && content.length > 0"
},
"create_todo:empty-description": {
"args": {
"project_id": 50,
"todolist_id": 50,
"content": "Sample content for testing",
"description": "",
"assignee_ids": [],
"due_on": "test_value",
"starts_on": "test_value",
"notify": true
},
"expect": "exists"
},
"create_todo:empty-due_on": {
"args": {
"project_id": 50,
"todolist_id": 50,
"content": "Sample content for testing",
"description": "test_value",
"assignee_ids": [],
"due_on": "",
"starts_on": "test_value",
"notify": true
},
"expect": "exists"
},
"create_todo:empty-starts_on": {
"args": {
"project_id": 50,
"todolist_id": 50,
"content": "Sample content for testing",
"description": "test_value",
"assignee_ids": [],
"due_on": "test_value",
"starts_on": "",
"notify": true
},
"expect": "exists"
},
"complete_todo": {
"args": {
"project_id": 50,
"todo_id": 50
},
"expect": "content && content.length > 0"
},
"list_messages": {
"args": {
"project_id": 50,
"message_board_id": 50
},
"expect": "content && content.length > 0"
},
"create_message": {
"args": {
"project_id": 50,
"message_board_id": 50,
"subject": "test_value",
"content": "Sample content for testing",
"status": "active",
"category_id": 50
},
"expect": "content && content.length > 0"
},
"create_message:empty-status": {
"args": {
"project_id": 50,
"message_board_id": 50,
"subject": "test_value",
"content": "Sample content for testing",
"status": "",
"category_id": 50
},
"expect": "exists"
},
"list_people": {
"args": {
"project_id": 50
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,13 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/basecamp/dist/index.js"
],
"env": {
"BASECAMP_ACCESS_TOKEN": "factory_discovery_dummy",
"BASECAMP_ACCOUNT_ID": "factory_discovery_dummy",
"BASECAMP_APP_IDENTITY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,462 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/bigcommerce/dist/index.js"
],
"env": {
"BIGCOMMERCE_ACCESS_TOKEN": "factory_discovery_dummy",
"BIGCOMMERCE_STORE_HASH": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_products": {
"args": {
"limit": 50,
"page": 50,
"name": "Test Name",
"sku": "test_value",
"brand_id": 50,
"categories": "test_value",
"is_visible": true,
"availability": "test_value",
"include": "test_value"
},
"expect": "content && content.length > 0"
},
"list_products:empty-name": {
"args": {
"limit": 50,
"page": 50,
"name": "",
"sku": "test_value",
"brand_id": 50,
"categories": "test_value",
"is_visible": true,
"availability": "test_value",
"include": "test_value"
},
"expect": "exists"
},
"list_products:empty-sku": {
"args": {
"limit": 50,
"page": 50,
"name": "Test Name",
"sku": "",
"brand_id": 50,
"categories": "test_value",
"is_visible": true,
"availability": "test_value",
"include": "test_value"
},
"expect": "exists"
},
"list_products:empty-categories": {
"args": {
"limit": 50,
"page": 50,
"name": "Test Name",
"sku": "test_value",
"brand_id": 50,
"categories": "",
"is_visible": true,
"availability": "test_value",
"include": "test_value"
},
"expect": "exists"
},
"list_products:empty-availability": {
"args": {
"limit": 50,
"page": 50,
"name": "Test Name",
"sku": "test_value",
"brand_id": 50,
"categories": "test_value",
"is_visible": true,
"availability": "",
"include": "test_value"
},
"expect": "exists"
},
"list_products:empty-include": {
"args": {
"limit": 50,
"page": 50,
"name": "Test Name",
"sku": "test_value",
"brand_id": 50,
"categories": "test_value",
"is_visible": true,
"availability": "test_value",
"include": ""
},
"expect": "exists"
},
"get_product": {
"args": {
"product_id": 50,
"include": "test_value"
},
"expect": "content && content.length > 0"
},
"get_product:empty-include": {
"args": {
"product_id": 50,
"include": ""
},
"expect": "exists"
},
"create_product": {
"args": {
"name": "Test Name",
"type": "test_value",
"weight": 50,
"price": 50,
"sku": "test_value",
"description": "test_value",
"categories": [],
"brand_id": 50,
"inventory_level": 50,
"inventory_tracking": "test_value",
"is_visible": true,
"availability": "test_value",
"cost_price": 50,
"sale_price": 50
},
"expect": "content && content.length > 0"
},
"create_product:empty-sku": {
"args": {
"name": "Test Name",
"type": "test_value",
"weight": 50,
"price": 50,
"sku": "",
"description": "test_value",
"categories": [],
"brand_id": 50,
"inventory_level": 50,
"inventory_tracking": "test_value",
"is_visible": true,
"availability": "test_value",
"cost_price": 50,
"sale_price": 50
},
"expect": "exists"
},
"create_product:empty-description": {
"args": {
"name": "Test Name",
"type": "test_value",
"weight": 50,
"price": 50,
"sku": "test_value",
"description": "",
"categories": [],
"brand_id": 50,
"inventory_level": 50,
"inventory_tracking": "test_value",
"is_visible": true,
"availability": "test_value",
"cost_price": 50,
"sale_price": 50
},
"expect": "exists"
},
"create_product:empty-inventory_tracking": {
"args": {
"name": "Test Name",
"type": "test_value",
"weight": 50,
"price": 50,
"sku": "test_value",
"description": "test_value",
"categories": [],
"brand_id": 50,
"inventory_level": 50,
"inventory_tracking": "",
"is_visible": true,
"availability": "test_value",
"cost_price": 50,
"sale_price": 50
},
"expect": "exists"
},
"create_product:empty-availability": {
"args": {
"name": "Test Name",
"type": "test_value",
"weight": 50,
"price": 50,
"sku": "test_value",
"description": "test_value",
"categories": [],
"brand_id": 50,
"inventory_level": 50,
"inventory_tracking": "test_value",
"is_visible": true,
"availability": "",
"cost_price": 50,
"sale_price": 50
},
"expect": "exists"
},
"update_product": {
"args": {
"product_id": 50,
"name": "Test Name",
"price": 50,
"sku": "test_value",
"description": "test_value",
"categories": [],
"inventory_level": 50,
"is_visible": true,
"availability": "test_value",
"sale_price": 50
},
"expect": "content && content.length > 0"
},
"update_product:empty-name": {
"args": {
"product_id": 50,
"name": "",
"price": 50,
"sku": "test_value",
"description": "test_value",
"categories": [],
"inventory_level": 50,
"is_visible": true,
"availability": "test_value",
"sale_price": 50
},
"expect": "exists"
},
"update_product:empty-sku": {
"args": {
"product_id": 50,
"name": "Test Name",
"price": 50,
"sku": "",
"description": "test_value",
"categories": [],
"inventory_level": 50,
"is_visible": true,
"availability": "test_value",
"sale_price": 50
},
"expect": "exists"
},
"update_product:empty-description": {
"args": {
"product_id": 50,
"name": "Test Name",
"price": 50,
"sku": "test_value",
"description": "",
"categories": [],
"inventory_level": 50,
"is_visible": true,
"availability": "test_value",
"sale_price": 50
},
"expect": "exists"
},
"update_product:empty-availability": {
"args": {
"product_id": 50,
"name": "Test Name",
"price": 50,
"sku": "test_value",
"description": "test_value",
"categories": [],
"inventory_level": 50,
"is_visible": true,
"availability": "",
"sale_price": 50
},
"expect": "exists"
},
"list_orders": {
"args": {
"limit": 50,
"page": 50,
"min_date_created": "test_value",
"max_date_created": "test_value",
"status_id": 50,
"customer_id": 50,
"min_total": 50,
"max_total": 50,
"is_deleted": true,
"sort": "test_value"
},
"expect": "content && content.length > 0"
},
"list_orders:empty-min_date_created": {
"args": {
"limit": 50,
"page": 50,
"min_date_created": "",
"max_date_created": "test_value",
"status_id": 50,
"customer_id": 50,
"min_total": 50,
"max_total": 50,
"is_deleted": true,
"sort": "test_value"
},
"expect": "exists"
},
"list_orders:empty-max_date_created": {
"args": {
"limit": 50,
"page": 50,
"min_date_created": "test_value",
"max_date_created": "",
"status_id": 50,
"customer_id": 50,
"min_total": 50,
"max_total": 50,
"is_deleted": true,
"sort": "test_value"
},
"expect": "exists"
},
"list_orders:empty-sort": {
"args": {
"limit": 50,
"page": 50,
"min_date_created": "test_value",
"max_date_created": "test_value",
"status_id": 50,
"customer_id": 50,
"min_total": 50,
"max_total": 50,
"is_deleted": true,
"sort": ""
},
"expect": "exists"
},
"get_order": {
"args": {
"order_id": 50,
"include_products": true,
"include_shipping": true
},
"expect": "content && content.length > 0"
},
"list_customers": {
"args": {
"limit": 50,
"page": 50,
"email": "test@example.com",
"name": "Test Name",
"company": "test_value",
"customer_group_id": 50,
"date_created_min": "test_value",
"date_created_max": "test_value",
"include": "test_value"
},
"expect": "content && content.length > 0"
},
"list_customers:empty-email": {
"args": {
"limit": 50,
"page": 50,
"email": "",
"name": "Test Name",
"company": "test_value",
"customer_group_id": 50,
"date_created_min": "test_value",
"date_created_max": "test_value",
"include": "test_value"
},
"expect": "exists"
},
"list_customers:empty-name": {
"args": {
"limit": 50,
"page": 50,
"email": "test@example.com",
"name": "",
"company": "test_value",
"customer_group_id": 50,
"date_created_min": "test_value",
"date_created_max": "test_value",
"include": "test_value"
},
"expect": "exists"
},
"list_customers:empty-company": {
"args": {
"limit": 50,
"page": 50,
"email": "test@example.com",
"name": "Test Name",
"company": "",
"customer_group_id": 50,
"date_created_min": "test_value",
"date_created_max": "test_value",
"include": "test_value"
},
"expect": "exists"
},
"list_customers:empty-date_created_min": {
"args": {
"limit": 50,
"page": 50,
"email": "test@example.com",
"name": "Test Name",
"company": "test_value",
"customer_group_id": 50,
"date_created_min": "",
"date_created_max": "test_value",
"include": "test_value"
},
"expect": "exists"
},
"list_customers:empty-date_created_max": {
"args": {
"limit": 50,
"page": 50,
"email": "test@example.com",
"name": "Test Name",
"company": "test_value",
"customer_group_id": 50,
"date_created_min": "test_value",
"date_created_max": "",
"include": "test_value"
},
"expect": "exists"
},
"list_customers:empty-include": {
"args": {
"limit": 50,
"page": 50,
"email": "test@example.com",
"name": "Test Name",
"company": "test_value",
"customer_group_id": 50,
"date_created_min": "test_value",
"date_created_max": "test_value",
"include": ""
},
"expect": "exists"
},
"update_inventory": {
"args": {
"product_id": 50,
"variant_id": 50,
"inventory_level": 50,
"inventory_warning_level": 50
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,12 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/bigcommerce/dist/index.js"
],
"env": {
"BIGCOMMERCE_ACCESS_TOKEN": "factory_discovery_dummy",
"BIGCOMMERCE_STORE_HASH": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,318 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/brevo/dist/index.js"
],
"env": {
"BREVO_API_KEY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"send_email": {
"args": {
"to": [],
"sender": {},
"subject": "test_value",
"htmlContent": "Sample content for testing",
"textContent": "Sample content for testing",
"templateId": 50,
"params": {},
"replyTo": {},
"attachment": [],
"tags": []
},
"expect": "content && content.length > 0"
},
"send_email:empty-subject": {
"args": {
"to": [],
"sender": {},
"subject": "",
"htmlContent": "Sample content for testing",
"textContent": "Sample content for testing",
"templateId": 50,
"params": {},
"replyTo": {},
"attachment": [],
"tags": []
},
"expect": "exists"
},
"send_email:empty-htmlContent": {
"args": {
"to": [],
"sender": {},
"subject": "test_value",
"htmlContent": "",
"textContent": "Sample content for testing",
"templateId": 50,
"params": {},
"replyTo": {},
"attachment": [],
"tags": []
},
"expect": "exists"
},
"send_email:empty-textContent": {
"args": {
"to": [],
"sender": {},
"subject": "test_value",
"htmlContent": "Sample content for testing",
"textContent": "",
"templateId": 50,
"params": {},
"replyTo": {},
"attachment": [],
"tags": []
},
"expect": "exists"
},
"list_contacts": {
"args": {
"limit": 50,
"offset": 50,
"modifiedSince": "test_value",
"sort": "test_value"
},
"expect": "content && content.length > 0"
},
"list_contacts:empty-modifiedSince": {
"args": {
"limit": 50,
"offset": 50,
"modifiedSince": "",
"sort": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-sort": {
"args": {
"limit": 50,
"offset": 50,
"modifiedSince": "test_value",
"sort": ""
},
"expect": "exists"
},
"add_contact": {
"args": {
"email": "test@example.com",
"attributes": {},
"listIds": [],
"updateEnabled": true,
"smtpBlacklistSender": []
},
"expect": "content && content.length > 0"
},
"update_contact": {
"args": {
"identifier": "test-id-123",
"attributes": {},
"listIds": [],
"unlinkListIds": [],
"emailBlacklisted": true,
"smsBlacklisted": true
},
"expect": "content && content.length > 0"
},
"list_campaigns": {
"args": {
"type": "test_value",
"status": "test_value",
"limit": 50,
"offset": 50,
"sort": "test_value"
},
"expect": "content && content.length > 0"
},
"list_campaigns:empty-type": {
"args": {
"type": "",
"status": "test_value",
"limit": 50,
"offset": 50,
"sort": "test_value"
},
"expect": "exists"
},
"list_campaigns:empty-status": {
"args": {
"type": "test_value",
"status": "",
"limit": 50,
"offset": 50,
"sort": "test_value"
},
"expect": "exists"
},
"list_campaigns:empty-sort": {
"args": {
"type": "test_value",
"status": "test_value",
"limit": 50,
"offset": 50,
"sort": ""
},
"expect": "exists"
},
"create_campaign": {
"args": {
"name": "Test Name",
"subject": "test_value",
"sender": {},
"htmlContent": "Sample content for testing",
"templateId": 50,
"recipients": {},
"scheduledAt": "test_value",
"replyTo": "test_value",
"toField": "test_value",
"tag": "test_value"
},
"expect": "content && content.length > 0"
},
"create_campaign:empty-htmlContent": {
"args": {
"name": "Test Name",
"subject": "test_value",
"sender": {},
"htmlContent": "",
"templateId": 50,
"recipients": {},
"scheduledAt": "test_value",
"replyTo": "test_value",
"toField": "test_value",
"tag": "test_value"
},
"expect": "exists"
},
"create_campaign:empty-scheduledAt": {
"args": {
"name": "Test Name",
"subject": "test_value",
"sender": {},
"htmlContent": "Sample content for testing",
"templateId": 50,
"recipients": {},
"scheduledAt": "",
"replyTo": "test_value",
"toField": "test_value",
"tag": "test_value"
},
"expect": "exists"
},
"create_campaign:empty-replyTo": {
"args": {
"name": "Test Name",
"subject": "test_value",
"sender": {},
"htmlContent": "Sample content for testing",
"templateId": 50,
"recipients": {},
"scheduledAt": "test_value",
"replyTo": "",
"toField": "test_value",
"tag": "test_value"
},
"expect": "exists"
},
"create_campaign:empty-toField": {
"args": {
"name": "Test Name",
"subject": "test_value",
"sender": {},
"htmlContent": "Sample content for testing",
"templateId": 50,
"recipients": {},
"scheduledAt": "test_value",
"replyTo": "test_value",
"toField": "",
"tag": "test_value"
},
"expect": "exists"
},
"create_campaign:empty-tag": {
"args": {
"name": "Test Name",
"subject": "test_value",
"sender": {},
"htmlContent": "Sample content for testing",
"templateId": 50,
"recipients": {},
"scheduledAt": "test_value",
"replyTo": "test_value",
"toField": "test_value",
"tag": ""
},
"expect": "exists"
},
"send_sms": {
"args": {
"sender": "test_value",
"recipient": "test_value",
"content": "Sample content for testing",
"type": "test_value",
"tag": "test_value",
"webUrl": "https://example.com"
},
"expect": "content && content.length > 0"
},
"send_sms:empty-type": {
"args": {
"sender": "test_value",
"recipient": "test_value",
"content": "Sample content for testing",
"type": "",
"tag": "test_value",
"webUrl": "https://example.com"
},
"expect": "exists"
},
"send_sms:empty-tag": {
"args": {
"sender": "test_value",
"recipient": "test_value",
"content": "Sample content for testing",
"type": "test_value",
"tag": "",
"webUrl": "https://example.com"
},
"expect": "exists"
},
"send_sms:empty-webUrl": {
"args": {
"sender": "test_value",
"recipient": "test_value",
"content": "Sample content for testing",
"type": "test_value",
"tag": "test_value",
"webUrl": ""
},
"expect": "exists"
},
"list_templates": {
"args": {
"templateStatus": true,
"limit": 50,
"offset": 50,
"sort": "test_value"
},
"expect": "content && content.length > 0"
},
"list_templates:empty-sort": {
"args": {
"templateStatus": true,
"limit": 50,
"offset": 50,
"sort": ""
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/brevo/dist/index.js"
],
"env": {
"BREVO_API_KEY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,143 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/calendly/dist/index.js"
],
"env": {
"CALENDLY_API_KEY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_events": {
"args": {
"count": 50,
"min_start_time": "test_value",
"max_start_time": "test_value",
"status": "active",
"page_token": "test_value"
},
"expect": "content && content.length > 0"
},
"list_events:empty-min_start_time": {
"args": {
"count": 50,
"min_start_time": "",
"max_start_time": "test_value",
"status": "active",
"page_token": "test_value"
},
"expect": "exists"
},
"list_events:empty-max_start_time": {
"args": {
"count": 50,
"min_start_time": "test_value",
"max_start_time": "",
"status": "active",
"page_token": "test_value"
},
"expect": "exists"
},
"list_events:empty-status": {
"args": {
"count": 50,
"min_start_time": "test_value",
"max_start_time": "test_value",
"status": "",
"page_token": "test_value"
},
"expect": "exists"
},
"list_events:empty-page_token": {
"args": {
"count": 50,
"min_start_time": "test_value",
"max_start_time": "test_value",
"status": "active",
"page_token": ""
},
"expect": "exists"
},
"get_event": {
"args": {
"event_uuid": "test-id-123"
},
"expect": "content && content.length > 0"
},
"cancel_event": {
"args": {
"event_uuid": "test-id-123",
"reason": "test_value"
},
"expect": "content && content.length > 0"
},
"cancel_event:empty-reason": {
"args": {
"event_uuid": "test-id-123",
"reason": ""
},
"expect": "exists"
},
"list_event_types": {
"args": {
"count": 50,
"active": true,
"page_token": "test_value"
},
"expect": "content && content.length > 0"
},
"list_event_types:empty-page_token": {
"args": {
"count": 50,
"active": true,
"page_token": ""
},
"expect": "exists"
},
"get_availability": {
"args": {
"event_type_uuid": "test-id-123",
"start_time": "test_value",
"end_time": "test_value"
},
"expect": "content && content.length > 0"
},
"list_invitees": {
"args": {
"event_uuid": "test-id-123",
"count": 50,
"status": "active",
"page_token": "test_value"
},
"expect": "content && content.length > 0"
},
"list_invitees:empty-status": {
"args": {
"event_uuid": "test-id-123",
"count": 50,
"status": "",
"page_token": "test_value"
},
"expect": "exists"
},
"list_invitees:empty-page_token": {
"args": {
"event_uuid": "test-id-123",
"count": 50,
"status": "active",
"page_token": ""
},
"expect": "exists"
},
"get_user": {
"args": {},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/calendly/dist/index.js"
],
"env": {
"CALENDLY_API_KEY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,300 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/clickup/dist/index.js"
],
"env": {
"CLICKUP_API_KEY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_spaces": {
"args": {
"team_id": "test-id-123",
"archived": true
},
"expect": "content && content.length > 0"
},
"list_lists": {
"args": {
"folder_id": "test-id-123",
"space_id": "test-id-123",
"archived": true
},
"expect": "content && content.length > 0"
},
"list_lists:empty-folder_id": {
"args": {
"folder_id": "",
"space_id": "test-id-123",
"archived": true
},
"expect": "exists"
},
"list_lists:empty-space_id": {
"args": {
"folder_id": "test-id-123",
"space_id": "",
"archived": true
},
"expect": "exists"
},
"list_tasks": {
"args": {
"list_id": "test-id-123",
"archived": true,
"page": 50,
"order_by": "id",
"reverse": true,
"subtasks": true,
"include_closed": true,
"statuses": [],
"assignees": []
},
"expect": "content && content.length > 0"
},
"list_tasks:empty-order_by": {
"args": {
"list_id": "test-id-123",
"archived": true,
"page": 50,
"order_by": "",
"reverse": true,
"subtasks": true,
"include_closed": true,
"statuses": [],
"assignees": []
},
"expect": "exists"
},
"get_task": {
"args": {
"task_id": "test-id-123",
"include_subtasks": true
},
"expect": "content && content.length > 0"
},
"create_task": {
"args": {
"list_id": "test-id-123",
"name": "Test Name",
"description": "test_value",
"assignees": [],
"tags": [],
"status": "test_value",
"priority": 1,
"due_date": 50,
"start_date": 50,
"time_estimate": 50,
"parent": "test_value"
},
"expect": "content && content.length > 0"
},
"create_task:empty-description": {
"args": {
"list_id": "test-id-123",
"name": "Test Name",
"description": "",
"assignees": [],
"tags": [],
"status": "test_value",
"priority": 1,
"due_date": 50,
"start_date": 50,
"time_estimate": 50,
"parent": "test_value"
},
"expect": "exists"
},
"create_task:empty-status": {
"args": {
"list_id": "test-id-123",
"name": "Test Name",
"description": "test_value",
"assignees": [],
"tags": [],
"status": "",
"priority": 1,
"due_date": 50,
"start_date": 50,
"time_estimate": 50,
"parent": "test_value"
},
"expect": "exists"
},
"create_task:empty-parent": {
"args": {
"list_id": "test-id-123",
"name": "Test Name",
"description": "test_value",
"assignees": [],
"tags": [],
"status": "test_value",
"priority": 1,
"due_date": 50,
"start_date": 50,
"time_estimate": 50,
"parent": ""
},
"expect": "exists"
},
"update_task": {
"args": {
"task_id": "test-id-123",
"name": "Test Name",
"description": "test_value",
"status": "test_value",
"priority": 1,
"due_date": 50,
"start_date": 50,
"time_estimate": 50,
"assignees_add": [],
"assignees_remove": [],
"archived": true
},
"expect": "content && content.length > 0"
},
"update_task:empty-name": {
"args": {
"task_id": "test-id-123",
"name": "",
"description": "test_value",
"status": "test_value",
"priority": 1,
"due_date": 50,
"start_date": 50,
"time_estimate": 50,
"assignees_add": [],
"assignees_remove": [],
"archived": true
},
"expect": "exists"
},
"update_task:empty-description": {
"args": {
"task_id": "test-id-123",
"name": "Test Name",
"description": "",
"status": "test_value",
"priority": 1,
"due_date": 50,
"start_date": 50,
"time_estimate": 50,
"assignees_add": [],
"assignees_remove": [],
"archived": true
},
"expect": "exists"
},
"update_task:empty-status": {
"args": {
"task_id": "test-id-123",
"name": "Test Name",
"description": "test_value",
"status": "",
"priority": 1,
"due_date": 50,
"start_date": 50,
"time_estimate": 50,
"assignees_add": [],
"assignees_remove": [],
"archived": true
},
"expect": "exists"
},
"add_comment": {
"args": {
"task_id": "test-id-123",
"comment_text": "Sample content for testing",
"assignee": "test_value",
"notify_all": true
},
"expect": "content && content.length > 0"
},
"add_comment:empty-assignee": {
"args": {
"task_id": "test-id-123",
"comment_text": "Sample content for testing",
"assignee": "",
"notify_all": true
},
"expect": "exists"
},
"get_time_entries": {
"args": {
"team_id": "test-id-123",
"start_date": 50,
"end_date": 50,
"assignee": "test_value",
"task_id": "test-id-123",
"list_id": "test-id-123",
"space_id": "test-id-123",
"include_task_tags": true,
"include_location_names": true
},
"expect": "content && content.length > 0"
},
"get_time_entries:empty-assignee": {
"args": {
"team_id": "test-id-123",
"start_date": 50,
"end_date": 50,
"assignee": "",
"task_id": "test-id-123",
"list_id": "test-id-123",
"space_id": "test-id-123",
"include_task_tags": true,
"include_location_names": true
},
"expect": "exists"
},
"get_time_entries:empty-task_id": {
"args": {
"team_id": "test-id-123",
"start_date": 50,
"end_date": 50,
"assignee": "test_value",
"task_id": "",
"list_id": "test-id-123",
"space_id": "test-id-123",
"include_task_tags": true,
"include_location_names": true
},
"expect": "exists"
},
"get_time_entries:empty-list_id": {
"args": {
"team_id": "test-id-123",
"start_date": 50,
"end_date": 50,
"assignee": "test_value",
"task_id": "test-id-123",
"list_id": "",
"space_id": "test-id-123",
"include_task_tags": true,
"include_location_names": true
},
"expect": "exists"
},
"get_time_entries:empty-space_id": {
"args": {
"team_id": "test-id-123",
"start_date": 50,
"end_date": 50,
"assignee": "test_value",
"task_id": "test-id-123",
"list_id": "test-id-123",
"space_id": "",
"include_task_tags": true,
"include_location_names": true
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/clickup/dist/index.js"
],
"env": {
"CLICKUP_API_KEY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,554 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/close/dist/index.js"
],
"env": {
"CLOSE_API_KEY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_leads": {
"args": {
"query": "test query",
"_limit": 50,
"_skip": 50,
"_fields": "test_value"
},
"expect": "content && content.length > 0"
},
"list_leads:empty-query": {
"args": {
"query": "",
"_limit": 50,
"_skip": 50,
"_fields": "test_value"
},
"expect": "exists"
},
"list_leads:empty-_fields": {
"args": {
"query": "test query",
"_limit": 50,
"_skip": 50,
"_fields": ""
},
"expect": "exists"
},
"get_lead": {
"args": {
"lead_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"create_lead": {
"args": {
"name": "Test Name",
"url": "https://example.com",
"description": "test_value",
"status_id": "test-id-123",
"contacts": [],
"addresses": [],
"custom": {}
},
"expect": "content && content.length > 0"
},
"create_lead:empty-url": {
"args": {
"name": "Test Name",
"url": "",
"description": "test_value",
"status_id": "test-id-123",
"contacts": [],
"addresses": [],
"custom": {}
},
"expect": "exists"
},
"create_lead:empty-description": {
"args": {
"name": "Test Name",
"url": "https://example.com",
"description": "",
"status_id": "test-id-123",
"contacts": [],
"addresses": [],
"custom": {}
},
"expect": "exists"
},
"create_lead:empty-status_id": {
"args": {
"name": "Test Name",
"url": "https://example.com",
"description": "test_value",
"status_id": "",
"contacts": [],
"addresses": [],
"custom": {}
},
"expect": "exists"
},
"update_lead": {
"args": {
"lead_id": "test-id-123",
"name": "Test Name",
"url": "https://example.com",
"description": "test_value",
"status_id": "test-id-123",
"custom": {}
},
"expect": "content && content.length > 0"
},
"update_lead:empty-name": {
"args": {
"lead_id": "test-id-123",
"name": "",
"url": "https://example.com",
"description": "test_value",
"status_id": "test-id-123",
"custom": {}
},
"expect": "exists"
},
"update_lead:empty-url": {
"args": {
"lead_id": "test-id-123",
"name": "Test Name",
"url": "",
"description": "test_value",
"status_id": "test-id-123",
"custom": {}
},
"expect": "exists"
},
"update_lead:empty-description": {
"args": {
"lead_id": "test-id-123",
"name": "Test Name",
"url": "https://example.com",
"description": "",
"status_id": "test-id-123",
"custom": {}
},
"expect": "exists"
},
"update_lead:empty-status_id": {
"args": {
"lead_id": "test-id-123",
"name": "Test Name",
"url": "https://example.com",
"description": "test_value",
"status_id": "",
"custom": {}
},
"expect": "exists"
},
"list_opportunities": {
"args": {
"lead_id": "test-id-123",
"status_id": "test-id-123",
"user_id": "test-id-123",
"_limit": 50,
"_skip": 50
},
"expect": "content && content.length > 0"
},
"list_opportunities:empty-lead_id": {
"args": {
"lead_id": "",
"status_id": "test-id-123",
"user_id": "test-id-123",
"_limit": 50,
"_skip": 50
},
"expect": "exists"
},
"list_opportunities:empty-status_id": {
"args": {
"lead_id": "test-id-123",
"status_id": "",
"user_id": "test-id-123",
"_limit": 50,
"_skip": 50
},
"expect": "exists"
},
"list_opportunities:empty-user_id": {
"args": {
"lead_id": "test-id-123",
"status_id": "test-id-123",
"user_id": "",
"_limit": 50,
"_skip": 50
},
"expect": "exists"
},
"create_opportunity": {
"args": {
"lead_id": "test-id-123",
"status_id": "test-id-123",
"value": 50,
"value_period": "test_value",
"confidence": 50,
"note": "test_value",
"date_won": "test_value"
},
"expect": "content && content.length > 0"
},
"create_opportunity:empty-status_id": {
"args": {
"lead_id": "test-id-123",
"status_id": "",
"value": 50,
"value_period": "test_value",
"confidence": 50,
"note": "test_value",
"date_won": "test_value"
},
"expect": "exists"
},
"create_opportunity:empty-value_period": {
"args": {
"lead_id": "test-id-123",
"status_id": "test-id-123",
"value": 50,
"value_period": "",
"confidence": 50,
"note": "test_value",
"date_won": "test_value"
},
"expect": "exists"
},
"create_opportunity:empty-note": {
"args": {
"lead_id": "test-id-123",
"status_id": "test-id-123",
"value": 50,
"value_period": "test_value",
"confidence": 50,
"note": "",
"date_won": "test_value"
},
"expect": "exists"
},
"create_opportunity:empty-date_won": {
"args": {
"lead_id": "test-id-123",
"status_id": "test-id-123",
"value": 50,
"value_period": "test_value",
"confidence": 50,
"note": "test_value",
"date_won": ""
},
"expect": "exists"
},
"create_activity": {
"args": {
"activity_type": "test_value",
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"user_id": "test-id-123",
"note": "test_value",
"subject": "test_value",
"status": "test_value",
"direction": "test_value",
"duration": 50,
"date_created": "test_value"
},
"expect": "content && content.length > 0"
},
"create_activity:empty-contact_id": {
"args": {
"activity_type": "test_value",
"lead_id": "test-id-123",
"contact_id": "",
"user_id": "test-id-123",
"note": "test_value",
"subject": "test_value",
"status": "test_value",
"direction": "test_value",
"duration": 50,
"date_created": "test_value"
},
"expect": "exists"
},
"create_activity:empty-user_id": {
"args": {
"activity_type": "test_value",
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"user_id": "",
"note": "test_value",
"subject": "test_value",
"status": "test_value",
"direction": "test_value",
"duration": 50,
"date_created": "test_value"
},
"expect": "exists"
},
"create_activity:empty-note": {
"args": {
"activity_type": "test_value",
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"user_id": "test-id-123",
"note": "",
"subject": "test_value",
"status": "test_value",
"direction": "test_value",
"duration": 50,
"date_created": "test_value"
},
"expect": "exists"
},
"create_activity:empty-subject": {
"args": {
"activity_type": "test_value",
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"user_id": "test-id-123",
"note": "test_value",
"subject": "",
"status": "test_value",
"direction": "test_value",
"duration": 50,
"date_created": "test_value"
},
"expect": "exists"
},
"create_activity:empty-status": {
"args": {
"activity_type": "test_value",
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"user_id": "test-id-123",
"note": "test_value",
"subject": "test_value",
"status": "",
"direction": "test_value",
"duration": 50,
"date_created": "test_value"
},
"expect": "exists"
},
"create_activity:empty-direction": {
"args": {
"activity_type": "test_value",
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"user_id": "test-id-123",
"note": "test_value",
"subject": "test_value",
"status": "test_value",
"direction": "",
"duration": 50,
"date_created": "test_value"
},
"expect": "exists"
},
"create_activity:empty-date_created": {
"args": {
"activity_type": "test_value",
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"user_id": "test-id-123",
"note": "test_value",
"subject": "test_value",
"status": "test_value",
"direction": "test_value",
"duration": 50,
"date_created": ""
},
"expect": "exists"
},
"list_tasks": {
"args": {
"lead_id": "test-id-123",
"assigned_to": "test_value",
"is_complete": true,
"_type": "test_value",
"_limit": 50,
"_skip": 50
},
"expect": "content && content.length > 0"
},
"list_tasks:empty-lead_id": {
"args": {
"lead_id": "",
"assigned_to": "test_value",
"is_complete": true,
"_type": "test_value",
"_limit": 50,
"_skip": 50
},
"expect": "exists"
},
"list_tasks:empty-assigned_to": {
"args": {
"lead_id": "test-id-123",
"assigned_to": "",
"is_complete": true,
"_type": "test_value",
"_limit": 50,
"_skip": 50
},
"expect": "exists"
},
"list_tasks:empty-_type": {
"args": {
"lead_id": "test-id-123",
"assigned_to": "test_value",
"is_complete": true,
"_type": "",
"_limit": 50,
"_skip": 50
},
"expect": "exists"
},
"create_task": {
"args": {
"lead_id": "test-id-123",
"assigned_to": "test_value",
"text": "Sample content for testing",
"date": "test_value",
"is_complete": true
},
"expect": "content && content.length > 0"
},
"create_task:empty-assigned_to": {
"args": {
"lead_id": "test-id-123",
"assigned_to": "",
"text": "Sample content for testing",
"date": "test_value",
"is_complete": true
},
"expect": "exists"
},
"create_task:empty-date": {
"args": {
"lead_id": "test-id-123",
"assigned_to": "test_value",
"text": "Sample content for testing",
"date": "",
"is_complete": true
},
"expect": "exists"
},
"send_email": {
"args": {
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"to": [],
"cc": [],
"bcc": [],
"subject": "test_value",
"body_text": "Sample content for testing",
"body_html": "test_value",
"status": "test_value",
"template_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"send_email:empty-contact_id": {
"args": {
"lead_id": "test-id-123",
"contact_id": "",
"to": [],
"cc": [],
"bcc": [],
"subject": "test_value",
"body_text": "Sample content for testing",
"body_html": "test_value",
"status": "test_value",
"template_id": "test-id-123"
},
"expect": "exists"
},
"send_email:empty-body_text": {
"args": {
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"to": [],
"cc": [],
"bcc": [],
"subject": "test_value",
"body_text": "",
"body_html": "test_value",
"status": "test_value",
"template_id": "test-id-123"
},
"expect": "exists"
},
"send_email:empty-body_html": {
"args": {
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"to": [],
"cc": [],
"bcc": [],
"subject": "test_value",
"body_text": "Sample content for testing",
"body_html": "",
"status": "test_value",
"template_id": "test-id-123"
},
"expect": "exists"
},
"send_email:empty-status": {
"args": {
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"to": [],
"cc": [],
"bcc": [],
"subject": "test_value",
"body_text": "Sample content for testing",
"body_html": "test_value",
"status": "",
"template_id": "test-id-123"
},
"expect": "exists"
},
"send_email:empty-template_id": {
"args": {
"lead_id": "test-id-123",
"contact_id": "test-id-123",
"to": [],
"cc": [],
"bcc": [],
"subject": "test_value",
"body_text": "Sample content for testing",
"body_html": "test_value",
"status": "test_value",
"template_id": ""
},
"expect": "exists"
},
"list_statuses": {
"args": {
"type": "test_value"
},
"expect": "content && content.length > 0"
},
"list_statuses:empty-type": {
"args": {
"type": ""
},
"expect": "exists"
},
"list_users": {
"args": {},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/close/dist/index.js"
],
"env": {
"CLOSE_API_KEY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,217 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/clover/dist/index.js"
],
"env": {
"CLOVER_API_KEY": "factory_discovery_dummy",
"CLOVER_MERCHANT_ID": "factory_discovery_dummy",
"CLOVER_REGION": "factory_discovery_dummy",
"CLOVER_SANDBOX": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_orders": {
"args": {
"limit": 50,
"offset": 50,
"filter": "test_value",
"expand": "test_value"
},
"expect": "content && content.length > 0"
},
"list_orders:empty-filter": {
"args": {
"limit": 50,
"offset": 50,
"filter": "",
"expand": "test_value"
},
"expect": "exists"
},
"list_orders:empty-expand": {
"args": {
"limit": 50,
"offset": 50,
"filter": "test_value",
"expand": ""
},
"expect": "exists"
},
"get_order": {
"args": {
"order_id": "test-id-123",
"expand": "test_value"
},
"expect": "content && content.length > 0"
},
"get_order:empty-expand": {
"args": {
"order_id": "test-id-123",
"expand": ""
},
"expect": "exists"
},
"create_order": {
"args": {
"state": "test_value",
"title": "test_value",
"note": "test_value",
"order_type_id": "test-id-123",
"line_items": []
},
"expect": "content && content.length > 0"
},
"create_order:empty-state": {
"args": {
"state": "",
"title": "test_value",
"note": "test_value",
"order_type_id": "test-id-123",
"line_items": []
},
"expect": "exists"
},
"create_order:empty-title": {
"args": {
"state": "test_value",
"title": "",
"note": "test_value",
"order_type_id": "test-id-123",
"line_items": []
},
"expect": "exists"
},
"create_order:empty-note": {
"args": {
"state": "test_value",
"title": "test_value",
"note": "",
"order_type_id": "test-id-123",
"line_items": []
},
"expect": "exists"
},
"create_order:empty-order_type_id": {
"args": {
"state": "test_value",
"title": "test_value",
"note": "test_value",
"order_type_id": "",
"line_items": []
},
"expect": "exists"
},
"list_items": {
"args": {
"limit": 50,
"offset": 50,
"filter": "test_value",
"expand": "test_value"
},
"expect": "content && content.length > 0"
},
"list_items:empty-filter": {
"args": {
"limit": 50,
"offset": 50,
"filter": "",
"expand": "test_value"
},
"expect": "exists"
},
"list_items:empty-expand": {
"args": {
"limit": 50,
"offset": 50,
"filter": "test_value",
"expand": ""
},
"expect": "exists"
},
"get_inventory": {
"args": {
"item_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"get_inventory:empty-item_id": {
"args": {
"item_id": ""
},
"expect": "exists"
},
"list_customers": {
"args": {
"limit": 50,
"offset": 50,
"filter": "test_value",
"expand": "test_value"
},
"expect": "content && content.length > 0"
},
"list_customers:empty-filter": {
"args": {
"limit": 50,
"offset": 50,
"filter": "",
"expand": "test_value"
},
"expect": "exists"
},
"list_customers:empty-expand": {
"args": {
"limit": 50,
"offset": 50,
"filter": "test_value",
"expand": ""
},
"expect": "exists"
},
"list_payments": {
"args": {
"limit": 50,
"offset": 50,
"filter": "test_value",
"expand": "test_value"
},
"expect": "content && content.length > 0"
},
"list_payments:empty-filter": {
"args": {
"limit": 50,
"offset": 50,
"filter": "",
"expand": "test_value"
},
"expect": "exists"
},
"list_payments:empty-expand": {
"args": {
"limit": 50,
"offset": 50,
"filter": "test_value",
"expand": ""
},
"expect": "exists"
},
"get_merchant": {
"args": {
"expand": "test_value"
},
"expect": "content && content.length > 0"
},
"get_merchant:empty-expand": {
"args": {
"expand": ""
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,14 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/clover/dist/index.js"
],
"env": {
"CLOVER_API_KEY": "factory_discovery_dummy",
"CLOVER_MERCHANT_ID": "factory_discovery_dummy",
"CLOVER_REGION": "factory_discovery_dummy",
"CLOVER_SANDBOX": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,367 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/constant-contact/dist/index.js"
],
"env": {
"CONSTANT_CONTACT_ACCESS_TOKEN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_contacts": {
"args": {
"status": "all",
"email": "test@example.com",
"lists": "test_value",
"segment_id": "test-id-123",
"limit": 50,
"include": "custom_fields",
"include_count": true,
"cursor": "test_value"
},
"expect": "content && content.length > 0"
},
"list_contacts:empty-status": {
"args": {
"status": "",
"email": "test@example.com",
"lists": "test_value",
"segment_id": "test-id-123",
"limit": 50,
"include": "custom_fields",
"include_count": true,
"cursor": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-email": {
"args": {
"status": "all",
"email": "",
"lists": "test_value",
"segment_id": "test-id-123",
"limit": 50,
"include": "custom_fields",
"include_count": true,
"cursor": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-lists": {
"args": {
"status": "all",
"email": "test@example.com",
"lists": "",
"segment_id": "test-id-123",
"limit": 50,
"include": "custom_fields",
"include_count": true,
"cursor": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-segment_id": {
"args": {
"status": "all",
"email": "test@example.com",
"lists": "test_value",
"segment_id": "",
"limit": 50,
"include": "custom_fields",
"include_count": true,
"cursor": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-include": {
"args": {
"status": "all",
"email": "test@example.com",
"lists": "test_value",
"segment_id": "test-id-123",
"limit": 50,
"include": "",
"include_count": true,
"cursor": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-cursor": {
"args": {
"status": "all",
"email": "test@example.com",
"lists": "test_value",
"segment_id": "test-id-123",
"limit": 50,
"include": "custom_fields",
"include_count": true,
"cursor": ""
},
"expect": "exists"
},
"add_contact": {
"args": {
"email_address": "test@example.com",
"first_name": "Test Name",
"last_name": "Test Name",
"job_title": "test_value",
"company_name": "Test Name",
"phone_numbers": [],
"street_addresses": [],
"list_memberships": [],
"custom_fields": [],
"birthday_month": 50,
"birthday_day": 50,
"anniversary": "test_value",
"create_source": "Contact"
},
"expect": "content && content.length > 0"
},
"add_contact:empty-first_name": {
"args": {
"email_address": "test@example.com",
"first_name": "",
"last_name": "Test Name",
"job_title": "test_value",
"company_name": "Test Name",
"phone_numbers": [],
"street_addresses": [],
"list_memberships": [],
"custom_fields": [],
"birthday_month": 50,
"birthday_day": 50,
"anniversary": "test_value",
"create_source": "Contact"
},
"expect": "exists"
},
"add_contact:empty-last_name": {
"args": {
"email_address": "test@example.com",
"first_name": "Test Name",
"last_name": "",
"job_title": "test_value",
"company_name": "Test Name",
"phone_numbers": [],
"street_addresses": [],
"list_memberships": [],
"custom_fields": [],
"birthday_month": 50,
"birthday_day": 50,
"anniversary": "test_value",
"create_source": "Contact"
},
"expect": "exists"
},
"add_contact:empty-job_title": {
"args": {
"email_address": "test@example.com",
"first_name": "Test Name",
"last_name": "Test Name",
"job_title": "",
"company_name": "Test Name",
"phone_numbers": [],
"street_addresses": [],
"list_memberships": [],
"custom_fields": [],
"birthday_month": 50,
"birthday_day": 50,
"anniversary": "test_value",
"create_source": "Contact"
},
"expect": "exists"
},
"add_contact:empty-company_name": {
"args": {
"email_address": "test@example.com",
"first_name": "Test Name",
"last_name": "Test Name",
"job_title": "test_value",
"company_name": "",
"phone_numbers": [],
"street_addresses": [],
"list_memberships": [],
"custom_fields": [],
"birthday_month": 50,
"birthday_day": 50,
"anniversary": "test_value",
"create_source": "Contact"
},
"expect": "exists"
},
"add_contact:empty-anniversary": {
"args": {
"email_address": "test@example.com",
"first_name": "Test Name",
"last_name": "Test Name",
"job_title": "test_value",
"company_name": "Test Name",
"phone_numbers": [],
"street_addresses": [],
"list_memberships": [],
"custom_fields": [],
"birthday_month": 50,
"birthday_day": 50,
"anniversary": "",
"create_source": "Contact"
},
"expect": "exists"
},
"add_contact:empty-create_source": {
"args": {
"email_address": "test@example.com",
"first_name": "Test Name",
"last_name": "Test Name",
"job_title": "test_value",
"company_name": "Test Name",
"phone_numbers": [],
"street_addresses": [],
"list_memberships": [],
"custom_fields": [],
"birthday_month": 50,
"birthday_day": 50,
"anniversary": "test_value",
"create_source": ""
},
"expect": "exists"
},
"list_campaigns": {
"args": {
"limit": 50,
"before_date": "test_value",
"after_date": "test_value",
"cursor": "test_value"
},
"expect": "content && content.length > 0"
},
"list_campaigns:empty-before_date": {
"args": {
"limit": 50,
"before_date": "",
"after_date": "test_value",
"cursor": "test_value"
},
"expect": "exists"
},
"list_campaigns:empty-after_date": {
"args": {
"limit": 50,
"before_date": "test_value",
"after_date": "",
"cursor": "test_value"
},
"expect": "exists"
},
"list_campaigns:empty-cursor": {
"args": {
"limit": 50,
"before_date": "test_value",
"after_date": "test_value",
"cursor": ""
},
"expect": "exists"
},
"create_campaign": {
"args": {
"name": "Test Name",
"subject": "test_value",
"from_name": "Test Name",
"from_email": "test@example.com",
"reply_to_email": "test@example.com",
"html_content": "Sample content for testing",
"text_content": "Sample content for testing",
"format_type": 1,
"physical_address_in_footer": {}
},
"expect": "content && content.length > 0"
},
"create_campaign:empty-reply_to_email": {
"args": {
"name": "Test Name",
"subject": "test_value",
"from_name": "Test Name",
"from_email": "test@example.com",
"reply_to_email": "",
"html_content": "Sample content for testing",
"text_content": "Sample content for testing",
"format_type": 1,
"physical_address_in_footer": {}
},
"expect": "exists"
},
"create_campaign:empty-html_content": {
"args": {
"name": "Test Name",
"subject": "test_value",
"from_name": "Test Name",
"from_email": "test@example.com",
"reply_to_email": "test@example.com",
"html_content": "",
"text_content": "Sample content for testing",
"format_type": 1,
"physical_address_in_footer": {}
},
"expect": "exists"
},
"create_campaign:empty-text_content": {
"args": {
"name": "Test Name",
"subject": "test_value",
"from_name": "Test Name",
"from_email": "test@example.com",
"reply_to_email": "test@example.com",
"html_content": "Sample content for testing",
"text_content": "",
"format_type": 1,
"physical_address_in_footer": {}
},
"expect": "exists"
},
"list_lists": {
"args": {
"limit": 50,
"include_count": true,
"include_membership_count": "all",
"cursor": "test_value"
},
"expect": "content && content.length > 0"
},
"list_lists:empty-include_membership_count": {
"args": {
"limit": 50,
"include_count": true,
"include_membership_count": "",
"cursor": "test_value"
},
"expect": "exists"
},
"list_lists:empty-cursor": {
"args": {
"limit": 50,
"include_count": true,
"include_membership_count": "all",
"cursor": ""
},
"expect": "exists"
},
"add_to_list": {
"args": {
"list_id": "test-id-123",
"contact_ids": []
},
"expect": "content && content.length > 0"
},
"get_campaign_stats": {
"args": {
"campaign_activity_id": "test-id-123"
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/constant-contact/dist/index.js"
],
"env": {
"CONSTANT_CONTACT_ACCESS_TOKEN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,370 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/fieldedge/dist/index.js"
],
"env": {
"FIELDEDGE_API_KEY": "factory_discovery_dummy",
"FIELDEDGE_SUBSCRIPTION_KEY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_work_orders": {
"args": {
"page": 50,
"pageSize": 50,
"status": "open",
"customerId": "test-id-123",
"technicianId": "test-id-123",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "content && content.length > 0"
},
"list_work_orders:empty-status": {
"args": {
"page": 50,
"pageSize": 50,
"status": "",
"customerId": "test-id-123",
"technicianId": "test-id-123",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "exists"
},
"list_work_orders:empty-customerId": {
"args": {
"page": 50,
"pageSize": 50,
"status": "open",
"customerId": "",
"technicianId": "test-id-123",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "exists"
},
"list_work_orders:empty-technicianId": {
"args": {
"page": 50,
"pageSize": 50,
"status": "open",
"customerId": "test-id-123",
"technicianId": "",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "exists"
},
"list_work_orders:empty-startDate": {
"args": {
"page": 50,
"pageSize": 50,
"status": "open",
"customerId": "test-id-123",
"technicianId": "test-id-123",
"startDate": "",
"endDate": "test_value"
},
"expect": "exists"
},
"list_work_orders:empty-endDate": {
"args": {
"page": 50,
"pageSize": 50,
"status": "open",
"customerId": "test-id-123",
"technicianId": "test-id-123",
"startDate": "test_value",
"endDate": ""
},
"expect": "exists"
},
"get_work_order": {
"args": {
"id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"create_work_order": {
"args": {
"customerId": "test-id-123",
"locationId": "test-id-123",
"description": "test_value",
"workType": "service",
"priority": "low",
"scheduledDate": "test_value",
"scheduledTime": "test_value",
"technicianId": "test-id-123",
"equipmentIds": [],
"notes": "test_value"
},
"expect": "content && content.length > 0"
},
"create_work_order:empty-locationId": {
"args": {
"customerId": "test-id-123",
"locationId": "",
"description": "test_value",
"workType": "service",
"priority": "low",
"scheduledDate": "test_value",
"scheduledTime": "test_value",
"technicianId": "test-id-123",
"equipmentIds": [],
"notes": "test_value"
},
"expect": "exists"
},
"create_work_order:empty-workType": {
"args": {
"customerId": "test-id-123",
"locationId": "test-id-123",
"description": "test_value",
"workType": "",
"priority": "low",
"scheduledDate": "test_value",
"scheduledTime": "test_value",
"technicianId": "test-id-123",
"equipmentIds": [],
"notes": "test_value"
},
"expect": "exists"
},
"create_work_order:empty-priority": {
"args": {
"customerId": "test-id-123",
"locationId": "test-id-123",
"description": "test_value",
"workType": "service",
"priority": "",
"scheduledDate": "test_value",
"scheduledTime": "test_value",
"technicianId": "test-id-123",
"equipmentIds": [],
"notes": "test_value"
},
"expect": "exists"
},
"create_work_order:empty-scheduledDate": {
"args": {
"customerId": "test-id-123",
"locationId": "test-id-123",
"description": "test_value",
"workType": "service",
"priority": "low",
"scheduledDate": "",
"scheduledTime": "test_value",
"technicianId": "test-id-123",
"equipmentIds": [],
"notes": "test_value"
},
"expect": "exists"
},
"create_work_order:empty-scheduledTime": {
"args": {
"customerId": "test-id-123",
"locationId": "test-id-123",
"description": "test_value",
"workType": "service",
"priority": "low",
"scheduledDate": "test_value",
"scheduledTime": "",
"technicianId": "test-id-123",
"equipmentIds": [],
"notes": "test_value"
},
"expect": "exists"
},
"create_work_order:empty-technicianId": {
"args": {
"customerId": "test-id-123",
"locationId": "test-id-123",
"description": "test_value",
"workType": "service",
"priority": "low",
"scheduledDate": "test_value",
"scheduledTime": "test_value",
"technicianId": "",
"equipmentIds": [],
"notes": "test_value"
},
"expect": "exists"
},
"create_work_order:empty-notes": {
"args": {
"customerId": "test-id-123",
"locationId": "test-id-123",
"description": "test_value",
"workType": "service",
"priority": "low",
"scheduledDate": "test_value",
"scheduledTime": "test_value",
"technicianId": "test-id-123",
"equipmentIds": [],
"notes": ""
},
"expect": "exists"
},
"list_customers": {
"args": {
"page": 50,
"pageSize": 50,
"search": "test query",
"sortBy": "test_value",
"sortOrder": "asc"
},
"expect": "content && content.length > 0"
},
"list_customers:empty-search": {
"args": {
"page": 50,
"pageSize": 50,
"search": "",
"sortBy": "test_value",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_customers:empty-sortBy": {
"args": {
"page": 50,
"pageSize": 50,
"search": "test query",
"sortBy": "",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_customers:empty-sortOrder": {
"args": {
"page": 50,
"pageSize": 50,
"search": "test query",
"sortBy": "test_value",
"sortOrder": ""
},
"expect": "exists"
},
"list_technicians": {
"args": {
"page": 50,
"pageSize": 50,
"active": true,
"departmentId": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_technicians:empty-departmentId": {
"args": {
"page": 50,
"pageSize": 50,
"active": true,
"departmentId": ""
},
"expect": "exists"
},
"list_invoices": {
"args": {
"page": 50,
"pageSize": 50,
"status": "draft",
"customerId": "test-id-123",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "content && content.length > 0"
},
"list_invoices:empty-status": {
"args": {
"page": 50,
"pageSize": 50,
"status": "",
"customerId": "test-id-123",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "exists"
},
"list_invoices:empty-customerId": {
"args": {
"page": 50,
"pageSize": 50,
"status": "draft",
"customerId": "",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "exists"
},
"list_invoices:empty-startDate": {
"args": {
"page": 50,
"pageSize": 50,
"status": "draft",
"customerId": "test-id-123",
"startDate": "",
"endDate": "test_value"
},
"expect": "exists"
},
"list_invoices:empty-endDate": {
"args": {
"page": 50,
"pageSize": 50,
"status": "draft",
"customerId": "test-id-123",
"startDate": "test_value",
"endDate": ""
},
"expect": "exists"
},
"list_equipment": {
"args": {
"page": 50,
"pageSize": 50,
"customerId": "test-id-123",
"locationId": "test-id-123",
"equipmentType": "hvac"
},
"expect": "content && content.length > 0"
},
"list_equipment:empty-customerId": {
"args": {
"page": 50,
"pageSize": 50,
"customerId": "",
"locationId": "test-id-123",
"equipmentType": "hvac"
},
"expect": "exists"
},
"list_equipment:empty-locationId": {
"args": {
"page": 50,
"pageSize": 50,
"customerId": "test-id-123",
"locationId": "",
"equipmentType": "hvac"
},
"expect": "exists"
},
"list_equipment:empty-equipmentType": {
"args": {
"page": 50,
"pageSize": 50,
"customerId": "test-id-123",
"locationId": "test-id-123",
"equipmentType": ""
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,12 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/fieldedge/dist/index.js"
],
"env": {
"FIELDEDGE_API_KEY": "factory_discovery_dummy",
"FIELDEDGE_SUBSCRIPTION_KEY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,358 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/freshbooks/dist/index.js"
],
"env": {
"FRESHBOOKS_ACCESS_TOKEN": "factory_discovery_dummy",
"FRESHBOOKS_ACCOUNT_ID": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_invoices": {
"args": {
"page": 50,
"per_page": 50,
"status": "draft"
},
"expect": "content && content.length > 0"
},
"list_invoices:empty-status": {
"args": {
"page": 50,
"per_page": 50,
"status": ""
},
"expect": "exists"
},
"get_invoice": {
"args": {
"invoice_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"create_invoice": {
"args": {
"customer_id": 50,
"create_date": "test_value",
"due_offset_days": 50,
"currency_code": "javascript",
"notes": "test_value",
"terms": "test_value",
"lines": []
},
"expect": "content && content.length > 0"
},
"create_invoice:empty-currency_code": {
"args": {
"customer_id": 50,
"create_date": "test_value",
"due_offset_days": 50,
"currency_code": "",
"notes": "test_value",
"terms": "test_value",
"lines": []
},
"expect": "exists"
},
"create_invoice:empty-notes": {
"args": {
"customer_id": 50,
"create_date": "test_value",
"due_offset_days": 50,
"currency_code": "javascript",
"notes": "",
"terms": "test_value",
"lines": []
},
"expect": "exists"
},
"create_invoice:empty-terms": {
"args": {
"customer_id": 50,
"create_date": "test_value",
"due_offset_days": 50,
"currency_code": "javascript",
"notes": "test_value",
"terms": "",
"lines": []
},
"expect": "exists"
},
"send_invoice": {
"args": {
"invoice_id": "test-id-123",
"email_recipients": [],
"email_subject": "test@example.com",
"email_body": "test@example.com"
},
"expect": "content && content.length > 0"
},
"send_invoice:empty-email_subject": {
"args": {
"invoice_id": "test-id-123",
"email_recipients": [],
"email_subject": "",
"email_body": "test@example.com"
},
"expect": "exists"
},
"send_invoice:empty-email_body": {
"args": {
"invoice_id": "test-id-123",
"email_recipients": [],
"email_subject": "test@example.com",
"email_body": ""
},
"expect": "exists"
},
"list_clients": {
"args": {
"page": 50,
"per_page": 50
},
"expect": "content && content.length > 0"
},
"create_client": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "content && content.length > 0"
},
"create_client:empty-email": {
"args": {
"email": "",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-fname": {
"args": {
"email": "test@example.com",
"fname": "",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-lname": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-organization": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-p_street": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-p_city": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-p_province": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-p_code": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-p_country": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-currency_code": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "",
"bus_phone": "test_value",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-bus_phone": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "",
"note": "test_value"
},
"expect": "exists"
},
"create_client:empty-note": {
"args": {
"email": "test@example.com",
"fname": "Test Name",
"lname": "Test Name",
"organization": "test_value",
"p_street": "test_value",
"p_city": "test_value",
"p_province": "test_value",
"p_code": "javascript",
"p_country": "test_value",
"currency_code": "javascript",
"bus_phone": "test_value",
"note": ""
},
"expect": "exists"
},
"list_expenses": {
"args": {
"page": 50,
"per_page": 50
},
"expect": "content && content.length > 0"
},
"list_payments": {
"args": {
"page": 50,
"per_page": 50
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,12 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/freshbooks/dist/index.js"
],
"env": {
"FRESHBOOKS_ACCESS_TOKEN": "factory_discovery_dummy",
"FRESHBOOKS_ACCOUNT_ID": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,315 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/freshdesk/dist/index.js"
],
"env": {
"FRESHDESK_API_KEY": "factory_discovery_dummy",
"FRESHDESK_DOMAIN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_tickets": {
"args": {
"filter": "new_and_my_open",
"page": 50,
"per_page": 50,
"order_by": "test_value",
"order_type": "asc"
},
"expect": "content && content.length > 0"
},
"list_tickets:empty-filter": {
"args": {
"filter": "",
"page": 50,
"per_page": 50,
"order_by": "test_value",
"order_type": "asc"
},
"expect": "exists"
},
"list_tickets:empty-order_by": {
"args": {
"filter": "new_and_my_open",
"page": 50,
"per_page": 50,
"order_by": "",
"order_type": "asc"
},
"expect": "exists"
},
"list_tickets:empty-order_type": {
"args": {
"filter": "new_and_my_open",
"page": 50,
"per_page": 50,
"order_by": "test_value",
"order_type": ""
},
"expect": "exists"
},
"get_ticket": {
"args": {
"id": 50,
"include": "test_value"
},
"expect": "content && content.length > 0"
},
"get_ticket:empty-include": {
"args": {
"id": 50,
"include": ""
},
"expect": "exists"
},
"create_ticket": {
"args": {
"subject": "test_value",
"description": "test_value",
"email": "test@example.com",
"requester_id": 50,
"priority": 1,
"status": 2,
"type": "test_value",
"source": 50,
"group_id": 50,
"responder_id": 50,
"tags": [],
"custom_fields": {}
},
"expect": "content && content.length > 0"
},
"create_ticket:empty-email": {
"args": {
"subject": "test_value",
"description": "test_value",
"email": "",
"requester_id": 50,
"priority": 1,
"status": 2,
"type": "test_value",
"source": 50,
"group_id": 50,
"responder_id": 50,
"tags": [],
"custom_fields": {}
},
"expect": "exists"
},
"create_ticket:empty-type": {
"args": {
"subject": "test_value",
"description": "test_value",
"email": "test@example.com",
"requester_id": 50,
"priority": 1,
"status": 2,
"type": "",
"source": 50,
"group_id": 50,
"responder_id": 50,
"tags": [],
"custom_fields": {}
},
"expect": "exists"
},
"update_ticket": {
"args": {
"id": 50,
"subject": "test_value",
"description": "test_value",
"priority": 50,
"status": 50,
"type": "test_value",
"group_id": 50,
"responder_id": 50,
"tags": [],
"custom_fields": {}
},
"expect": "content && content.length > 0"
},
"update_ticket:empty-subject": {
"args": {
"id": 50,
"subject": "",
"description": "test_value",
"priority": 50,
"status": 50,
"type": "test_value",
"group_id": 50,
"responder_id": 50,
"tags": [],
"custom_fields": {}
},
"expect": "exists"
},
"update_ticket:empty-description": {
"args": {
"id": 50,
"subject": "test_value",
"description": "",
"priority": 50,
"status": 50,
"type": "test_value",
"group_id": 50,
"responder_id": 50,
"tags": [],
"custom_fields": {}
},
"expect": "exists"
},
"update_ticket:empty-type": {
"args": {
"id": 50,
"subject": "test_value",
"description": "test_value",
"priority": 50,
"status": 50,
"type": "",
"group_id": 50,
"responder_id": 50,
"tags": [],
"custom_fields": {}
},
"expect": "exists"
},
"reply_ticket": {
"args": {
"id": 50,
"body": "test_value",
"from_email": "test@example.com",
"user_id": 50,
"cc_emails": [],
"bcc_emails": [],
"private": true
},
"expect": "content && content.length > 0"
},
"reply_ticket:empty-from_email": {
"args": {
"id": 50,
"body": "test_value",
"from_email": "",
"user_id": 50,
"cc_emails": [],
"bcc_emails": [],
"private": true
},
"expect": "exists"
},
"list_contacts": {
"args": {
"email": "test@example.com",
"phone": "test_value",
"mobile": "test_value",
"company_id": 50,
"state": "blocked",
"page": 50,
"per_page": 50
},
"expect": "content && content.length > 0"
},
"list_contacts:empty-email": {
"args": {
"email": "",
"phone": "test_value",
"mobile": "test_value",
"company_id": 50,
"state": "blocked",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"list_contacts:empty-phone": {
"args": {
"email": "test@example.com",
"phone": "",
"mobile": "test_value",
"company_id": 50,
"state": "blocked",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"list_contacts:empty-mobile": {
"args": {
"email": "test@example.com",
"phone": "test_value",
"mobile": "",
"company_id": 50,
"state": "blocked",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"list_contacts:empty-state": {
"args": {
"email": "test@example.com",
"phone": "test_value",
"mobile": "test_value",
"company_id": 50,
"state": "",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"list_agents": {
"args": {
"email": "test@example.com",
"phone": "test_value",
"state": "fulltime",
"page": 50,
"per_page": 50
},
"expect": "content && content.length > 0"
},
"list_agents:empty-email": {
"args": {
"email": "",
"phone": "test_value",
"state": "fulltime",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"list_agents:empty-phone": {
"args": {
"email": "test@example.com",
"phone": "",
"state": "fulltime",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"list_agents:empty-state": {
"args": {
"email": "test@example.com",
"phone": "test_value",
"state": "",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"search_tickets": {
"args": {
"query": "test query",
"page": 50
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,12 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/freshdesk/dist/index.js"
],
"env": {
"FRESHDESK_API_KEY": "factory_discovery_dummy",
"FRESHDESK_DOMAIN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,86 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/gusto/dist/index.js"
],
"env": {
"GUSTO_ACCESS_TOKEN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_employees": {
"args": {
"company_id": "test-id-123",
"page": 50,
"per": 50
},
"expect": "content && content.length > 0"
},
"get_employee": {
"args": {
"employee_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_payrolls": {
"args": {
"company_id": "test-id-123",
"processed": true,
"start_date": "test_value",
"end_date": "test_value"
},
"expect": "content && content.length > 0"
},
"list_payrolls:empty-start_date": {
"args": {
"company_id": "test-id-123",
"processed": true,
"start_date": "",
"end_date": "test_value"
},
"expect": "exists"
},
"list_payrolls:empty-end_date": {
"args": {
"company_id": "test-id-123",
"processed": true,
"start_date": "test_value",
"end_date": ""
},
"expect": "exists"
},
"get_payroll": {
"args": {
"company_id": "test-id-123",
"payroll_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_contractors": {
"args": {
"company_id": "test-id-123",
"page": 50,
"per": 50
},
"expect": "content && content.length > 0"
},
"get_company": {
"args": {
"company_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_benefits": {
"args": {
"company_id": "test-id-123"
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/gusto/dist/index.js"
],
"env": {
"GUSTO_ACCESS_TOKEN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,287 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/helpscout/dist/index.js"
],
"env": {
"HELPSCOUT_ACCESS_TOKEN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_conversations": {
"args": {
"mailbox": 50,
"status": "active",
"tag": "test_value",
"assigned_to": 50,
"folder": 50,
"page": 50,
"sortField": "test_value",
"sortOrder": "asc"
},
"expect": "content && content.length > 0"
},
"list_conversations:empty-status": {
"args": {
"mailbox": 50,
"status": "",
"tag": "test_value",
"assigned_to": 50,
"folder": 50,
"page": 50,
"sortField": "test_value",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_conversations:empty-tag": {
"args": {
"mailbox": 50,
"status": "active",
"tag": "",
"assigned_to": 50,
"folder": 50,
"page": 50,
"sortField": "test_value",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_conversations:empty-sortField": {
"args": {
"mailbox": 50,
"status": "active",
"tag": "test_value",
"assigned_to": 50,
"folder": 50,
"page": 50,
"sortField": "",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_conversations:empty-sortOrder": {
"args": {
"mailbox": 50,
"status": "active",
"tag": "test_value",
"assigned_to": 50,
"folder": 50,
"page": 50,
"sortField": "test_value",
"sortOrder": ""
},
"expect": "exists"
},
"get_conversation": {
"args": {
"id": 50
},
"expect": "content && content.length > 0"
},
"create_conversation": {
"args": {
"mailboxId": 50,
"subject": "test_value",
"customer": {},
"type": "email",
"status": "active",
"threads": [],
"tags": [],
"assignTo": 50
},
"expect": "content && content.length > 0"
},
"create_conversation:empty-type": {
"args": {
"mailboxId": 50,
"subject": "test_value",
"customer": {},
"type": "",
"status": "active",
"threads": [],
"tags": [],
"assignTo": 50
},
"expect": "exists"
},
"create_conversation:empty-status": {
"args": {
"mailboxId": 50,
"subject": "test_value",
"customer": {},
"type": "email",
"status": "",
"threads": [],
"tags": [],
"assignTo": 50
},
"expect": "exists"
},
"reply_conversation": {
"args": {
"conversationId": 50,
"text": "Sample content for testing",
"user": 50,
"customer": {},
"type": "reply",
"status": "active",
"draft": true,
"cc": [],
"bcc": []
},
"expect": "content && content.length > 0"
},
"reply_conversation:empty-type": {
"args": {
"conversationId": 50,
"text": "Sample content for testing",
"user": 50,
"customer": {},
"type": "",
"status": "active",
"draft": true,
"cc": [],
"bcc": []
},
"expect": "exists"
},
"reply_conversation:empty-status": {
"args": {
"conversationId": 50,
"text": "Sample content for testing",
"user": 50,
"customer": {},
"type": "reply",
"status": "",
"draft": true,
"cc": [],
"bcc": []
},
"expect": "exists"
},
"list_customers": {
"args": {
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"query": "test query",
"page": 50,
"sortField": "test_value",
"sortOrder": "asc"
},
"expect": "content && content.length > 0"
},
"list_customers:empty-email": {
"args": {
"email": "",
"firstName": "Test Name",
"lastName": "Test Name",
"query": "test query",
"page": 50,
"sortField": "test_value",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_customers:empty-firstName": {
"args": {
"email": "test@example.com",
"firstName": "",
"lastName": "Test Name",
"query": "test query",
"page": 50,
"sortField": "test_value",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_customers:empty-lastName": {
"args": {
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "",
"query": "test query",
"page": 50,
"sortField": "test_value",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_customers:empty-query": {
"args": {
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"query": "",
"page": 50,
"sortField": "test_value",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_customers:empty-sortField": {
"args": {
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"query": "test query",
"page": 50,
"sortField": "",
"sortOrder": "asc"
},
"expect": "exists"
},
"list_customers:empty-sortOrder": {
"args": {
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"query": "test query",
"page": 50,
"sortField": "test_value",
"sortOrder": ""
},
"expect": "exists"
},
"list_mailboxes": {
"args": {
"page": 50
},
"expect": "content && content.length > 0"
},
"search": {
"args": {
"query": "test query",
"page": 50,
"sortField": "test_value",
"sortOrder": "asc"
},
"expect": "content && content.length > 0"
},
"search:empty-sortField": {
"args": {
"query": "test query",
"page": 50,
"sortField": "",
"sortOrder": "asc"
},
"expect": "exists"
},
"search:empty-sortOrder": {
"args": {
"query": "test query",
"page": 50,
"sortField": "test_value",
"sortOrder": ""
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/helpscout/dist/index.js"
],
"env": {
"HELPSCOUT_ACCESS_TOKEN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,227 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/housecall-pro/dist/index.js"
],
"env": {
"HOUSECALL_PRO_API_KEY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_jobs": {
"args": {
"page": 50,
"per_page": 50,
"status": "unscheduled",
"customer_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_jobs:empty-status": {
"args": {
"page": 50,
"per_page": 50,
"status": "",
"customer_id": "test-id-123"
},
"expect": "exists"
},
"list_jobs:empty-customer_id": {
"args": {
"page": 50,
"per_page": 50,
"status": "unscheduled",
"customer_id": ""
},
"expect": "exists"
},
"get_job": {
"args": {
"id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"create_job": {
"args": {
"customer_id": "test-id-123",
"address_id": "test-id-123",
"description": "test_value",
"scheduled_start": "test_value",
"scheduled_end": "test_value",
"assigned_employee_ids": [],
"tags": []
},
"expect": "content && content.length > 0"
},
"create_job:empty-address_id": {
"args": {
"customer_id": "test-id-123",
"address_id": "",
"description": "test_value",
"scheduled_start": "test_value",
"scheduled_end": "test_value",
"assigned_employee_ids": [],
"tags": []
},
"expect": "exists"
},
"create_job:empty-description": {
"args": {
"customer_id": "test-id-123",
"address_id": "test-id-123",
"description": "",
"scheduled_start": "test_value",
"scheduled_end": "test_value",
"assigned_employee_ids": [],
"tags": []
},
"expect": "exists"
},
"create_job:empty-scheduled_start": {
"args": {
"customer_id": "test-id-123",
"address_id": "test-id-123",
"description": "test_value",
"scheduled_start": "",
"scheduled_end": "test_value",
"assigned_employee_ids": [],
"tags": []
},
"expect": "exists"
},
"create_job:empty-scheduled_end": {
"args": {
"customer_id": "test-id-123",
"address_id": "test-id-123",
"description": "test_value",
"scheduled_start": "test_value",
"scheduled_end": "",
"assigned_employee_ids": [],
"tags": []
},
"expect": "exists"
},
"list_estimates": {
"args": {
"page": 50,
"per_page": 50,
"status": "pending",
"customer_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_estimates:empty-status": {
"args": {
"page": 50,
"per_page": 50,
"status": "",
"customer_id": "test-id-123"
},
"expect": "exists"
},
"list_estimates:empty-customer_id": {
"args": {
"page": 50,
"per_page": 50,
"status": "pending",
"customer_id": ""
},
"expect": "exists"
},
"create_estimate": {
"args": {
"customer_id": "test-id-123",
"address_id": "test-id-123",
"message": "test_value",
"options": []
},
"expect": "content && content.length > 0"
},
"create_estimate:empty-address_id": {
"args": {
"customer_id": "test-id-123",
"address_id": "",
"message": "test_value",
"options": []
},
"expect": "exists"
},
"create_estimate:empty-message": {
"args": {
"customer_id": "test-id-123",
"address_id": "test-id-123",
"message": "",
"options": []
},
"expect": "exists"
},
"list_customers": {
"args": {
"page": 50,
"per_page": 50,
"q": "test_value",
"sort": "test_value"
},
"expect": "content && content.length > 0"
},
"list_customers:empty-q": {
"args": {
"page": 50,
"per_page": 50,
"q": "",
"sort": "test_value"
},
"expect": "exists"
},
"list_customers:empty-sort": {
"args": {
"page": 50,
"per_page": 50,
"q": "test_value",
"sort": ""
},
"expect": "exists"
},
"list_invoices": {
"args": {
"page": 50,
"per_page": 50,
"status": "draft",
"customer_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_invoices:empty-status": {
"args": {
"page": 50,
"per_page": 50,
"status": "",
"customer_id": "test-id-123"
},
"expect": "exists"
},
"list_invoices:empty-customer_id": {
"args": {
"page": 50,
"per_page": 50,
"status": "draft",
"customer_id": ""
},
"expect": "exists"
},
"list_employees": {
"args": {
"page": 50,
"per_page": 50,
"active": true
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/housecall-pro/dist/index.js"
],
"env": {
"HOUSECALL_PRO_API_KEY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,272 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/jobber/dist/index.js"
],
"env": {
"JOBBER_ACCESS_TOKEN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_jobs": {
"args": {
"first": 50,
"after": "test_value"
},
"expect": "content && content.length > 0"
},
"list_jobs:empty-after": {
"args": {
"first": 50,
"after": ""
},
"expect": "exists"
},
"get_job": {
"args": {
"id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"create_job": {
"args": {
"clientId": "test-id-123",
"title": "test_value",
"instructions": "test_value",
"startAt": "test_value",
"endAt": "test_value",
"lineItems": []
},
"expect": "content && content.length > 0"
},
"create_job:empty-instructions": {
"args": {
"clientId": "test-id-123",
"title": "test_value",
"instructions": "",
"startAt": "test_value",
"endAt": "test_value",
"lineItems": []
},
"expect": "exists"
},
"create_job:empty-startAt": {
"args": {
"clientId": "test-id-123",
"title": "test_value",
"instructions": "test_value",
"startAt": "",
"endAt": "test_value",
"lineItems": []
},
"expect": "exists"
},
"create_job:empty-endAt": {
"args": {
"clientId": "test-id-123",
"title": "test_value",
"instructions": "test_value",
"startAt": "test_value",
"endAt": "",
"lineItems": []
},
"expect": "exists"
},
"list_quotes": {
"args": {
"first": 50,
"after": "test_value"
},
"expect": "content && content.length > 0"
},
"list_quotes:empty-after": {
"args": {
"first": 50,
"after": ""
},
"expect": "exists"
},
"create_quote": {
"args": {
"clientId": "test-id-123",
"title": "test_value",
"message": "test_value",
"lineItems": []
},
"expect": "content && content.length > 0"
},
"create_quote:empty-message": {
"args": {
"clientId": "test-id-123",
"title": "test_value",
"message": "",
"lineItems": []
},
"expect": "exists"
},
"list_invoices": {
"args": {
"first": 50,
"after": "test_value"
},
"expect": "content && content.length > 0"
},
"list_invoices:empty-after": {
"args": {
"first": 50,
"after": ""
},
"expect": "exists"
},
"list_clients": {
"args": {
"first": 50,
"after": "test_value",
"searchTerm": "test query"
},
"expect": "content && content.length > 0"
},
"list_clients:empty-after": {
"args": {
"first": 50,
"after": "",
"searchTerm": "test query"
},
"expect": "exists"
},
"list_clients:empty-searchTerm": {
"args": {
"first": 50,
"after": "test_value",
"searchTerm": ""
},
"expect": "exists"
},
"create_client": {
"args": {
"firstName": "Test Name",
"lastName": "Test Name",
"companyName": "Test Name",
"isCompany": true,
"email": "test@example.com",
"phone": "test_value",
"street1": "test_value",
"city": "test_value",
"province": "test_value",
"postalCode": "javascript"
},
"expect": "content && content.length > 0"
},
"create_client:empty-companyName": {
"args": {
"firstName": "Test Name",
"lastName": "Test Name",
"companyName": "",
"isCompany": true,
"email": "test@example.com",
"phone": "test_value",
"street1": "test_value",
"city": "test_value",
"province": "test_value",
"postalCode": "javascript"
},
"expect": "exists"
},
"create_client:empty-email": {
"args": {
"firstName": "Test Name",
"lastName": "Test Name",
"companyName": "Test Name",
"isCompany": true,
"email": "",
"phone": "test_value",
"street1": "test_value",
"city": "test_value",
"province": "test_value",
"postalCode": "javascript"
},
"expect": "exists"
},
"create_client:empty-phone": {
"args": {
"firstName": "Test Name",
"lastName": "Test Name",
"companyName": "Test Name",
"isCompany": true,
"email": "test@example.com",
"phone": "",
"street1": "test_value",
"city": "test_value",
"province": "test_value",
"postalCode": "javascript"
},
"expect": "exists"
},
"create_client:empty-street1": {
"args": {
"firstName": "Test Name",
"lastName": "Test Name",
"companyName": "Test Name",
"isCompany": true,
"email": "test@example.com",
"phone": "test_value",
"street1": "",
"city": "test_value",
"province": "test_value",
"postalCode": "javascript"
},
"expect": "exists"
},
"create_client:empty-city": {
"args": {
"firstName": "Test Name",
"lastName": "Test Name",
"companyName": "Test Name",
"isCompany": true,
"email": "test@example.com",
"phone": "test_value",
"street1": "test_value",
"city": "",
"province": "test_value",
"postalCode": "javascript"
},
"expect": "exists"
},
"create_client:empty-province": {
"args": {
"firstName": "Test Name",
"lastName": "Test Name",
"companyName": "Test Name",
"isCompany": true,
"email": "test@example.com",
"phone": "test_value",
"street1": "test_value",
"city": "test_value",
"province": "",
"postalCode": "javascript"
},
"expect": "exists"
},
"create_client:empty-postalCode": {
"args": {
"firstName": "Test Name",
"lastName": "Test Name",
"companyName": "Test Name",
"isCompany": true,
"email": "test@example.com",
"phone": "test_value",
"street1": "test_value",
"city": "test_value",
"province": "test_value",
"postalCode": ""
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/jobber/dist/index.js"
],
"env": {
"JOBBER_ACCESS_TOKEN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,444 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/keap/dist/index.js"
],
"env": {
"KEAP_ACCESS_TOKEN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_contacts": {
"args": {
"limit": 50,
"offset": 50,
"email": "test@example.com",
"given_name": "Test Name",
"family_name": "Test Name",
"order": "test_value",
"order_direction": "ASCENDING",
"since": "test_value",
"until": "test_value"
},
"expect": "content && content.length > 0"
},
"list_contacts:empty-email": {
"args": {
"limit": 50,
"offset": 50,
"email": "",
"given_name": "Test Name",
"family_name": "Test Name",
"order": "test_value",
"order_direction": "ASCENDING",
"since": "test_value",
"until": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-given_name": {
"args": {
"limit": 50,
"offset": 50,
"email": "test@example.com",
"given_name": "",
"family_name": "Test Name",
"order": "test_value",
"order_direction": "ASCENDING",
"since": "test_value",
"until": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-family_name": {
"args": {
"limit": 50,
"offset": 50,
"email": "test@example.com",
"given_name": "Test Name",
"family_name": "",
"order": "test_value",
"order_direction": "ASCENDING",
"since": "test_value",
"until": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-order": {
"args": {
"limit": 50,
"offset": 50,
"email": "test@example.com",
"given_name": "Test Name",
"family_name": "Test Name",
"order": "",
"order_direction": "ASCENDING",
"since": "test_value",
"until": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-order_direction": {
"args": {
"limit": 50,
"offset": 50,
"email": "test@example.com",
"given_name": "Test Name",
"family_name": "Test Name",
"order": "test_value",
"order_direction": "",
"since": "test_value",
"until": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-since": {
"args": {
"limit": 50,
"offset": 50,
"email": "test@example.com",
"given_name": "Test Name",
"family_name": "Test Name",
"order": "test_value",
"order_direction": "ASCENDING",
"since": "",
"until": "test_value"
},
"expect": "exists"
},
"list_contacts:empty-until": {
"args": {
"limit": 50,
"offset": 50,
"email": "test@example.com",
"given_name": "Test Name",
"family_name": "Test Name",
"order": "test_value",
"order_direction": "ASCENDING",
"since": "test_value",
"until": ""
},
"expect": "exists"
},
"get_contact": {
"args": {
"id": 50,
"optional_properties": []
},
"expect": "content && content.length > 0"
},
"create_contact": {
"args": {
"email_addresses": [],
"given_name": "Test Name",
"family_name": "Test Name",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "test_value",
"lead_source_id": 50,
"opt_in_reason": "test_value",
"source_type": "WEBFORM",
"custom_fields": []
},
"expect": "content && content.length > 0"
},
"create_contact:empty-given_name": {
"args": {
"email_addresses": [],
"given_name": "",
"family_name": "Test Name",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "test_value",
"lead_source_id": 50,
"opt_in_reason": "test_value",
"source_type": "WEBFORM",
"custom_fields": []
},
"expect": "exists"
},
"create_contact:empty-family_name": {
"args": {
"email_addresses": [],
"given_name": "Test Name",
"family_name": "",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "test_value",
"lead_source_id": 50,
"opt_in_reason": "test_value",
"source_type": "WEBFORM",
"custom_fields": []
},
"expect": "exists"
},
"create_contact:empty-job_title": {
"args": {
"email_addresses": [],
"given_name": "Test Name",
"family_name": "Test Name",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "",
"lead_source_id": 50,
"opt_in_reason": "test_value",
"source_type": "WEBFORM",
"custom_fields": []
},
"expect": "exists"
},
"create_contact:empty-opt_in_reason": {
"args": {
"email_addresses": [],
"given_name": "Test Name",
"family_name": "Test Name",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "test_value",
"lead_source_id": 50,
"opt_in_reason": "",
"source_type": "WEBFORM",
"custom_fields": []
},
"expect": "exists"
},
"create_contact:empty-source_type": {
"args": {
"email_addresses": [],
"given_name": "Test Name",
"family_name": "Test Name",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "test_value",
"lead_source_id": 50,
"opt_in_reason": "test_value",
"source_type": "",
"custom_fields": []
},
"expect": "exists"
},
"update_contact": {
"args": {
"id": 50,
"email_addresses": [],
"given_name": "Test Name",
"family_name": "Test Name",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "test_value",
"custom_fields": []
},
"expect": "content && content.length > 0"
},
"update_contact:empty-given_name": {
"args": {
"id": 50,
"email_addresses": [],
"given_name": "",
"family_name": "Test Name",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "test_value",
"custom_fields": []
},
"expect": "exists"
},
"update_contact:empty-family_name": {
"args": {
"id": 50,
"email_addresses": [],
"given_name": "Test Name",
"family_name": "",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "test_value",
"custom_fields": []
},
"expect": "exists"
},
"update_contact:empty-job_title": {
"args": {
"id": 50,
"email_addresses": [],
"given_name": "Test Name",
"family_name": "Test Name",
"phone_numbers": [],
"addresses": [],
"company": {},
"job_title": "",
"custom_fields": []
},
"expect": "exists"
},
"list_opportunities": {
"args": {
"limit": 50,
"offset": 50,
"user_id": 50,
"stage_id": 50,
"search_term": "test query",
"order": "test_value"
},
"expect": "content && content.length > 0"
},
"list_opportunities:empty-search_term": {
"args": {
"limit": 50,
"offset": 50,
"user_id": 50,
"stage_id": 50,
"search_term": "",
"order": "test_value"
},
"expect": "exists"
},
"list_opportunities:empty-order": {
"args": {
"limit": 50,
"offset": 50,
"user_id": 50,
"stage_id": 50,
"search_term": "test query",
"order": ""
},
"expect": "exists"
},
"list_tasks": {
"args": {
"limit": 50,
"offset": 50,
"contact_id": 50,
"user_id": 50,
"completed": true,
"since": "test_value",
"until": "test_value",
"order": "test_value"
},
"expect": "content && content.length > 0"
},
"list_tasks:empty-since": {
"args": {
"limit": 50,
"offset": 50,
"contact_id": 50,
"user_id": 50,
"completed": true,
"since": "",
"until": "test_value",
"order": "test_value"
},
"expect": "exists"
},
"list_tasks:empty-until": {
"args": {
"limit": 50,
"offset": 50,
"contact_id": 50,
"user_id": 50,
"completed": true,
"since": "test_value",
"until": "",
"order": "test_value"
},
"expect": "exists"
},
"list_tasks:empty-order": {
"args": {
"limit": 50,
"offset": 50,
"contact_id": 50,
"user_id": 50,
"completed": true,
"since": "test_value",
"until": "test_value",
"order": ""
},
"expect": "exists"
},
"create_task": {
"args": {
"title": "test_value",
"description": "test_value",
"contact": {},
"due_date": "test_value",
"priority": 50,
"type": "test_value",
"user_id": 50,
"remind_time": 50
},
"expect": "content && content.length > 0"
},
"create_task:empty-description": {
"args": {
"title": "test_value",
"description": "",
"contact": {},
"due_date": "test_value",
"priority": 50,
"type": "test_value",
"user_id": 50,
"remind_time": 50
},
"expect": "exists"
},
"create_task:empty-due_date": {
"args": {
"title": "test_value",
"description": "test_value",
"contact": {},
"due_date": "",
"priority": 50,
"type": "test_value",
"user_id": 50,
"remind_time": 50
},
"expect": "exists"
},
"create_task:empty-type": {
"args": {
"title": "test_value",
"description": "test_value",
"contact": {},
"due_date": "test_value",
"priority": 50,
"type": "",
"user_id": 50,
"remind_time": 50
},
"expect": "exists"
},
"list_tags": {
"args": {
"limit": 50,
"offset": 50,
"category": 50,
"name": "Test Name"
},
"expect": "content && content.length > 0"
},
"list_tags:empty-name": {
"args": {
"limit": 50,
"offset": 50,
"category": 50,
"name": ""
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/keap/dist/index.js"
],
"env": {
"KEAP_ACCESS_TOKEN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,377 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/lightspeed/dist/index.js"
],
"env": {
"LIGHTSPEED_ACCESS_TOKEN": "factory_discovery_dummy",
"LIGHTSPEED_ACCOUNT_ID": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_sales": {
"args": {
"limit": 50,
"offset": 50,
"completed": true,
"timeStamp": "test_value",
"employeeID": "test-id-123",
"shopID": "test-id-123",
"load_relations": "test_value"
},
"expect": "content && content.length > 0"
},
"list_sales:empty-timeStamp": {
"args": {
"limit": 50,
"offset": 50,
"completed": true,
"timeStamp": "",
"employeeID": "test-id-123",
"shopID": "test-id-123",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_sales:empty-employeeID": {
"args": {
"limit": 50,
"offset": 50,
"completed": true,
"timeStamp": "test_value",
"employeeID": "",
"shopID": "test-id-123",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_sales:empty-shopID": {
"args": {
"limit": 50,
"offset": 50,
"completed": true,
"timeStamp": "test_value",
"employeeID": "test-id-123",
"shopID": "",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_sales:empty-load_relations": {
"args": {
"limit": 50,
"offset": 50,
"completed": true,
"timeStamp": "test_value",
"employeeID": "test-id-123",
"shopID": "test-id-123",
"load_relations": ""
},
"expect": "exists"
},
"get_sale": {
"args": {
"sale_id": "test-id-123",
"load_relations": "test_value"
},
"expect": "content && content.length > 0"
},
"get_sale:empty-load_relations": {
"args": {
"sale_id": "test-id-123",
"load_relations": ""
},
"expect": "exists"
},
"list_items": {
"args": {
"limit": 50,
"offset": 50,
"categoryID": "test-id-123",
"manufacturerID": "test-id-123",
"description": "test_value",
"upc": "test_value",
"customSku": "test_value",
"archived": true,
"load_relations": "test_value"
},
"expect": "content && content.length > 0"
},
"list_items:empty-categoryID": {
"args": {
"limit": 50,
"offset": 50,
"categoryID": "",
"manufacturerID": "test-id-123",
"description": "test_value",
"upc": "test_value",
"customSku": "test_value",
"archived": true,
"load_relations": "test_value"
},
"expect": "exists"
},
"list_items:empty-manufacturerID": {
"args": {
"limit": 50,
"offset": 50,
"categoryID": "test-id-123",
"manufacturerID": "",
"description": "test_value",
"upc": "test_value",
"customSku": "test_value",
"archived": true,
"load_relations": "test_value"
},
"expect": "exists"
},
"list_items:empty-description": {
"args": {
"limit": 50,
"offset": 50,
"categoryID": "test-id-123",
"manufacturerID": "test-id-123",
"description": "",
"upc": "test_value",
"customSku": "test_value",
"archived": true,
"load_relations": "test_value"
},
"expect": "exists"
},
"list_items:empty-upc": {
"args": {
"limit": 50,
"offset": 50,
"categoryID": "test-id-123",
"manufacturerID": "test-id-123",
"description": "test_value",
"upc": "",
"customSku": "test_value",
"archived": true,
"load_relations": "test_value"
},
"expect": "exists"
},
"list_items:empty-customSku": {
"args": {
"limit": 50,
"offset": 50,
"categoryID": "test-id-123",
"manufacturerID": "test-id-123",
"description": "test_value",
"upc": "test_value",
"customSku": "",
"archived": true,
"load_relations": "test_value"
},
"expect": "exists"
},
"list_items:empty-load_relations": {
"args": {
"limit": 50,
"offset": 50,
"categoryID": "test-id-123",
"manufacturerID": "test-id-123",
"description": "test_value",
"upc": "test_value",
"customSku": "test_value",
"archived": true,
"load_relations": ""
},
"expect": "exists"
},
"get_item": {
"args": {
"item_id": "test-id-123",
"load_relations": "test_value"
},
"expect": "content && content.length > 0"
},
"get_item:empty-load_relations": {
"args": {
"item_id": "test-id-123",
"load_relations": ""
},
"expect": "exists"
},
"update_inventory": {
"args": {
"item_shop_id": "test-id-123",
"qoh": 50,
"reorderPoint": 50,
"reorderLevel": 50
},
"expect": "content && content.length > 0"
},
"list_customers": {
"args": {
"limit": 50,
"offset": 50,
"firstName": "Test Name",
"lastName": "Test Name",
"email": "test@example.com",
"phone": "test_value",
"customerTypeID": "test-id-123",
"load_relations": "test_value"
},
"expect": "content && content.length > 0"
},
"list_customers:empty-firstName": {
"args": {
"limit": 50,
"offset": 50,
"firstName": "",
"lastName": "Test Name",
"email": "test@example.com",
"phone": "test_value",
"customerTypeID": "test-id-123",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_customers:empty-lastName": {
"args": {
"limit": 50,
"offset": 50,
"firstName": "Test Name",
"lastName": "",
"email": "test@example.com",
"phone": "test_value",
"customerTypeID": "test-id-123",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_customers:empty-email": {
"args": {
"limit": 50,
"offset": 50,
"firstName": "Test Name",
"lastName": "Test Name",
"email": "",
"phone": "test_value",
"customerTypeID": "test-id-123",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_customers:empty-phone": {
"args": {
"limit": 50,
"offset": 50,
"firstName": "Test Name",
"lastName": "Test Name",
"email": "test@example.com",
"phone": "",
"customerTypeID": "test-id-123",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_customers:empty-customerTypeID": {
"args": {
"limit": 50,
"offset": 50,
"firstName": "Test Name",
"lastName": "Test Name",
"email": "test@example.com",
"phone": "test_value",
"customerTypeID": "",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_customers:empty-load_relations": {
"args": {
"limit": 50,
"offset": 50,
"firstName": "Test Name",
"lastName": "Test Name",
"email": "test@example.com",
"phone": "test_value",
"customerTypeID": "test-id-123",
"load_relations": ""
},
"expect": "exists"
},
"list_categories": {
"args": {
"limit": 50,
"offset": 50,
"parentID": "test-id-123",
"name": "Test Name",
"load_relations": "test_value"
},
"expect": "content && content.length > 0"
},
"list_categories:empty-parentID": {
"args": {
"limit": 50,
"offset": 50,
"parentID": "",
"name": "Test Name",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_categories:empty-name": {
"args": {
"limit": 50,
"offset": 50,
"parentID": "test-id-123",
"name": "",
"load_relations": "test_value"
},
"expect": "exists"
},
"list_categories:empty-load_relations": {
"args": {
"limit": 50,
"offset": 50,
"parentID": "test-id-123",
"name": "Test Name",
"load_relations": ""
},
"expect": "exists"
},
"get_register": {
"args": {
"register_id": "test-id-123",
"shopID": "test-id-123",
"load_relations": "test_value"
},
"expect": "content && content.length > 0"
},
"get_register:empty-register_id": {
"args": {
"register_id": "",
"shopID": "test-id-123",
"load_relations": "test_value"
},
"expect": "exists"
},
"get_register:empty-shopID": {
"args": {
"register_id": "test-id-123",
"shopID": "",
"load_relations": "test_value"
},
"expect": "exists"
},
"get_register:empty-load_relations": {
"args": {
"register_id": "test-id-123",
"shopID": "test-id-123",
"load_relations": ""
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,12 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/lightspeed/dist/index.js"
],
"env": {
"LIGHTSPEED_ACCESS_TOKEN": "factory_discovery_dummy",
"LIGHTSPEED_ACCOUNT_ID": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,156 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/mailchimp/dist/index.js"
],
"env": {
"MAILCHIMP_API_KEY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_campaigns": {
"args": {
"count": 50,
"offset": 50,
"status": "save",
"type": "regular"
},
"expect": "content && content.length > 0"
},
"list_campaigns:empty-status": {
"args": {
"count": 50,
"offset": 50,
"status": "",
"type": "regular"
},
"expect": "exists"
},
"list_campaigns:empty-type": {
"args": {
"count": 50,
"offset": 50,
"status": "save",
"type": ""
},
"expect": "exists"
},
"get_campaign": {
"args": {
"campaign_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"create_campaign": {
"args": {
"type": "regular",
"list_id": "test-id-123",
"subject_line": "test_value",
"preview_text": "Sample content for testing",
"title": "test_value",
"from_name": "Test Name",
"reply_to": "test_value"
},
"expect": "content && content.length > 0"
},
"create_campaign:empty-preview_text": {
"args": {
"type": "regular",
"list_id": "test-id-123",
"subject_line": "test_value",
"preview_text": "",
"title": "test_value",
"from_name": "Test Name",
"reply_to": "test_value"
},
"expect": "exists"
},
"create_campaign:empty-title": {
"args": {
"type": "regular",
"list_id": "test-id-123",
"subject_line": "test_value",
"preview_text": "Sample content for testing",
"title": "",
"from_name": "Test Name",
"reply_to": "test_value"
},
"expect": "exists"
},
"send_campaign": {
"args": {
"campaign_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_lists": {
"args": {
"count": 50,
"offset": 50
},
"expect": "content && content.length > 0"
},
"add_subscriber": {
"args": {
"list_id": "test-id-123",
"email": "test@example.com",
"status": "subscribed",
"first_name": "Test Name",
"last_name": "Test Name",
"tags": []
},
"expect": "content && content.length > 0"
},
"add_subscriber:empty-first_name": {
"args": {
"list_id": "test-id-123",
"email": "test@example.com",
"status": "subscribed",
"first_name": "",
"last_name": "Test Name",
"tags": []
},
"expect": "exists"
},
"add_subscriber:empty-last_name": {
"args": {
"list_id": "test-id-123",
"email": "test@example.com",
"status": "subscribed",
"first_name": "Test Name",
"last_name": "",
"tags": []
},
"expect": "exists"
},
"get_subscriber": {
"args": {
"list_id": "test-id-123",
"email": "test@example.com"
},
"expect": "content && content.length > 0"
},
"list_templates": {
"args": {
"count": 50,
"offset": 50,
"type": "user"
},
"expect": "content && content.length > 0"
},
"list_templates:empty-type": {
"args": {
"count": 50,
"offset": 50,
"type": ""
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/mailchimp/dist/index.js"
],
"env": {
"MAILCHIMP_API_KEY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,470 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/pipedrive/dist/index.js"
],
"env": {
"PIPEDRIVE_API_TOKEN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_deals": {
"args": {
"status": "open",
"start": 50,
"limit": 50,
"sort": "test_value",
"user_id": 50,
"stage_id": 50,
"pipeline_id": 50
},
"expect": "content && content.length > 0"
},
"list_deals:empty-status": {
"args": {
"status": "",
"start": 50,
"limit": 50,
"sort": "test_value",
"user_id": 50,
"stage_id": 50,
"pipeline_id": 50
},
"expect": "exists"
},
"list_deals:empty-sort": {
"args": {
"status": "open",
"start": 50,
"limit": 50,
"sort": "",
"user_id": 50,
"stage_id": 50,
"pipeline_id": 50
},
"expect": "exists"
},
"get_deal": {
"args": {
"id": 50
},
"expect": "content && content.length > 0"
},
"create_deal": {
"args": {
"title": "test_value",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"pipeline_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "test_value",
"probability": 50,
"visible_to": 50
},
"expect": "content && content.length > 0"
},
"create_deal:empty-currency": {
"args": {
"title": "test_value",
"value": 50,
"currency": "",
"person_id": 50,
"org_id": 50,
"pipeline_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "test_value",
"probability": 50,
"visible_to": 50
},
"expect": "exists"
},
"create_deal:empty-status": {
"args": {
"title": "test_value",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"pipeline_id": 50,
"stage_id": 50,
"status": "",
"expected_close_date": "test_value",
"probability": 50,
"visible_to": 50
},
"expect": "exists"
},
"create_deal:empty-expected_close_date": {
"args": {
"title": "test_value",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"pipeline_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "",
"probability": 50,
"visible_to": 50
},
"expect": "exists"
},
"update_deal": {
"args": {
"id": 50,
"title": "test_value",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "test_value",
"probability": 50,
"lost_reason": "test_value",
"won_time": "test_value",
"lost_time": "test_value"
},
"expect": "content && content.length > 0"
},
"update_deal:empty-title": {
"args": {
"id": 50,
"title": "",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "test_value",
"probability": 50,
"lost_reason": "test_value",
"won_time": "test_value",
"lost_time": "test_value"
},
"expect": "exists"
},
"update_deal:empty-currency": {
"args": {
"id": 50,
"title": "test_value",
"value": 50,
"currency": "",
"person_id": 50,
"org_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "test_value",
"probability": 50,
"lost_reason": "test_value",
"won_time": "test_value",
"lost_time": "test_value"
},
"expect": "exists"
},
"update_deal:empty-status": {
"args": {
"id": 50,
"title": "test_value",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"stage_id": 50,
"status": "",
"expected_close_date": "test_value",
"probability": 50,
"lost_reason": "test_value",
"won_time": "test_value",
"lost_time": "test_value"
},
"expect": "exists"
},
"update_deal:empty-expected_close_date": {
"args": {
"id": 50,
"title": "test_value",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "",
"probability": 50,
"lost_reason": "test_value",
"won_time": "test_value",
"lost_time": "test_value"
},
"expect": "exists"
},
"update_deal:empty-lost_reason": {
"args": {
"id": 50,
"title": "test_value",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "test_value",
"probability": 50,
"lost_reason": "",
"won_time": "test_value",
"lost_time": "test_value"
},
"expect": "exists"
},
"update_deal:empty-won_time": {
"args": {
"id": 50,
"title": "test_value",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "test_value",
"probability": 50,
"lost_reason": "test_value",
"won_time": "",
"lost_time": "test_value"
},
"expect": "exists"
},
"update_deal:empty-lost_time": {
"args": {
"id": 50,
"title": "test_value",
"value": 50,
"currency": "test_value",
"person_id": 50,
"org_id": 50,
"stage_id": 50,
"status": "open",
"expected_close_date": "test_value",
"probability": 50,
"lost_reason": "test_value",
"won_time": "test_value",
"lost_time": ""
},
"expect": "exists"
},
"list_persons": {
"args": {
"start": 50,
"limit": 50,
"sort": "test_value",
"filter_id": 50,
"first_char": "test_value"
},
"expect": "content && content.length > 0"
},
"list_persons:empty-sort": {
"args": {
"start": 50,
"limit": 50,
"sort": "",
"filter_id": 50,
"first_char": "test_value"
},
"expect": "exists"
},
"list_persons:empty-first_char": {
"args": {
"start": 50,
"limit": 50,
"sort": "test_value",
"filter_id": 50,
"first_char": ""
},
"expect": "exists"
},
"create_person": {
"args": {
"name": "Test Name",
"email": [],
"phone": [],
"org_id": 50,
"visible_to": 50,
"add_time": "test_value"
},
"expect": "content && content.length > 0"
},
"create_person:empty-add_time": {
"args": {
"name": "Test Name",
"email": [],
"phone": [],
"org_id": 50,
"visible_to": 50,
"add_time": ""
},
"expect": "exists"
},
"list_activities": {
"args": {
"start": 50,
"limit": 50,
"user_id": 50,
"type": "test_value",
"done": 50,
"start_date": "test_value",
"end_date": "test_value"
},
"expect": "content && content.length > 0"
},
"list_activities:empty-type": {
"args": {
"start": 50,
"limit": 50,
"user_id": 50,
"type": "",
"done": 50,
"start_date": "test_value",
"end_date": "test_value"
},
"expect": "exists"
},
"list_activities:empty-start_date": {
"args": {
"start": 50,
"limit": 50,
"user_id": 50,
"type": "test_value",
"done": 50,
"start_date": "",
"end_date": "test_value"
},
"expect": "exists"
},
"list_activities:empty-end_date": {
"args": {
"start": 50,
"limit": 50,
"user_id": 50,
"type": "test_value",
"done": 50,
"start_date": "test_value",
"end_date": ""
},
"expect": "exists"
},
"add_activity": {
"args": {
"subject": "test_value",
"type": "test_value",
"due_date": "test_value",
"due_time": "test_value",
"duration": "test_value",
"deal_id": 50,
"person_id": 50,
"org_id": 50,
"note": "test_value",
"done": 50,
"busy_flag": true,
"participants": []
},
"expect": "content && content.length > 0"
},
"add_activity:empty-type": {
"args": {
"subject": "test_value",
"type": "",
"due_date": "test_value",
"due_time": "test_value",
"duration": "test_value",
"deal_id": 50,
"person_id": 50,
"org_id": 50,
"note": "test_value",
"done": 50,
"busy_flag": true,
"participants": []
},
"expect": "exists"
},
"add_activity:empty-due_date": {
"args": {
"subject": "test_value",
"type": "test_value",
"due_date": "",
"due_time": "test_value",
"duration": "test_value",
"deal_id": 50,
"person_id": 50,
"org_id": 50,
"note": "test_value",
"done": 50,
"busy_flag": true,
"participants": []
},
"expect": "exists"
},
"add_activity:empty-due_time": {
"args": {
"subject": "test_value",
"type": "test_value",
"due_date": "test_value",
"due_time": "",
"duration": "test_value",
"deal_id": 50,
"person_id": 50,
"org_id": 50,
"note": "test_value",
"done": 50,
"busy_flag": true,
"participants": []
},
"expect": "exists"
},
"add_activity:empty-duration": {
"args": {
"subject": "test_value",
"type": "test_value",
"due_date": "test_value",
"due_time": "test_value",
"duration": "",
"deal_id": 50,
"person_id": 50,
"org_id": 50,
"note": "test_value",
"done": 50,
"busy_flag": true,
"participants": []
},
"expect": "exists"
},
"add_activity:empty-note": {
"args": {
"subject": "test_value",
"type": "test_value",
"due_date": "test_value",
"due_time": "test_value",
"duration": "test_value",
"deal_id": 50,
"person_id": 50,
"org_id": 50,
"note": "",
"done": 50,
"busy_flag": true,
"participants": []
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/pipedrive/dist/index.js"
],
"env": {
"PIPEDRIVE_API_TOKEN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,179 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/rippling/dist/index.js"
],
"env": {
"RIPPLING_API_KEY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_employees": {
"args": {
"limit": 50,
"offset": 50,
"include_terminated": true
},
"expect": "content && content.length > 0"
},
"get_employee": {
"args": {
"employee_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_departments": {
"args": {
"limit": 50,
"offset": 50
},
"expect": "content && content.length > 0"
},
"list_teams": {
"args": {
"limit": 50,
"offset": 50
},
"expect": "content && content.length > 0"
},
"get_payroll": {
"args": {
"employee_id": "test-id-123",
"start_date": "test_value",
"end_date": "test_value"
},
"expect": "content && content.length > 0"
},
"get_payroll:empty-employee_id": {
"args": {
"employee_id": "",
"start_date": "test_value",
"end_date": "test_value"
},
"expect": "exists"
},
"get_payroll:empty-start_date": {
"args": {
"employee_id": "test-id-123",
"start_date": "",
"end_date": "test_value"
},
"expect": "exists"
},
"get_payroll:empty-end_date": {
"args": {
"employee_id": "test-id-123",
"start_date": "test_value",
"end_date": ""
},
"expect": "exists"
},
"list_devices": {
"args": {
"limit": 50,
"offset": 50,
"employee_id": "test-id-123",
"device_type": "test_value"
},
"expect": "content && content.length > 0"
},
"list_devices:empty-employee_id": {
"args": {
"limit": 50,
"offset": 50,
"employee_id": "",
"device_type": "test_value"
},
"expect": "exists"
},
"list_devices:empty-device_type": {
"args": {
"limit": 50,
"offset": 50,
"employee_id": "test-id-123",
"device_type": ""
},
"expect": "exists"
},
"list_apps": {
"args": {
"limit": 50,
"offset": 50
},
"expect": "content && content.length > 0"
},
"get_company": {
"args": {},
"expect": "content && content.length > 0"
},
"list_groups": {
"args": {},
"expect": "content && content.length > 0"
},
"list_levels": {
"args": {
"limit": 50,
"offset": 50
},
"expect": "content && content.length > 0"
},
"list_work_locations": {
"args": {
"limit": 50,
"offset": 50
},
"expect": "content && content.length > 0"
},
"get_leave_requests": {
"args": {
"employee_id": "test-id-123",
"status": "test_value",
"start_date": "test_value",
"end_date": "test_value"
},
"expect": "content && content.length > 0"
},
"get_leave_requests:empty-employee_id": {
"args": {
"employee_id": "",
"status": "test_value",
"start_date": "test_value",
"end_date": "test_value"
},
"expect": "exists"
},
"get_leave_requests:empty-status": {
"args": {
"employee_id": "test-id-123",
"status": "",
"start_date": "test_value",
"end_date": "test_value"
},
"expect": "exists"
},
"get_leave_requests:empty-start_date": {
"args": {
"employee_id": "test-id-123",
"status": "test_value",
"start_date": "",
"end_date": "test_value"
},
"expect": "exists"
},
"get_leave_requests:empty-end_date": {
"args": {
"employee_id": "test-id-123",
"status": "test_value",
"start_date": "test_value",
"end_date": ""
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/rippling/dist/index.js"
],
"env": {
"RIPPLING_API_KEY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,288 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/servicetitan/dist/index.js"
],
"env": {
"SERVICETITAN_CLIENT_ID": "factory_discovery_dummy",
"SERVICETITAN_CLIENT_SECRET": "factory_discovery_dummy",
"SERVICETITAN_TENANT_ID": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_jobs": {
"args": {
"page": 50,
"pageSize": 50,
"status": "test_value",
"customerId": 50,
"technicianId": 50,
"createdOnOrAfter": "test_value",
"completedOnOrAfter": "test_value"
},
"expect": "content && content.length > 0"
},
"list_jobs:empty-status": {
"args": {
"page": 50,
"pageSize": 50,
"status": "",
"customerId": 50,
"technicianId": 50,
"createdOnOrAfter": "test_value",
"completedOnOrAfter": "test_value"
},
"expect": "exists"
},
"list_jobs:empty-createdOnOrAfter": {
"args": {
"page": 50,
"pageSize": 50,
"status": "test_value",
"customerId": 50,
"technicianId": 50,
"createdOnOrAfter": "",
"completedOnOrAfter": "test_value"
},
"expect": "exists"
},
"list_jobs:empty-completedOnOrAfter": {
"args": {
"page": 50,
"pageSize": 50,
"status": "test_value",
"customerId": 50,
"technicianId": 50,
"createdOnOrAfter": "test_value",
"completedOnOrAfter": ""
},
"expect": "exists"
},
"get_job": {
"args": {
"job_id": 50
},
"expect": "content && content.length > 0"
},
"create_job": {
"args": {
"customerId": 50,
"locationId": 50,
"jobTypeId": 50,
"priority": "test_value",
"businessUnitId": 50,
"campaignId": 50,
"summary": "test_value",
"scheduledStart": "test_value",
"scheduledEnd": "test_value"
},
"expect": "content && content.length > 0"
},
"create_job:empty-priority": {
"args": {
"customerId": 50,
"locationId": 50,
"jobTypeId": 50,
"priority": "",
"businessUnitId": 50,
"campaignId": 50,
"summary": "test_value",
"scheduledStart": "test_value",
"scheduledEnd": "test_value"
},
"expect": "exists"
},
"create_job:empty-summary": {
"args": {
"customerId": 50,
"locationId": 50,
"jobTypeId": 50,
"priority": "test_value",
"businessUnitId": 50,
"campaignId": 50,
"summary": "",
"scheduledStart": "test_value",
"scheduledEnd": "test_value"
},
"expect": "exists"
},
"create_job:empty-scheduledStart": {
"args": {
"customerId": 50,
"locationId": 50,
"jobTypeId": 50,
"priority": "test_value",
"businessUnitId": 50,
"campaignId": 50,
"summary": "test_value",
"scheduledStart": "",
"scheduledEnd": "test_value"
},
"expect": "exists"
},
"create_job:empty-scheduledEnd": {
"args": {
"customerId": 50,
"locationId": 50,
"jobTypeId": 50,
"priority": "test_value",
"businessUnitId": 50,
"campaignId": 50,
"summary": "test_value",
"scheduledStart": "test_value",
"scheduledEnd": ""
},
"expect": "exists"
},
"list_customers": {
"args": {
"page": 50,
"pageSize": 50,
"name": "Test Name",
"email": "test@example.com",
"phone": "test_value",
"createdOnOrAfter": "test_value",
"active": true
},
"expect": "content && content.length > 0"
},
"list_customers:empty-name": {
"args": {
"page": 50,
"pageSize": 50,
"name": "",
"email": "test@example.com",
"phone": "test_value",
"createdOnOrAfter": "test_value",
"active": true
},
"expect": "exists"
},
"list_customers:empty-email": {
"args": {
"page": 50,
"pageSize": 50,
"name": "Test Name",
"email": "",
"phone": "test_value",
"createdOnOrAfter": "test_value",
"active": true
},
"expect": "exists"
},
"list_customers:empty-phone": {
"args": {
"page": 50,
"pageSize": 50,
"name": "Test Name",
"email": "test@example.com",
"phone": "",
"createdOnOrAfter": "test_value",
"active": true
},
"expect": "exists"
},
"list_customers:empty-createdOnOrAfter": {
"args": {
"page": 50,
"pageSize": 50,
"name": "Test Name",
"email": "test@example.com",
"phone": "test_value",
"createdOnOrAfter": "",
"active": true
},
"expect": "exists"
},
"get_customer": {
"args": {
"customer_id": 50
},
"expect": "content && content.length > 0"
},
"list_invoices": {
"args": {
"page": 50,
"pageSize": 50,
"status": "test_value",
"customerId": 50,
"jobId": 50,
"createdOnOrAfter": "test_value",
"total_gte": 50
},
"expect": "content && content.length > 0"
},
"list_invoices:empty-status": {
"args": {
"page": 50,
"pageSize": 50,
"status": "",
"customerId": 50,
"jobId": 50,
"createdOnOrAfter": "test_value",
"total_gte": 50
},
"expect": "exists"
},
"list_invoices:empty-createdOnOrAfter": {
"args": {
"page": 50,
"pageSize": 50,
"status": "test_value",
"customerId": 50,
"jobId": 50,
"createdOnOrAfter": "",
"total_gte": 50
},
"expect": "exists"
},
"list_technicians": {
"args": {
"page": 50,
"pageSize": 50,
"active": true,
"businessUnitId": 50
},
"expect": "content && content.length > 0"
},
"list_appointments": {
"args": {
"page": 50,
"pageSize": 50,
"startsOnOrAfter": "test_value",
"startsOnOrBefore": "test_value",
"technicianId": 50,
"jobId": 50
},
"expect": "content && content.length > 0"
},
"list_appointments:empty-startsOnOrAfter": {
"args": {
"page": 50,
"pageSize": 50,
"startsOnOrAfter": "",
"startsOnOrBefore": "test_value",
"technicianId": 50,
"jobId": 50
},
"expect": "exists"
},
"list_appointments:empty-startsOnOrBefore": {
"args": {
"page": 50,
"pageSize": 50,
"startsOnOrAfter": "test_value",
"startsOnOrBefore": "",
"technicianId": 50,
"jobId": 50
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,13 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/servicetitan/dist/index.js"
],
"env": {
"SERVICETITAN_CLIENT_ID": "factory_discovery_dummy",
"SERVICETITAN_CLIENT_SECRET": "factory_discovery_dummy",
"SERVICETITAN_TENANT_ID": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,159 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/squarespace/dist/index.js"
],
"env": {
"SQUARESPACE_API_KEY": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_pages": {
"args": {
"cursor": "test_value"
},
"expect": "content && content.length > 0"
},
"list_pages:empty-cursor": {
"args": {
"cursor": ""
},
"expect": "exists"
},
"get_page": {
"args": {
"pageId": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_products": {
"args": {
"cursor": "test_value",
"modifiedAfter": "test_value",
"modifiedBefore": "test_value",
"type": "test_value"
},
"expect": "content && content.length > 0"
},
"list_products:empty-cursor": {
"args": {
"cursor": "",
"modifiedAfter": "test_value",
"modifiedBefore": "test_value",
"type": "test_value"
},
"expect": "exists"
},
"list_products:empty-modifiedAfter": {
"args": {
"cursor": "test_value",
"modifiedAfter": "",
"modifiedBefore": "test_value",
"type": "test_value"
},
"expect": "exists"
},
"list_products:empty-modifiedBefore": {
"args": {
"cursor": "test_value",
"modifiedAfter": "test_value",
"modifiedBefore": "",
"type": "test_value"
},
"expect": "exists"
},
"list_products:empty-type": {
"args": {
"cursor": "test_value",
"modifiedAfter": "test_value",
"modifiedBefore": "test_value",
"type": ""
},
"expect": "exists"
},
"get_product": {
"args": {
"productId": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_orders": {
"args": {
"cursor": "test_value",
"modifiedAfter": "test_value",
"modifiedBefore": "test_value",
"fulfillmentStatus": "test_value"
},
"expect": "content && content.length > 0"
},
"list_orders:empty-cursor": {
"args": {
"cursor": "",
"modifiedAfter": "test_value",
"modifiedBefore": "test_value",
"fulfillmentStatus": "test_value"
},
"expect": "exists"
},
"list_orders:empty-modifiedAfter": {
"args": {
"cursor": "test_value",
"modifiedAfter": "",
"modifiedBefore": "test_value",
"fulfillmentStatus": "test_value"
},
"expect": "exists"
},
"list_orders:empty-modifiedBefore": {
"args": {
"cursor": "test_value",
"modifiedAfter": "test_value",
"modifiedBefore": "",
"fulfillmentStatus": "test_value"
},
"expect": "exists"
},
"list_orders:empty-fulfillmentStatus": {
"args": {
"cursor": "test_value",
"modifiedAfter": "test_value",
"modifiedBefore": "test_value",
"fulfillmentStatus": ""
},
"expect": "exists"
},
"get_order": {
"args": {
"orderId": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_inventory": {
"args": {
"cursor": "test_value"
},
"expect": "content && content.length > 0"
},
"list_inventory:empty-cursor": {
"args": {
"cursor": ""
},
"expect": "exists"
},
"update_inventory": {
"args": {
"variantId": "test-id-123",
"quantity": 50,
"quantityDelta": 50,
"isUnlimited": true
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/squarespace/dist/index.js"
],
"env": {
"SQUARESPACE_API_KEY": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,188 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/toast/dist/index.js"
],
"env": {
"TOAST_CLIENT_ID": "factory_discovery_dummy",
"TOAST_CLIENT_SECRET": "factory_discovery_dummy",
"TOAST_RESTAURANT_GUID": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_orders": {
"args": {
"start_date": "test_value",
"end_date": "test_value",
"page_size": 50,
"page_token": "test_value",
"business_date": "test_value"
},
"expect": "content && content.length > 0"
},
"list_orders:empty-page_token": {
"args": {
"start_date": "test_value",
"end_date": "test_value",
"page_size": 50,
"page_token": "",
"business_date": "test_value"
},
"expect": "exists"
},
"list_orders:empty-business_date": {
"args": {
"start_date": "test_value",
"end_date": "test_value",
"page_size": 50,
"page_token": "test_value",
"business_date": ""
},
"expect": "exists"
},
"get_order": {
"args": {
"order_guid": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_menu_items": {
"args": {
"menu_guid": "test-id-123",
"include_modifiers": true
},
"expect": "content && content.length > 0"
},
"list_menu_items:empty-menu_guid": {
"args": {
"menu_guid": "",
"include_modifiers": true
},
"expect": "exists"
},
"update_menu_item": {
"args": {
"item_guid": "test-id-123",
"quantity": "test_value",
"status": "test_value"
},
"expect": "content && content.length > 0"
},
"update_menu_item:empty-quantity": {
"args": {
"item_guid": "test-id-123",
"quantity": "",
"status": "test_value"
},
"expect": "exists"
},
"update_menu_item:empty-status": {
"args": {
"item_guid": "test-id-123",
"quantity": "test_value",
"status": ""
},
"expect": "exists"
},
"list_employees": {
"args": {
"page_size": 50,
"page_token": "test_value",
"include_archived": true
},
"expect": "content && content.length > 0"
},
"list_employees:empty-page_token": {
"args": {
"page_size": 50,
"page_token": "",
"include_archived": true
},
"expect": "exists"
},
"get_labor": {
"args": {
"start_date": "test_value",
"end_date": "test_value",
"employee_guid": "test-id-123",
"page_size": 50,
"page_token": "test_value"
},
"expect": "content && content.length > 0"
},
"get_labor:empty-employee_guid": {
"args": {
"start_date": "test_value",
"end_date": "test_value",
"employee_guid": "",
"page_size": 50,
"page_token": "test_value"
},
"expect": "exists"
},
"get_labor:empty-page_token": {
"args": {
"start_date": "test_value",
"end_date": "test_value",
"employee_guid": "test-id-123",
"page_size": 50,
"page_token": ""
},
"expect": "exists"
},
"list_checks": {
"args": {
"start_date": "test_value",
"end_date": "test_value",
"page_size": 50,
"page_token": "test_value",
"check_status": "test_value"
},
"expect": "content && content.length > 0"
},
"list_checks:empty-page_token": {
"args": {
"start_date": "test_value",
"end_date": "test_value",
"page_size": 50,
"page_token": "",
"check_status": "test_value"
},
"expect": "exists"
},
"list_checks:empty-check_status": {
"args": {
"start_date": "test_value",
"end_date": "test_value",
"page_size": 50,
"page_token": "test_value",
"check_status": ""
},
"expect": "exists"
},
"void_check": {
"args": {
"order_guid": "test-id-123",
"check_guid": "test-id-123",
"void_reason": "test-id-123",
"void_business_date": 50
},
"expect": "content && content.length > 0"
},
"void_check:empty-void_reason": {
"args": {
"order_guid": "test-id-123",
"check_guid": "test-id-123",
"void_reason": "",
"void_business_date": 50
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,13 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/toast/dist/index.js"
],
"env": {
"TOAST_CLIENT_ID": "factory_discovery_dummy",
"TOAST_CLIENT_SECRET": "factory_discovery_dummy",
"TOAST_RESTAURANT_GUID": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,250 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/touchbistro/dist/index.js"
],
"env": {
"TOUCHBISTRO_API_KEY": "factory_discovery_dummy",
"TOUCHBISTRO_VENUE_ID": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_orders": {
"args": {
"page": 50,
"pageSize": 50,
"status": "open",
"orderType": "dine_in",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "content && content.length > 0"
},
"list_orders:empty-status": {
"args": {
"page": 50,
"pageSize": 50,
"status": "",
"orderType": "dine_in",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "exists"
},
"list_orders:empty-orderType": {
"args": {
"page": 50,
"pageSize": 50,
"status": "open",
"orderType": "",
"startDate": "test_value",
"endDate": "test_value"
},
"expect": "exists"
},
"list_orders:empty-startDate": {
"args": {
"page": 50,
"pageSize": 50,
"status": "open",
"orderType": "dine_in",
"startDate": "",
"endDate": "test_value"
},
"expect": "exists"
},
"list_orders:empty-endDate": {
"args": {
"page": 50,
"pageSize": 50,
"status": "open",
"orderType": "dine_in",
"startDate": "test_value",
"endDate": ""
},
"expect": "exists"
},
"get_order": {
"args": {
"id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_menu_items": {
"args": {
"page": 50,
"pageSize": 50,
"categoryId": "test-id-123",
"active": true
},
"expect": "content && content.length > 0"
},
"list_menu_items:empty-categoryId": {
"args": {
"page": 50,
"pageSize": 50,
"categoryId": "",
"active": true
},
"expect": "exists"
},
"list_reservations": {
"args": {
"page": 50,
"pageSize": 50,
"date": "test_value",
"status": "pending",
"partySize": 50
},
"expect": "content && content.length > 0"
},
"list_reservations:empty-date": {
"args": {
"page": 50,
"pageSize": 50,
"date": "",
"status": "pending",
"partySize": 50
},
"expect": "exists"
},
"list_reservations:empty-status": {
"args": {
"page": 50,
"pageSize": 50,
"date": "test_value",
"status": "",
"partySize": 50
},
"expect": "exists"
},
"create_reservation": {
"args": {
"customerName": "Test Name",
"customerPhone": "test_value",
"customerEmail": "test@example.com",
"partySize": 50,
"date": "test_value",
"time": "test_value",
"tableId": "test-id-123",
"notes": "test_value",
"source": "phone"
},
"expect": "content && content.length > 0"
},
"create_reservation:empty-customerPhone": {
"args": {
"customerName": "Test Name",
"customerPhone": "",
"customerEmail": "test@example.com",
"partySize": 50,
"date": "test_value",
"time": "test_value",
"tableId": "test-id-123",
"notes": "test_value",
"source": "phone"
},
"expect": "exists"
},
"create_reservation:empty-customerEmail": {
"args": {
"customerName": "Test Name",
"customerPhone": "test_value",
"customerEmail": "",
"partySize": 50,
"date": "test_value",
"time": "test_value",
"tableId": "test-id-123",
"notes": "test_value",
"source": "phone"
},
"expect": "exists"
},
"create_reservation:empty-tableId": {
"args": {
"customerName": "Test Name",
"customerPhone": "test_value",
"customerEmail": "test@example.com",
"partySize": 50,
"date": "test_value",
"time": "test_value",
"tableId": "",
"notes": "test_value",
"source": "phone"
},
"expect": "exists"
},
"create_reservation:empty-notes": {
"args": {
"customerName": "Test Name",
"customerPhone": "test_value",
"customerEmail": "test@example.com",
"partySize": 50,
"date": "test_value",
"time": "test_value",
"tableId": "test-id-123",
"notes": "",
"source": "phone"
},
"expect": "exists"
},
"create_reservation:empty-source": {
"args": {
"customerName": "Test Name",
"customerPhone": "test_value",
"customerEmail": "test@example.com",
"partySize": 50,
"date": "test_value",
"time": "test_value",
"tableId": "test-id-123",
"notes": "test_value",
"source": ""
},
"expect": "exists"
},
"list_staff": {
"args": {
"page": 50,
"pageSize": 50,
"role": "server",
"active": true
},
"expect": "content && content.length > 0"
},
"list_staff:empty-role": {
"args": {
"page": 50,
"pageSize": 50,
"role": "",
"active": true
},
"expect": "exists"
},
"get_sales_report": {
"args": {
"startDate": "test_value",
"endDate": "test_value",
"groupBy": "day",
"includeVoids": true,
"includeRefunds": true
},
"expect": "content && content.length > 0"
},
"get_sales_report:empty-groupBy": {
"args": {
"startDate": "test_value",
"endDate": "test_value",
"groupBy": "",
"includeVoids": true,
"includeRefunds": true
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,12 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/touchbistro/dist/index.js"
],
"env": {
"TOUCHBISTRO_API_KEY": "factory_discovery_dummy",
"TOUCHBISTRO_VENUE_ID": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,346 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/trello/dist/index.js"
],
"env": {
"TRELLO_API_KEY": "factory_discovery_dummy",
"TRELLO_TOKEN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_boards": {
"args": {
"filter": "all",
"fields": "test_value"
},
"expect": "content && content.length > 0"
},
"list_boards:empty-filter": {
"args": {
"filter": "",
"fields": "test_value"
},
"expect": "exists"
},
"list_boards:empty-fields": {
"args": {
"filter": "all",
"fields": ""
},
"expect": "exists"
},
"get_board": {
"args": {
"board_id": "test-id-123",
"lists": "all",
"cards": "all",
"members": true
},
"expect": "content && content.length > 0"
},
"get_board:empty-lists": {
"args": {
"board_id": "test-id-123",
"lists": "",
"cards": "all",
"members": true
},
"expect": "exists"
},
"get_board:empty-cards": {
"args": {
"board_id": "test-id-123",
"lists": "all",
"cards": "",
"members": true
},
"expect": "exists"
},
"list_lists": {
"args": {
"board_id": "test-id-123",
"filter": "all",
"cards": "all"
},
"expect": "content && content.length > 0"
},
"list_lists:empty-filter": {
"args": {
"board_id": "test-id-123",
"filter": "",
"cards": "all"
},
"expect": "exists"
},
"list_lists:empty-cards": {
"args": {
"board_id": "test-id-123",
"filter": "all",
"cards": ""
},
"expect": "exists"
},
"list_cards": {
"args": {
"board_id": "test-id-123",
"list_id": "test-id-123",
"filter": "all",
"fields": "test_value"
},
"expect": "content && content.length > 0"
},
"list_cards:empty-board_id": {
"args": {
"board_id": "",
"list_id": "test-id-123",
"filter": "all",
"fields": "test_value"
},
"expect": "exists"
},
"list_cards:empty-list_id": {
"args": {
"board_id": "test-id-123",
"list_id": "",
"filter": "all",
"fields": "test_value"
},
"expect": "exists"
},
"list_cards:empty-filter": {
"args": {
"board_id": "test-id-123",
"list_id": "test-id-123",
"filter": "",
"fields": "test_value"
},
"expect": "exists"
},
"list_cards:empty-fields": {
"args": {
"board_id": "test-id-123",
"list_id": "test-id-123",
"filter": "all",
"fields": ""
},
"expect": "exists"
},
"get_card": {
"args": {
"card_id": "test-id-123",
"members": true,
"checklists": "all",
"attachments": true
},
"expect": "content && content.length > 0"
},
"get_card:empty-checklists": {
"args": {
"card_id": "test-id-123",
"members": true,
"checklists": "",
"attachments": true
},
"expect": "exists"
},
"create_card": {
"args": {
"list_id": "test-id-123",
"name": "Test Name",
"desc": "test_value",
"pos": "test_value",
"due": "test_value",
"dueComplete": true,
"idMembers": [],
"idLabels": [],
"urlSource": "https://example.com"
},
"expect": "content && content.length > 0"
},
"create_card:empty-desc": {
"args": {
"list_id": "test-id-123",
"name": "Test Name",
"desc": "",
"pos": "test_value",
"due": "test_value",
"dueComplete": true,
"idMembers": [],
"idLabels": [],
"urlSource": "https://example.com"
},
"expect": "exists"
},
"create_card:empty-pos": {
"args": {
"list_id": "test-id-123",
"name": "Test Name",
"desc": "test_value",
"pos": "",
"due": "test_value",
"dueComplete": true,
"idMembers": [],
"idLabels": [],
"urlSource": "https://example.com"
},
"expect": "exists"
},
"create_card:empty-due": {
"args": {
"list_id": "test-id-123",
"name": "Test Name",
"desc": "test_value",
"pos": "test_value",
"due": "",
"dueComplete": true,
"idMembers": [],
"idLabels": [],
"urlSource": "https://example.com"
},
"expect": "exists"
},
"create_card:empty-urlSource": {
"args": {
"list_id": "test-id-123",
"name": "Test Name",
"desc": "test_value",
"pos": "test_value",
"due": "test_value",
"dueComplete": true,
"idMembers": [],
"idLabels": [],
"urlSource": ""
},
"expect": "exists"
},
"update_card": {
"args": {
"card_id": "test-id-123",
"name": "Test Name",
"desc": "test_value",
"closed": true,
"due": "test_value",
"dueComplete": true,
"pos": "test_value"
},
"expect": "content && content.length > 0"
},
"update_card:empty-name": {
"args": {
"card_id": "test-id-123",
"name": "",
"desc": "test_value",
"closed": true,
"due": "test_value",
"dueComplete": true,
"pos": "test_value"
},
"expect": "exists"
},
"update_card:empty-desc": {
"args": {
"card_id": "test-id-123",
"name": "Test Name",
"desc": "",
"closed": true,
"due": "test_value",
"dueComplete": true,
"pos": "test_value"
},
"expect": "exists"
},
"update_card:empty-due": {
"args": {
"card_id": "test-id-123",
"name": "Test Name",
"desc": "test_value",
"closed": true,
"due": "",
"dueComplete": true,
"pos": "test_value"
},
"expect": "exists"
},
"update_card:empty-pos": {
"args": {
"card_id": "test-id-123",
"name": "Test Name",
"desc": "test_value",
"closed": true,
"due": "test_value",
"dueComplete": true,
"pos": ""
},
"expect": "exists"
},
"move_card": {
"args": {
"card_id": "test-id-123",
"list_id": "test-id-123",
"board_id": "test-id-123",
"pos": "test_value"
},
"expect": "content && content.length > 0"
},
"move_card:empty-board_id": {
"args": {
"card_id": "test-id-123",
"list_id": "test-id-123",
"board_id": "",
"pos": "test_value"
},
"expect": "exists"
},
"move_card:empty-pos": {
"args": {
"card_id": "test-id-123",
"list_id": "test-id-123",
"board_id": "test-id-123",
"pos": ""
},
"expect": "exists"
},
"add_comment": {
"args": {
"card_id": "test-id-123",
"text": "Sample content for testing"
},
"expect": "content && content.length > 0"
},
"create_list": {
"args": {
"board_id": "test-id-123",
"name": "Test Name",
"pos": "test_value"
},
"expect": "content && content.length > 0"
},
"create_list:empty-pos": {
"args": {
"board_id": "test-id-123",
"name": "Test Name",
"pos": ""
},
"expect": "exists"
},
"archive_card": {
"args": {
"card_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"delete_card": {
"args": {
"card_id": "test-id-123"
},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,12 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/trello/dist/index.js"
],
"env": {
"TRELLO_API_KEY": "factory_discovery_dummy",
"TRELLO_TOKEN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,336 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/wave/dist/index.js"
],
"env": {
"WAVE_API_TOKEN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_businesses": {
"args": {},
"expect": "content && content.length > 0"
},
"list_invoices": {
"args": {
"businessId": "test-id-123",
"page": 50,
"pageSize": 50
},
"expect": "content && content.length > 0"
},
"create_invoice": {
"args": {
"businessId": "test-id-123",
"customerId": "test-id-123",
"invoiceDate": "test_value",
"dueDate": "test_value",
"items": [],
"memo": "test_value"
},
"expect": "content && content.length > 0"
},
"create_invoice:empty-invoiceDate": {
"args": {
"businessId": "test-id-123",
"customerId": "test-id-123",
"invoiceDate": "",
"dueDate": "test_value",
"items": [],
"memo": "test_value"
},
"expect": "exists"
},
"create_invoice:empty-dueDate": {
"args": {
"businessId": "test-id-123",
"customerId": "test-id-123",
"invoiceDate": "test_value",
"dueDate": "",
"items": [],
"memo": "test_value"
},
"expect": "exists"
},
"create_invoice:empty-memo": {
"args": {
"businessId": "test-id-123",
"customerId": "test-id-123",
"invoiceDate": "test_value",
"dueDate": "test_value",
"items": [],
"memo": ""
},
"expect": "exists"
},
"list_customers": {
"args": {
"businessId": "test-id-123",
"page": 50,
"pageSize": 50
},
"expect": "content && content.length > 0"
},
"create_customer": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "content && content.length > 0"
},
"create_customer:empty-email": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-firstName": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-lastName": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-phone": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-addressLine1": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-addressLine2": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-city": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-provinceCode": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-postalCode": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "",
"countryCode": "javascript",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-countryCode": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "",
"currency": "test_value"
},
"expect": "exists"
},
"create_customer:empty-currency": {
"args": {
"businessId": "test-id-123",
"name": "Test Name",
"email": "test@example.com",
"firstName": "Test Name",
"lastName": "Test Name",
"phone": "test_value",
"addressLine1": "test_value",
"addressLine2": "test_value",
"city": "test_value",
"provinceCode": "javascript",
"postalCode": "javascript",
"countryCode": "javascript",
"currency": ""
},
"expect": "exists"
},
"list_accounts": {
"args": {
"businessId": "test-id-123",
"page": 50,
"pageSize": 50
},
"expect": "content && content.length > 0"
},
"list_transactions": {
"args": {
"businessId": "test-id-123",
"page": 50,
"pageSize": 50
},
"expect": "content && content.length > 0"
},
"create_expense": {
"args": {
"businessId": "test-id-123",
"externalId": "test-id-123",
"date": "test_value",
"description": "test_value",
"anchor": {},
"lineItems": []
},
"expect": "content && content.length > 0"
},
"create_expense:empty-externalId": {
"args": {
"businessId": "test-id-123",
"externalId": "",
"date": "test_value",
"description": "test_value",
"anchor": {},
"lineItems": []
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/wave/dist/index.js"
],
"env": {
"WAVE_API_TOKEN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,251 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/wrike/dist/index.js"
],
"env": {
"WRIKE_ACCESS_TOKEN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_tasks": {
"args": {
"folder_id": "test-id-123",
"status": "Active",
"limit": 50
},
"expect": "content && content.length > 0"
},
"list_tasks:empty-folder_id": {
"args": {
"folder_id": "",
"status": "Active",
"limit": 50
},
"expect": "exists"
},
"list_tasks:empty-status": {
"args": {
"folder_id": "test-id-123",
"status": "",
"limit": 50
},
"expect": "exists"
},
"get_task": {
"args": {
"task_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"create_task": {
"args": {
"folder_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "Active",
"importance": "High",
"start_date": "test_value",
"due_date": "test_value",
"responsibles": []
},
"expect": "content && content.length > 0"
},
"create_task:empty-description": {
"args": {
"folder_id": "test-id-123",
"title": "test_value",
"description": "",
"status": "Active",
"importance": "High",
"start_date": "test_value",
"due_date": "test_value",
"responsibles": []
},
"expect": "exists"
},
"create_task:empty-status": {
"args": {
"folder_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "",
"importance": "High",
"start_date": "test_value",
"due_date": "test_value",
"responsibles": []
},
"expect": "exists"
},
"create_task:empty-importance": {
"args": {
"folder_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "Active",
"importance": "",
"start_date": "test_value",
"due_date": "test_value",
"responsibles": []
},
"expect": "exists"
},
"create_task:empty-start_date": {
"args": {
"folder_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "Active",
"importance": "High",
"start_date": "",
"due_date": "test_value",
"responsibles": []
},
"expect": "exists"
},
"create_task:empty-due_date": {
"args": {
"folder_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "Active",
"importance": "High",
"start_date": "test_value",
"due_date": "",
"responsibles": []
},
"expect": "exists"
},
"update_task": {
"args": {
"task_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "Active",
"importance": "High",
"start_date": "test_value",
"due_date": "test_value",
"add_responsibles": [],
"remove_responsibles": []
},
"expect": "content && content.length > 0"
},
"update_task:empty-title": {
"args": {
"task_id": "test-id-123",
"title": "",
"description": "test_value",
"status": "Active",
"importance": "High",
"start_date": "test_value",
"due_date": "test_value",
"add_responsibles": [],
"remove_responsibles": []
},
"expect": "exists"
},
"update_task:empty-description": {
"args": {
"task_id": "test-id-123",
"title": "test_value",
"description": "",
"status": "Active",
"importance": "High",
"start_date": "test_value",
"due_date": "test_value",
"add_responsibles": [],
"remove_responsibles": []
},
"expect": "exists"
},
"update_task:empty-status": {
"args": {
"task_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "",
"importance": "High",
"start_date": "test_value",
"due_date": "test_value",
"add_responsibles": [],
"remove_responsibles": []
},
"expect": "exists"
},
"update_task:empty-importance": {
"args": {
"task_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "Active",
"importance": "",
"start_date": "test_value",
"due_date": "test_value",
"add_responsibles": [],
"remove_responsibles": []
},
"expect": "exists"
},
"update_task:empty-start_date": {
"args": {
"task_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "Active",
"importance": "High",
"start_date": "",
"due_date": "test_value",
"add_responsibles": [],
"remove_responsibles": []
},
"expect": "exists"
},
"update_task:empty-due_date": {
"args": {
"task_id": "test-id-123",
"title": "test_value",
"description": "test_value",
"status": "Active",
"importance": "High",
"start_date": "test_value",
"due_date": "",
"add_responsibles": [],
"remove_responsibles": []
},
"expect": "exists"
},
"list_folders": {
"args": {
"parent_folder_id": "test-id-123"
},
"expect": "content && content.length > 0"
},
"list_folders:empty-parent_folder_id": {
"args": {
"parent_folder_id": ""
},
"expect": "exists"
},
"list_projects": {
"args": {},
"expect": "content && content.length > 0"
},
"add_comment": {
"args": {
"task_id": "test-id-123",
"text": "Sample content for testing"
},
"expect": "content && content.length > 0"
},
"list_users": {
"args": {},
"expect": "content && content.length > 0"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,11 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/wrike/dist/index.js"
],
"env": {
"WRIKE_ACCESS_TOKEN": "factory_discovery_dummy"
}
}
}

View File

@ -0,0 +1,266 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/zendesk/dist/index.js"
],
"env": {
"ZENDESK_API_TOKEN": "factory_discovery_dummy",
"ZENDESK_EMAIL": "factory_discovery_dummy",
"ZENDESK_SUBDOMAIN": "factory_discovery_dummy"
}
},
"tests": {
"tools": {
"list_tickets": {
"args": {
"status": "new",
"sort_by": "test_value",
"sort_order": "asc",
"page": 50,
"per_page": 50
},
"expect": "content && content.length > 0"
},
"list_tickets:empty-status": {
"args": {
"status": "",
"sort_by": "test_value",
"sort_order": "asc",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"list_tickets:empty-sort_by": {
"args": {
"status": "new",
"sort_by": "",
"sort_order": "asc",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"list_tickets:empty-sort_order": {
"args": {
"status": "new",
"sort_by": "test_value",
"sort_order": "",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"get_ticket": {
"args": {
"ticket_id": 50
},
"expect": "content && content.length > 0"
},
"create_ticket": {
"args": {
"subject": "test_value",
"description": "test_value",
"requester_email": "test@example.com",
"requester_name": "Test Name",
"priority": "urgent",
"type": "problem",
"tags": [],
"assignee_id": 50,
"group_id": 50
},
"expect": "content && content.length > 0"
},
"create_ticket:empty-requester_email": {
"args": {
"subject": "test_value",
"description": "test_value",
"requester_email": "",
"requester_name": "Test Name",
"priority": "urgent",
"type": "problem",
"tags": [],
"assignee_id": 50,
"group_id": 50
},
"expect": "exists"
},
"create_ticket:empty-requester_name": {
"args": {
"subject": "test_value",
"description": "test_value",
"requester_email": "test@example.com",
"requester_name": "",
"priority": "urgent",
"type": "problem",
"tags": [],
"assignee_id": 50,
"group_id": 50
},
"expect": "exists"
},
"create_ticket:empty-priority": {
"args": {
"subject": "test_value",
"description": "test_value",
"requester_email": "test@example.com",
"requester_name": "Test Name",
"priority": "",
"type": "problem",
"tags": [],
"assignee_id": 50,
"group_id": 50
},
"expect": "exists"
},
"create_ticket:empty-type": {
"args": {
"subject": "test_value",
"description": "test_value",
"requester_email": "test@example.com",
"requester_name": "Test Name",
"priority": "urgent",
"type": "",
"tags": [],
"assignee_id": 50,
"group_id": 50
},
"expect": "exists"
},
"update_ticket": {
"args": {
"ticket_id": 50,
"status": "new",
"priority": "urgent",
"type": "problem",
"subject": "test_value",
"assignee_id": 50,
"group_id": 50,
"tags": [],
"additional_tags": [],
"remove_tags": []
},
"expect": "content && content.length > 0"
},
"update_ticket:empty-status": {
"args": {
"ticket_id": 50,
"status": "",
"priority": "urgent",
"type": "problem",
"subject": "test_value",
"assignee_id": 50,
"group_id": 50,
"tags": [],
"additional_tags": [],
"remove_tags": []
},
"expect": "exists"
},
"update_ticket:empty-priority": {
"args": {
"ticket_id": 50,
"status": "new",
"priority": "",
"type": "problem",
"subject": "test_value",
"assignee_id": 50,
"group_id": 50,
"tags": [],
"additional_tags": [],
"remove_tags": []
},
"expect": "exists"
},
"update_ticket:empty-type": {
"args": {
"ticket_id": 50,
"status": "new",
"priority": "urgent",
"type": "",
"subject": "test_value",
"assignee_id": 50,
"group_id": 50,
"tags": [],
"additional_tags": [],
"remove_tags": []
},
"expect": "exists"
},
"update_ticket:empty-subject": {
"args": {
"ticket_id": 50,
"status": "new",
"priority": "urgent",
"type": "problem",
"subject": "",
"assignee_id": 50,
"group_id": 50,
"tags": [],
"additional_tags": [],
"remove_tags": []
},
"expect": "exists"
},
"add_comment": {
"args": {
"ticket_id": 50,
"body": "test_value",
"public": true,
"author_id": 50
},
"expect": "content && content.length > 0"
},
"list_users": {
"args": {
"role": "end-user",
"page": 50,
"per_page": 50
},
"expect": "content && content.length > 0"
},
"list_users:empty-role": {
"args": {
"role": "",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"search_tickets": {
"args": {
"query": "test query",
"sort_by": "test_value",
"sort_order": "asc",
"page": 50,
"per_page": 50
},
"expect": "content && content.length > 0"
},
"search_tickets:empty-sort_by": {
"args": {
"query": "test query",
"sort_by": "",
"sort_order": "asc",
"page": 50,
"per_page": 50
},
"expect": "exists"
},
"search_tickets:empty-sort_order": {
"args": {
"query": "test query",
"sort_by": "test_value",
"sort_order": "",
"page": 50,
"per_page": 50
},
"expect": "exists"
}
},
"resources": {},
"prompts": {},
"timeout": 30000
}
}

View File

@ -0,0 +1,13 @@
{
"server": {
"command": "node",
"args": [
"/Users/jakeshore/.clawdbot/workspace/mcp-diagrams/mcp-servers/zendesk/dist/index.js"
],
"env": {
"ZENDESK_API_TOKEN": "factory_discovery_dummy",
"ZENDESK_EMAIL": "factory_discovery_dummy",
"ZENDESK_SUBDOMAIN": "factory_discovery_dummy"
}
}
}

1
manim-mcp Submodule

@ -0,0 +1 @@
Subproject commit 983d5a0ef49de31147b29375909d7887854f65e0

View File

@ -0,0 +1,118 @@
# MCP Pipeline Operator — Buba's Playbook
## Role
I (Buba) am the autonomous pipeline operator for all MCP server development. I read and write `state.json` as the source of truth, post to Discord channels for decisions and updates, and do the actual work of advancing MCPs through the 25-stage lifecycle.
## State File
- **Path:** `/Users/jakeshore/.clawdbot/workspace/mcp-command-center/state.json`
- **Dashboard:** `/Users/jakeshore/.clawdbot/workspace/mcp-command-center/index.html`
- Read state.json to know where every MCP is
- Write state.json after advancing any card
- The dashboard reads state.json for display
## Discord Channel Map
| Channel | ID | Purpose |
|---------|-----|---------|
| #pipeline-decisions | 1468757982140567676 | Go/no-go, architecture, publishing approvals |
| #design-reviews | 1468757983428083762 | Mockup + screenshot approval (Stage 7) |
| #pipeline-standup | 1468757984384389234 | Daily standup post |
| #build-log | 1468757986422820864 | Every card movement, build result |
| #blockers | 1468757987412938945 | Stuck MCPs, escalations |
| #mcp-strategy | 1468757988448669829 | Strategy discussions |
| #shipped | 1468757989497507870 | Production launches, wins |
## Autonomy Rules
### Auto-Advance (no approval needed)
Stages: 1→2, 2→3, 3→4 (if research looks good), 5→6, 6→7, 8→9, 9→10, 10→11, 11→12, 12→13, 13→14
For each: do the work, update state.json, post to #build-log.
### Human-in-the-Loop (must get Jake's approval)
| Stage | Decision | Channel | Reaction Format |
|-------|----------|---------|----------------|
| 4 (Architecture) | Tool list + app plan approval | #pipeline-decisions | ✅ approve / ❌ rethink / 💬 discuss |
| 7a (Design Mockups) | Nano Banana Pro mockup approval | #design-reviews | ✅ build it / ✏️ changes / ❌ scrap |
| 7c (Final Screenshots) | Built app screenshot approval | #design-reviews | ✅ ship it / ✏️ tweaks / 🔄 rebuild |
| 15 (GitHub Publish) | Publishing approval | #pipeline-decisions | ✅ publish / ❌ hold |
| 16 (Registry Listed) | Registry listing approval | #pipeline-decisions | ✅ list it / ❌ hold |
| 22-24 (Monetization) | Pricing/enterprise decisions | #pipeline-decisions | ✅ / ❌ / 💬 |
### Stage 7 Special Flow (Two-Gate Visual Approval)
```
7a: Generate mockup with Nano Banana Pro → post to #design-reviews → wait for ✅
7b: Build the app (autonomous after mockup approved)
7c: Screenshot real app → post to #design-reviews with mockup comparison → wait for ✅
Only then advance to Stage 8
```
### Blocker Protocol
1. Hit a problem → try to fix it (up to 2 attempts)
2. If still stuck → flag as blocked in state.json
3. Post to #blockers with details
4. Ping Jake if critical
## Daily Standup Format
Post to #pipeline-standup at 9:00 AM ET:
```
**MCP PIPELINE STANDUP — [Date]**
**Overnight Progress:**
• [MCP Name]: Stage X → Stage Y (reason)
• [MCP Name]: BLOCKED — [issue]
**Pipeline Stats:**
• Total: X | Build: X | Testing: X | Docs: X | Shipped: X | Blocked: X
• Velocity: X stage advances in last 7 days
**Decisions Waiting:**
• [MCP Name] — [what decision] (posted [when])
**Today's Plan:**
• [what I'll work on]
```
## Build Log Format
Post to #build-log on every card movement:
```
[HH:MM] **[MCP Name]** Stage X → Stage Y
> [brief description of what was done]
```
## Decision Request Format
Post to #pipeline-decisions:
```
**DECISION NEEDED**
**MCP:** [Name]
**Stage:** [Current] → [Proposed next]
**Context:** [What I found / built / recommend]
**Recommendation:** [My take]
React: ✅ approve | ❌ reject | 💬 discuss
```
## Design Review Format
Post to #design-reviews:
```
**[MOCKUP/SCREENSHOT] REVIEW — [MCP Name]**
**App [X/Y]:** [App Name]
[Image]
**Layout:** [description]
**Components:** [list]
**Interactivity:** [what's interactive]
React: ✅ approve | ✏️ changes needed | ❌ scrap
```
## Heartbeat Check (Cron)
Every 60 minutes:
1. Read state.json
2. For each MCP not blocked:
- Can it auto-advance? → Do the work
- Waiting for decision? → Check if Jake reacted (re-ping if >24h)
- In a work stage? → Continue/start the work
3. Write updated state.json
4. Post any movements to #build-log

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,121 @@
{
"version": 1,
"lastUpdated": "2026-02-05T01:00:00Z",
"updatedBy": "buba-heartbeat",
"phases": [
{ "id": 1, "name": "Discovery & Research", "color": "#3B82F6", "stages": [1,2,3,4] },
{ "id": 2, "name": "Build", "color": "#8B5CF6", "stages": [5,6,7,8] },
{ "id": 3, "name": "Testing & Hardening", "color": "#F59E0B", "stages": [9,10,11,12] },
{ "id": 4, "name": "Documentation & Packaging", "color": "#14B8A6", "stages": [13,14,15] },
{ "id": 5, "name": "Launch & Distribution", "color": "#F43F5E", "stages": [16,17,18] },
{ "id": 6, "name": "Adoption & Feedback", "color": "#10B981", "stages": [19,20,21] },
{ "id": 7, "name": "Monetization & Scale", "color": "#EAB308", "stages": [22,23,24,25] }
],
"stages": [
{ "id": 1, "name": "Identified", "phase": 1 },
{ "id": 2, "name": "Market Research", "phase": 1 },
{ "id": 3, "name": "API Research", "phase": 1 },
{ "id": 4, "name": "Architecture Designed", "phase": 1 },
{ "id": 5, "name": "Server Scaffolded", "phase": 2 },
{ "id": 6, "name": "Core Tools Built", "phase": 2 },
{ "id": 7, "name": "UI Apps Built", "phase": 2, "gates": ["design-mockup-approval", "final-screenshot-approval"] },
{ "id": 8, "name": "Integration Complete", "phase": 2 },
{ "id": 9, "name": "Local Testing", "phase": 3 },
{ "id": 10, "name": "Edge Case Testing", "phase": 3 },
{ "id": 11, "name": "Host Compatibility Testing", "phase": 3 },
{ "id": 12, "name": "Performance Validated", "phase": 3 },
{ "id": 13, "name": "README Written", "phase": 4 },
{ "id": 14, "name": "Package Prepared", "phase": 4 },
{ "id": 15, "name": "GitHub Repo Published", "phase": 4 },
{ "id": 16, "name": "Registry Listed", "phase": 5 },
{ "id": 17, "name": "Launch Marketing", "phase": 5 },
{ "id": 18, "name": "Content Marketing", "phase": 5 },
{ "id": 19, "name": "Early Adopter Feedback", "phase": 6 },
{ "id": 20, "name": "Iteration Cycle", "phase": 6 },
{ "id": 21, "name": "Community Building", "phase": 6 },
{ "id": 22, "name": "Freemium/Pro Strategy", "phase": 7 },
{ "id": 23, "name": "Enterprise Outreach", "phase": 7 },
{ "id": 24, "name": "Enterprise Deals", "phase": 7 },
{ "id": 25, "name": "Raving Fans", "phase": 7 }
],
"mcps": [
{ "id": "closebot", "name": "CloseBot MCP", "type": "BIG4", "stage": 8, "tools": 119, "apps": 6, "modules": 14, "blocked": false, "blockerNote": "", "notes": "119 tools, 14 modules, 6 UI apps. Compile clean.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "meta-ads", "name": "Meta Ads MCP", "type": "BIG4", "stage": 8, "tools": 55, "apps": 11, "blocked": false, "blockerNote": "", "notes": "~55 tools, 11 categories, 11 UI apps. Compile clean.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "google-console", "name": "Google Console MCP", "type": "BIG4", "stage": 8, "tools": 22, "apps": 5, "blocked": false, "blockerNote": "", "notes": "22 tools, 5 UI apps. Compile clean.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "twilio", "name": "Twilio MCP", "type": "BIG4", "stage": 8, "tools": 54, "apps": 19, "blocked": false, "blockerNote": "", "notes": "54 tools, 19 UI apps. Integrated into LocalBosses.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "ghl", "name": "GoHighLevel MCP", "type": "GHL", "stage": 8, "tools": 240, "apps": 65, "blocked": false, "blockerNote": "", "notes": "65 apps, ~240 tools. 3 review rounds. All builds passing.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "acuity-scheduling", "name": "Acuity Scheduling", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "bamboohr", "name": "BambooHR", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "basecamp", "name": "Basecamp", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "bigcommerce", "name": "BigCommerce", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "brevo", "name": "Brevo", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "calendly", "name": "Calendly", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "clickup", "name": "ClickUp", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "close", "name": "Close", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "clover", "name": "Clover", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "constant-contact", "name": "Constant Contact", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "fieldedge", "name": "FieldEdge", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "freshbooks", "name": "FreshBooks", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "freshdesk", "name": "FreshDesk", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "gusto", "name": "Gusto", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "helpscout", "name": "HelpScout", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "housecall-pro", "name": "Housecall Pro", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "jobber", "name": "Jobber", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "keap", "name": "Keap", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "lightspeed", "name": "Lightspeed", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "mailchimp", "name": "Mailchimp", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "pipedrive", "name": "Pipedrive", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "rippling", "name": "Rippling", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "servicetitan", "name": "ServiceTitan", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "squarespace", "name": "Squarespace", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "toast", "name": "Toast", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "touchbistro", "name": "TouchBistro", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "trello", "name": "Trello", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "wave", "name": "Wave", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "wrike", "name": "Wrike", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] },
{ "id": "zendesk", "name": "Zendesk", "type": "STD", "stage": 8, "tools": null, "apps": null, "blocked": false, "blockerNote": "", "notes": "Compiled clean. Not tested against live API.", "stageHistory": [{"stage": 8, "entered": "2026-02-03T00:00:00Z"}] }
],
"decisions": {
"pending": [
{
"id": "dec-001",
"type": "pipeline-wide",
"stage": "8→9",
"question": "Testing strategy: structural-only vs live API vs hybrid",
"options": {
"A": "Structural test harness → advance to Stage 9",
"B": "Hold at Stage 8 until API keys provided",
"C": "Hybrid — structural → Stage 9, live API gates Stage 10"
},
"recommendation": "C",
"discordMessageId": "1468773655801757849",
"channel": "pipeline-decisions",
"posted": "2026-02-05T01:00:00Z",
"status": "awaiting-reaction"
}
],
"history": []
},
"discord": {
"guildId": "1458233582404501547",
"categoryId": "1468757930940698675",
"channels": {
"pipeline-decisions": "1468757982140567676",
"design-reviews": "1468757983428083762",
"pipeline-standup": "1468757984384389234",
"build-log": "1468757986422820864",
"blockers": "1468757987412938945",
"mcp-strategy": "1468757988448669829",
"shipped": "1468757989497507870"
}
},
"config": {
"heartbeatIntervalMinutes": 60,
"maxAutoRetries": 2,
"humanApprovalRequired": [4, 7, 15, 16, 22, 23, 24],
"designApprovalRequired": [7],
"autoAdvanceStages": [1, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14],
"standupTime": "09:00",
"standupTimezone": "America/New_York"
}
}

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -261,6 +263,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -299,6 +301,12 @@ async function main() {
// Handle tool calls // Handle tool calls
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -290,6 +292,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -391,6 +393,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});
return { return {

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -370,6 +372,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -248,6 +250,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -481,6 +483,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -453,6 +455,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -326,6 +328,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -384,6 +386,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -368,6 +370,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -421,6 +423,12 @@ async function main() {
// Handle tool calls // Handle tool calls
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -369,6 +371,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -255,6 +257,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -310,6 +312,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -362,6 +364,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -493,6 +495,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -407,6 +409,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -307,6 +309,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});
return { return {

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
import { createHash } from "crypto"; import { createHash } from "crypto";
@ -353,6 +355,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -304,6 +306,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

View File

@ -4,6 +4,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { import {
CallToolRequestSchema, CallToolRequestSchema,
ListToolsRequestSchema, ListToolsRequestSchema,
McpError,
ErrorCode,
} from "@modelcontextprotocol/sdk/types.js"; } from "@modelcontextprotocol/sdk/types.js";
// ============================================ // ============================================
@ -330,6 +332,12 @@ async function main() {
server.setRequestHandler(CallToolRequestSchema, async (request) => { server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params; const { name, arguments: args } = request.params;
// Validate tool exists (MCP spec requires proper error for unknown tools)
const knownTools = tools.map(t => t.name);
if (!knownTools.includes(name)) {
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
try { try {
const result = await handleTool(client, name, args || {}); const result = await handleTool(client, name, args || {});

Some files were not shown because too many files have changed in this diff Show More