Close CRM MCP Pack — wraps the Close (close.com) API v1.
Close CRM MCP Pack demonstrates solid fundamentals: all 6 tools have clear verb-noun naming (close_me, close_search_leads, close_get_lead, close_list_opportunities, close_list_contacts, close_list_activities), comprehensive descriptions (avg ~180 chars, within 10-1024 baseline), and complete input schemas with type definitions and parameter descriptions. All tools are READ_ONLY, reducing security risk. Pagination support (limit/skip) is present on list tools. However, output schemas are not documented, LLMs cannot predict response structure for planning. Error handling is minimal (generic 'Close: {status} {body}' messages lack recovery guidance). No enum constraints on query parameters. API key handling via _apiKey parameter violates secret-injection pattern (should use server-side injection). Missing tool annotations (readOnlyHint, idempotentHint). Per-tool avg: 72/100.
Get a single lead by its Close lead ID (format `lead_...`). Returns full detail: display name, description, status, contacts, addresses, opportunities, custom fields, and timestamps.
List activities for a lead — calls, emails, notes, SMS, meetings, and status changes. Returns a `data` array (with id, _type, type, date_created, and type-specific fields) plus `has_more` / `total_results`. Requires `lead_id`. Page with `_limit` / `_skip` to walk a lead's timeline.
List contacts (people) in Close. Returns a `data` array of contacts with id, lead_id, name, title, emails, and phones, plus `has_more` / `total_results`. Optionally filter to one lead with `lead_id`. Page with `_limit` / `_skip`.
List opportunities (pipeline deals) in Close. Returns a `data` array of opportunities with id, lead_id, status, value, currency, confidence, and expected close date, plus `has_more` / `total_results`. Pass `lead_id` to scope to one lead, or omit to list across the organization. Page with `_limit` / `_skip`.
Get the current Close user and organization for the supplied API key. Returns user ID, name, email, and the organizations (with IDs) the key can access. Use this to verify the key works and discover your organization context.
API key exposed as tool parameter (_apiKey). Violates secret-injection pattern, credentials in parameters leak into logs and prompt history.
Output schemas not documented. LLMs cannot predict response structure (e.g., 'data' array, 'has_more', 'total_results' fields) for downstream planning and field extraction.
Error handling is generic ('Close: {status} {body}') with no recovery guidance. LLMs cannot determine if errors are retryable, user-fixable, or fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Search or list leads (companies/accounts in Close) using Close's query language. Returns a `data` array of leads (with id, display_name, contacts, status, custom fields) plus `has_more` and `total_results`. The `query` param accepts Close search syntax, e.g. `name:"Acme"`, `status_label:"Potential"`, `email_address:@example.com`, `lead_created_within:7d`, or free text. Omit `query` to list all leads. Page with `_limit` (max 200) and `_skip`.
No tool annotations (readOnlyHint, idempotentHint). All tools are read-only but this is not declared in schema, forcing LLMs to infer safety from descriptions.
Query parameter in close_search_leads accepts free-form strings with no enum or format constraint. LLMs may hallucinate invalid Close query syntax (e.g., 'name:Acme' vs 'name:"Acme"').