LangChain tools for Relm - the CRM for LLMs and AI agents
langchain-relm provides 8 well-structured tools with clear verb-noun naming (relm_describe_schema, relm_search, relm_list, relm_create_*). All tools have descriptions (avg 150 chars, within 10-1024 baseline). Input schemas are explicit Pydantic models with typed fields. However, several parameters lack descriptions (first_name, last_name, phone, linkedin_url in relm_create_contact; domain in relm_create_company), and output schemas are not documented. Error handling is mentioned in docstrings but not formalized. Tool composition is sound, search/list enable discovery before create/update operations. No security issues detected (no secrets in params). Naming is consistent and action-oriented.
Create a company (name required). Returns a cmp_ id you can pass as company_id on contacts and deals.
Create a contact. Needs at least one of: a name, an identifier (email/phone/linkedin_url), or a company. Email is unique per workspace - a duplicate returns the existing contact. Do not invent a placeholder email.
Open a deal. value_cents is integer cents (e.g. $18,500 -> 1850000). Defaults to the default pipeline and its first stage.
Return Relm's live schema: every object, its fields (built-in + custom), id prefixes, list filters and all enum values. ALWAYS call this before guessing a type, stage or field - it is the source of truth for what exists.
List records of an object (contact/company/deal/activity), newest first, with an optional `q` substring filter.
Missing parameter descriptions in relm_create_contact: first_name, last_name, phone, linkedin_url have null or no descriptions. LLMs cannot infer what these fields control.
Output schemas not documented. Tools return JSON strings but the structure of the response (fields, types, pagination) is not specified. Agents cannot plan downstream calls without knowing what fields to extract.
Error handling not formalized. Docstring mentions 'Relm's problem+json' with valid_options and suggestion, but no tool-level error schema or recovery guidance is documented. Agents cannot distinguish retryable vs fatal errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Log an activity (note/call/email/meeting/task) on a contact and/or deal. At least one of contact_id or deal_id is required.
Move a deal to a different stage. If the stage does not exist, the error lists valid_options.
Search across contacts, companies and deals by name, email or title. Use it to find a record's id before updating or linking it.
relm_create_contact requires 'at least one of: name, identifier, or company' but this constraint is not enforced in the schema. Pydantic model allows all fields to be None, relying on server-side validation. LLMs may pass invalid combinations.
No pagination guidance in relm_list and relm_search. Both accept limit but do not document max results, total count, or next_cursor. Large result sets could exhaust context window.