Daily backup: 2026-02-04
This commit is contained in:
parent
ddfa0956fe
commit
a2c95437c1
114
HEARTBEAT.md
114
HEARTBEAT.md
@ -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
572
MCP-FACTORY.md
Normal 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
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
105
factory-tools/README.md
Normal 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"
|
||||||
|
```
|
||||||
1
factory-tools/mcp-inspector
Submodule
1
factory-tools/mcp-inspector
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit dd027374636888a830bc22f389ccabcfc7fa7af2
|
||||||
1
factory-tools/mcp-validator
Submodule
1
factory-tools/mcp-validator
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit bb099ddc3b9d9564e13d138d5378705657566706
|
||||||
16
factory-tools/package.json
Normal file
16
factory-tools/package.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
194
factory-tools/reports/compliance-2026-02-05.json
Normal file
194
factory-tools/reports/compliance-2026-02-05.json
Normal 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": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
37
factory-tools/reports/compliance-2026-02-05.md
Normal file
37
factory-tools/reports/compliance-2026-02-05.md
Normal 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 |
|
||||||
126
factory-tools/reports/discovery-2026-02-05.json
Normal file
126
factory-tools/reports/discovery-2026-02-05.json
Normal 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
|
||||||
|
}
|
||||||
107
factory-tools/scripts/discover-all.mjs
Normal file
107
factory-tools/scripts/discover-all.mjs
Normal 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}`);
|
||||||
125
factory-tools/scripts/fix-unknown-tool-error.mjs
Normal file
125
factory-tools/scripts/fix-unknown-tool-error.mjs
Normal 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}`);
|
||||||
127
factory-tools/scripts/validate-all.mjs
Normal file
127
factory-tools/scripts/validate-all.mjs
Normal 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}`);
|
||||||
35
factory-tools/server-registry.json
Normal file
35
factory-tools/server-registry.json
Normal 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"] }
|
||||||
|
}
|
||||||
|
}
|
||||||
174
factory-tools/test-configs/acuity-scheduling-tests.json
Normal file
174
factory-tools/test-configs/acuity-scheduling-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
factory-tools/test-configs/acuity-scheduling.json
Normal file
12
factory-tools/test-configs/acuity-scheduling.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
113
factory-tools/test-configs/bamboohr-tests.json
Normal file
113
factory-tools/test-configs/bamboohr-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
factory-tools/test-configs/bamboohr.json
Normal file
12
factory-tools/test-configs/bamboohr.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
150
factory-tools/test-configs/basecamp-tests.json
Normal file
150
factory-tools/test-configs/basecamp-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
13
factory-tools/test-configs/basecamp.json
Normal file
13
factory-tools/test-configs/basecamp.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
462
factory-tools/test-configs/bigcommerce-tests.json
Normal file
462
factory-tools/test-configs/bigcommerce-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
factory-tools/test-configs/bigcommerce.json
Normal file
12
factory-tools/test-configs/bigcommerce.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
318
factory-tools/test-configs/brevo-tests.json
Normal file
318
factory-tools/test-configs/brevo-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/brevo.json
Normal file
11
factory-tools/test-configs/brevo.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
143
factory-tools/test-configs/calendly-tests.json
Normal file
143
factory-tools/test-configs/calendly-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/calendly.json
Normal file
11
factory-tools/test-configs/calendly.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
300
factory-tools/test-configs/clickup-tests.json
Normal file
300
factory-tools/test-configs/clickup-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/clickup.json
Normal file
11
factory-tools/test-configs/clickup.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
554
factory-tools/test-configs/close-tests.json
Normal file
554
factory-tools/test-configs/close-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/close.json
Normal file
11
factory-tools/test-configs/close.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
217
factory-tools/test-configs/clover-tests.json
Normal file
217
factory-tools/test-configs/clover-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
14
factory-tools/test-configs/clover.json
Normal file
14
factory-tools/test-configs/clover.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
367
factory-tools/test-configs/constant-contact-tests.json
Normal file
367
factory-tools/test-configs/constant-contact-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/constant-contact.json
Normal file
11
factory-tools/test-configs/constant-contact.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
370
factory-tools/test-configs/fieldedge-tests.json
Normal file
370
factory-tools/test-configs/fieldedge-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
factory-tools/test-configs/fieldedge.json
Normal file
12
factory-tools/test-configs/fieldedge.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
358
factory-tools/test-configs/freshbooks-tests.json
Normal file
358
factory-tools/test-configs/freshbooks-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
factory-tools/test-configs/freshbooks.json
Normal file
12
factory-tools/test-configs/freshbooks.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
315
factory-tools/test-configs/freshdesk-tests.json
Normal file
315
factory-tools/test-configs/freshdesk-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
factory-tools/test-configs/freshdesk.json
Normal file
12
factory-tools/test-configs/freshdesk.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
86
factory-tools/test-configs/gusto-tests.json
Normal file
86
factory-tools/test-configs/gusto-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/gusto.json
Normal file
11
factory-tools/test-configs/gusto.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
287
factory-tools/test-configs/helpscout-tests.json
Normal file
287
factory-tools/test-configs/helpscout-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/helpscout.json
Normal file
11
factory-tools/test-configs/helpscout.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
227
factory-tools/test-configs/housecall-pro-tests.json
Normal file
227
factory-tools/test-configs/housecall-pro-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/housecall-pro.json
Normal file
11
factory-tools/test-configs/housecall-pro.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
272
factory-tools/test-configs/jobber-tests.json
Normal file
272
factory-tools/test-configs/jobber-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/jobber.json
Normal file
11
factory-tools/test-configs/jobber.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
444
factory-tools/test-configs/keap-tests.json
Normal file
444
factory-tools/test-configs/keap-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/keap.json
Normal file
11
factory-tools/test-configs/keap.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
377
factory-tools/test-configs/lightspeed-tests.json
Normal file
377
factory-tools/test-configs/lightspeed-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
factory-tools/test-configs/lightspeed.json
Normal file
12
factory-tools/test-configs/lightspeed.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
156
factory-tools/test-configs/mailchimp-tests.json
Normal file
156
factory-tools/test-configs/mailchimp-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/mailchimp.json
Normal file
11
factory-tools/test-configs/mailchimp.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
470
factory-tools/test-configs/pipedrive-tests.json
Normal file
470
factory-tools/test-configs/pipedrive-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/pipedrive.json
Normal file
11
factory-tools/test-configs/pipedrive.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
179
factory-tools/test-configs/rippling-tests.json
Normal file
179
factory-tools/test-configs/rippling-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/rippling.json
Normal file
11
factory-tools/test-configs/rippling.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
288
factory-tools/test-configs/servicetitan-tests.json
Normal file
288
factory-tools/test-configs/servicetitan-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
13
factory-tools/test-configs/servicetitan.json
Normal file
13
factory-tools/test-configs/servicetitan.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
159
factory-tools/test-configs/squarespace-tests.json
Normal file
159
factory-tools/test-configs/squarespace-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/squarespace.json
Normal file
11
factory-tools/test-configs/squarespace.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
188
factory-tools/test-configs/toast-tests.json
Normal file
188
factory-tools/test-configs/toast-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
13
factory-tools/test-configs/toast.json
Normal file
13
factory-tools/test-configs/toast.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
250
factory-tools/test-configs/touchbistro-tests.json
Normal file
250
factory-tools/test-configs/touchbistro-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
factory-tools/test-configs/touchbistro.json
Normal file
12
factory-tools/test-configs/touchbistro.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
346
factory-tools/test-configs/trello-tests.json
Normal file
346
factory-tools/test-configs/trello-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
factory-tools/test-configs/trello.json
Normal file
12
factory-tools/test-configs/trello.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
336
factory-tools/test-configs/wave-tests.json
Normal file
336
factory-tools/test-configs/wave-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/wave.json
Normal file
11
factory-tools/test-configs/wave.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
251
factory-tools/test-configs/wrike-tests.json
Normal file
251
factory-tools/test-configs/wrike-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
factory-tools/test-configs/wrike.json
Normal file
11
factory-tools/test-configs/wrike.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
266
factory-tools/test-configs/zendesk-tests.json
Normal file
266
factory-tools/test-configs/zendesk-tests.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
13
factory-tools/test-configs/zendesk.json
Normal file
13
factory-tools/test-configs/zendesk.json
Normal 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
1
manim-mcp
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 983d5a0ef49de31147b29375909d7887854f65e0
|
||||||
118
mcp-command-center/PIPELINE-OPERATOR.md
Normal file
118
mcp-command-center/PIPELINE-OPERATOR.md
Normal 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
|
||||||
1350
mcp-command-center/index.html
Normal file
1350
mcp-command-center/index.html
Normal file
File diff suppressed because it is too large
Load Diff
121
mcp-command-center/state.json
Normal file
121
mcp-command-center/state.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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 || {});
|
||||||
|
|||||||
@ -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
Loading…
x
Reference in New Issue
Block a user