A model-agnostic, Claude-Code-native SDR orchestrator (research → enrich → outreach). Local-only, BYO keys, zero Google dependency.
Intent Outreach demonstrates solid foundational tool design with clear naming, explicit schema definitions, and production-oriented descriptions. All four tools follow verb_noun conventions (list_, research_, enrich_, save_), have non-empty descriptions (119-252 chars, within the 10-1024 baseline), and define input schemas using Zod. However, there are meaningful gaps: output schemas are entirely undocumented (the tools return text-wrapped JSON with no formal specification of response structure), parameter descriptions are sparse (several parameters lack clarification of format/constraints), and error handling guidance is minimal. The save_run tool includes validation but provides no recovery path examples. Overall, this is a B-/C+ implementation, better than average community tools, but below production-grade standards for a data orchestration system.
Run every CONFIGURED enrich connector (in deterministic order) against a lead and its contacts; returns enrichments (funding, verified emails, phones, web context).
List every registered connector with its tier (free/paid/enterprise/legacy), the phases it serves, and whether it is currently configured (has its key).
Run every CONFIGURED research connector (in deterministic order) against a company domain and return aggregated, de-duplicated leads + contacts. Connectors without a key are skipped silently.
Validate an assembled campaign run and append it to the LOCAL run store (JSONL under the user's home, never the cloud). This is the gate: the run is checked against the schema before it is persisted — un-validated model output is rejected here, not stored. Returns the saved run id + path, or a validation error describing what to fix.
Output schemas completely undocumented. All four tools return text-wrapped JSON (asText() wrapper) with no formal specification of response structure, field names, or types. LLMs cannot reliably parse responses or plan downstream operations.
enrich_lead and research_domain lack constraint documentation for string parameters. 'domain' parameter accepts any string but should clarify format (e.g. 'example.com, no protocol') and valid character set. 'icp' parameter has no guidance on expected format or length.
save_run validation error response lacks recovery guidance. When ValidationError is thrown, the response states what failed but does not suggest which parameter to fix first or provide examples of valid structures. Per pattern:recovery-guide, errors should guide next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
list_connectors returns an array with no pagination or limit. If connectors grow beyond ~50, response token count balloons unnecessarily. Baseline expects paginated results with total count.
save_run description mentions 'validation error describing what to fix' but actual error handling (catch ValidationError block) is truncated in source excerpt. Cannot verify error message quality or actionability without full error implementation.