# ai.plyto/crm

AI that makes and runs your Google and Facebook ads from your own account, with a CRM behind it.

- **Type:** MCP server
- **Trust:** 60/100 (B), scored on the content rubric
- **Verification:** community-indexed — nobody has claimed this listing
- **Version:** 1.1.0
- **Author:** ai.plyto
- **License:** Unknown
- **Endpoints:** streamable-http https://plyto.ai/api/mcp
- **Source:** https://plyto.ai/developers
- **Endpoint health:** reachable (last checked 2026-09-18T11:50:06.612Z, 4 samples) — uptime is not a security property and is not part of the trust score
- **Compatible clients:** claude-code, cursor, copilot, chatgpt, gemini (basis: transport)

## Trust

60/100 (B), scored on the content rubric
- Publisher verified: no
- Install scripts: nothing suspicious found
- Prompt-injection scan: clean
- Obfuscation scan: clean
- Evidence age: 0 days

## Security scan

- **Status:** clean
- **Scanned:** 2026-09-18T11:50:06.612Z
- **Version scanned:** live
- **CVEs:** no coverage — this entry has no package coordinates to query OSV against, so "no known CVEs" is NOT asserted for it.
**Findings**
- injection-shaped content (note) in the `business__update` tool: Links to undeclared domain: 
- injection-shaped content (note) in the `email__signature__set` tool: Links to undeclared domain: url

## Tools

172 declared. Observed from a live `tools/list` probe.
- `memory__save` — Save (or update) a durable memory: a standing preference, playbook rule, correction, or business fact that should hold across ALL future conversations. Use when
- `memory__list` — List every durable memory you hold for this business (business-wide plus the current user's personal ones), with ids and when each was last confirmed. Use befor
- `memory__forget` — Permanently delete a saved memory. Destructive: confirm with the user first unless they just explicitly asked you to forget exactly this. Users can also remove 
- `business__update` — Save what you learn about the business the moment the owner says it: real name, website, industry, who their customers are, what sets them apart, the phone to s
- `crm__contacts__create` — Create a contact (or find-and-update if one with the same email already exists in this business). Returns the created/updated contact. Use when the user mention
- `crm__contacts__update` — Update fields on an existing contact. Only pass fields you want to change. No-op fields are silently skipped.
- `crm__contacts__get` — Fetch a single contact by id, with where they came from: the ad campaign and search keyword that brought them (when an ad did), where they were and on what devi
- `crm__contacts__list` — List contacts in this business with simple filters. For free-text search use crm.contacts.search. For complex filters use crm.contacts.query (W3).
- `crm__contacts__search` — Free-text search across contact email, first/last name, and phone. Case-insensitive substring match. Returns up to 20 contacts by default.
- `crm__contacts__get_properties` — Return all custom property values for a contact as a {key: value} map.
- `crm__companies__create` — Create a company (or find-and-update if one with the same domain already exists). Domain is the natural dedup key; always pass the bare domain like 'acme.com' (
- `crm__companies__update` — Update fields on an existing company. Only pass fields you want to change.
- `crm__companies__get` — Fetch a single company by id. Returns null if not found.
- `crm__companies__list` — List companies in this business. For text search use crm.companies.search.
- `crm__companies__search` — Free-text search across company name, domain, and industry. Case-insensitive substring match.
- `crm__companies__get_properties` — Return all custom property values for a company as a {key: value} map.
- `crm__tags__create` — Create a new tag (or find one with the same name; idempotent). Tags are lightweight orthogonal categories like 'VIP', 'Newsletter-only', 'Cold'.
- `crm__tags__list` — List all tags defined in this business.
- `crm__tags__add_to_contact` — Apply a tag to a contact. Idempotent: adding an already-applied tag is a no-op.
- `crm__tags__remove_from_contact` — Remove a tag from a contact. Idempotent.
- `crm__tags__list_for_contact` — List all tags applied to a contact.
- `crm__tags__add_to_company` — Apply a tag to a company. Idempotent.
- `crm__tags__remove_from_company` — Remove a tag from a company. Idempotent.
- `crm__tags__list_for_company` — List all tags applied to a company.
- `crm__properties__define` — Define a new custom property on contact or company. Keys must be lowercase snake_case (e.g. 'plan_tier'). For single_select / multi_select, options is required.
- `crm__properties__list` — List custom property definitions for an entity type. Excludes archived by default.
- `crm__properties__archive` — Archive a custom property. Existing values are preserved but the property is hidden from UI and rejected for new value sets. To 'rename', archive + redefine.
- `crm__properties__set_contact_value` — Set the value of a custom property on a contact. Value type must match property type. For multi_select pass an array of option values.
- `crm__properties__set_company_value` — Set the value of a custom property on a company.
- `crm__properties__set_deal_value` — Set the value of a custom property on a deal.
- `crm__properties__clear_contact_value` — Remove a custom property value from a contact.
- `crm__properties__clear_company_value` — Remove a custom property value from a company.
- `crm__properties__clear_deal_value` — Remove a custom property value from a deal.
- `crm__properties__get_deal_values` — Return all custom property values for a deal as a {key: value} map.
- `crm__pipelines__list` — List all pipelines in this business (excludes archived by default).
- `crm__pipelines__list_stages` — List the ordered stages in a pipeline. Use to look up stageIds for crm.deals.move_stage.
- `crm__pipelines__get_default` — Get the default pipeline for this business (the one new deals land in by default). Returns null if no default is set.
- `crm__deals__create` — Create a deal in a pipeline. If pipelineId/stageId omitted, lands in the business's default pipeline at the first open stage. Attach to a contact and/or company
- `crm__deals__update` — Update fields on a deal. Use crm.deals.move_stage to change stage (it handles close events). Use crm.deals.close_won / close_lost for the won/lost transitions.
- `crm__deals__move_stage` — Move a deal to a different stage in the same pipeline. If the target stage is a won/lost stage, this auto-sets closedAt and emits the appropriate close event.
- …and 132 more

## Install

**Verdict: review** — Installable, but 2 things to check first: No CVE coverage: this entry has no npm/PyPI coordinates to query OSV against, so "no known vulnerabilities" is not a claim that can be made about it.
**Cautions** (coverage gaps and advisories — never blocking)
- No CVE coverage: this entry has no npm/PyPI coordinates to query OSV against, so "no known vulnerabilities" is not a claim that can be made about it.
- No publisher has proved control of this listing; it is indexed, not vouched for.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"crm\": {\n      \"type\": \"http\",\n      \"url\": \"https://plyto.ai/api/mcp\"\n    }\n  }\n}"
```

## Blast radius

Extensive to critical — no credential declaration found, from the publisher, the upstream registry, or the README. Known so far: deletes data; 11 privileged tools.
- Floor 38, ceiling 62 (tier: unknown)
- `unknown` means the floor and ceiling land in different bands — not measured enough to name one. It does not mean low.
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/ai.plyto%2Fcrm
- Install plan: https://forgeregistry.com/api/v1/packages/ai.plyto%2Fcrm/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/ai.plyto%2Fcrm
- HTML page: https://forgeregistry.com/registry/ai.plyto%2Fcrm
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
