Warmly API Patterns — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Warmly API Patterns (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Warmly hosts a remote MCP server at https://opps-api.getwarmly.com/api/mcp that exposes three read-only tools backed by Warmly's visitor identification platform. Authentication is OAuth 2.0 with PKCE, delegated to a WorkOS AuthKit tenant. Transport is MCP Streamable HTTP and the server is stateful — it issues an Mcp-Session-Id on initialize that must accompany subsequent requests.
Official docs: docs.getwarmly.com/mcp
POST https://opps-api.getwarmly.com/api/mcp
Accept: application/json, text/event-streamWarmly publishes RFC 9728 protected-resource metadata; the authorization server is a WorkOS AuthKit tenant:
GET https://opps-api.getwarmly.com/.well-known/oauth-protected-resource
→ authorization_servers: ["https://vigorous-paper-03.authkit.app"]AuthKit's .well-known/oauth-authorization-server exposes:
authorization_endpoint: https://vigorous-paper-03.authkit.app/oauth2/authorizetoken_endpoint: https://vigorous-paper-03.authkit.app/oauth2/tokenregistration_endpoint: https://vigorous-paper-03.authkit.app/oauth2/register (Dynamic Client Registration supported)code_challenge_methods_supported: ["S256"]grant_types_supported: ["authorization_code", "refresh_token"]token_endpoint_auth_methods_supported: ["none", "client_secret_post", "client_secret_basic"] — public PKCE clients are supported, so client_secret may be emptyScopes used at the IdP: openid profile email offline_access. The MCP resource itself has scopes_supported: [] — no resource-specific scopes are required, only a valid bearer token.
For accounts with multiple Warmly organizations, every call must pin org context. Two equivalent transports:
X-Warmly-Organization-Id: <uuid>?organization_id=<uuid> appended to the MCP URLThe WYRE MCP Gateway uses the header form so the org never leaks into proxy access logs. Single-organization tokens resolve their org server-side; the header is optional.
All three tools are read-only synchronous calls and do not consume identification credits (a list call returns the same visitors that have already been identified — Warmly bills on identification, not retrieval).
list_warm_visitorsReturns identified site visitors with full enrichment.
Per-visitor fields include:
list_warm_accountsVisitor activity rolled up to the account/company level.
Per-account fields include:
get_credits_remainingCurrent month's identification credit balance. Useful for catching credit exhaustion before scaling outreach off Warmly data.
list_warm_* tools return all currently identified visitors/accounts for the period. For large workspaces, narrow by company domain, date window, or engagement threshold in your downstream code rather than asking the model to scan the full payload.get_credits_remaining first if a workflow plans to drive prospecting volume off Warmly identifications — credit exhaustion silently stops new visitor enrichment but leaves previously identified visitors visible.list_warm_visitors contact data as the highest-likelihood identification for an account, not as a confirmed individual buyer signal.| Status | Meaning | Likely cause |
|---|---|---|
401 invalid_token | Missing or expired bearer token | Refresh the OAuth token; check WWW-Authenticate: Bearer resource_metadata=... for the auth server |
| 403 | Token valid, organization context wrong | Pass X-Warmly-Organization-Id for multi-org accounts, or verify the token's authorized org |
| 400 missing session | Mcp-Session-Id not sent | The server is stateful — every tool call must carry the session id issued on initialize |
| 5xx | Warmly platform error | Retry with backoff; persistent 5xx → contact Warmly support |
The WYRE MCP Gateway handles the initialize handshake, session id, and token refresh automatically — these are concerns only when connecting to Warmly's MCP directly.
Warmly has not published explicit MCP rate limits. The three tools are list reads, not write operations; sustained polling is unnecessary because identifications are batched server-side. A safe pattern is to call list_warm_visitors / list_warm_accounts no more than once per minute per workspace.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.