EspoCRMCAUTION
Opensource MCP Server for EspoCRM
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
A comprehensive Model Context Protocol (MCP) server for seamless integration with EspoCRM. This server enables AI assistants to interact with your EspoCRM instance through a standardized interface, providing complete CRUD operations for Contacts, Accounts, Opportunities, Meetings, Users, Tasks, Leads, and advanced system management capabilities.
NEW: AI Chatbot Integration - Now includes a complete chatbot interface that embeds directly into your EspoCRM, providing natural language access to all 47 MCP tools!
Features
Core Capabilities
- Complete CRUD Operations - Create, read, update, and delete entities
- Multi-Entity Support - Contacts, Accounts, Opportunities, Meetings, Users, Tasks, and Leads
- Advanced Search & Filtering - Flexible search with date ranges, pagination, and complex filters
- Task Management - Complete task lifecycle with parent relationships and user assignment
- Lead Management - Full lead pipeline from creation to conversion
- Meeting Management - Full calendar integration with attendee management
- User Management - Comprehensive user search and lookup capabilities
- Real-time Validation - Zod-based schema validation for all operations
- Comprehensive Logging - Winston-powered logging with multiple levels
Authentication & Security
- Multiple Auth Methods - API Key and HMAC authentication support
- Secure Configuration - Environment-based configuration management
- Rate Limiting - Built-in rate limiting for API protection
- Error Handling - Robust error handling with detailed logging
Calendar Integration
- Meeting Operations - Create, search, update, and manage meetings
- Attendee Management - Link contacts and users to meetings
- Date/Time Filtering - Advanced date range search capabilities
- Google Calendar Sync Compatibility - Designed for calendar synchronization workflows
AI Chatbot Integration
- *Floating Chat Widget
840d75bcbf57OBSERVED · 2026-10-08Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add espocrm-mcp-server --env ESPOCRM_API_KEY=${ESPOCRM_API_KEY} --env ESPOCRM_AUTH_METHOD=${ESPOCRM_AUTH_METHOD} --env ESPOCRM_SECRET_KEY=${ESPOCRM_SECRET_KEY} --env OPENAI_API_KEY=${OPENAI_API_KEY} -- npx -y [email protected]{
"mcpServers": {
"espocrm-mcp-server": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"ESPOCRM_API_KEY": "${ESPOCRM_API_KEY}",
"ESPOCRM_AUTH_METHOD": "${ESPOCRM_AUTH_METHOD}",
"ESPOCRM_SECRET_KEY": "${ESPOCRM_SECRET_KEY}",
"OPENAI_API_KEY": "${OPENAI_API_KEY}"
}
}
}
}Exposed tools (47)
27 read · 17 write · 3 destructive. Blast radius: 3 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
Dev | read | Developers |
add_note | write | Add a note/comment to any entity |
add_user_to_team | write | Add a user to a team with optional position |
assign_lead | read | Assign or reassign a lead to a specific user |
assign_role_to_user | read | Assign a role to a user |
assign_task | read | Assign or reassign a task to a specific user |
convert_lead | read | Convert a lead to contact, account, and/or opportunity |
create_account | write | Create a new account/company in EspoCRM |
create_call | write | Log a phone call with participants and details |
create_case | write | Create a support case/ticket with details |
create_contact | write | Create a new contact in EspoCRM with validation |
create_entity | write | Create a record for any entity type with validation |
create_lead | write | Create a new lead with full field support |
create_meeting | write | Create a new meeting in EspoCRM |
create_opportunity | write | Create a new sales opportunity in EspoCRM |
create_task | write | Create a new task. IMPORTANT: Only use the fields listed here — no other fields are accepted. The dateEnd field accepts ONLY a date (YYYY-MM-DD), never include a time component. |
delete_entity | destructive | Delete any entity record by ID |
get_contact | read | Get detailed information about a specific contact by ID |
get_entity | read | Get a specific entity record by ID |
get_entity_relationships | read | Get all related entities for a specific entity and relationship |
get_meeting | read | Get detailed information about a specific meeting by ID |
get_task | read | Get detailed information about a specific task by ID |
get_team_members | read | Get all members of a team |
get_user_by_email | read | Find a user by their email address |
get_user_permissions | read | Get effective permissions for a user based on roles and teams |
get_user_teams | read | Get all teams that a user belongs to |
health_check | read | Check EspoCRM connection and API status |
link_entities | write | Create relationships between any two entities |
remove_user_from_team | destructive | Remove a user from a team |
search_accounts | read | Search for accounts/companies using flexible criteria |
search_calls | read | Search for calls using flexible criteria |
search_cases | read | Search for support cases using flexible criteria |
search_contacts | read | Search for contacts using flexible criteria |
search_entity | read | Search any entity type with flexible filters. Returns at most 10 records by default — use specific filters to narrow results. |
search_leads | read | Search for leads using flexible criteria |
search_meetings | read | Search for meetings using flexible criteria |
search_notes | read | Search for notes/comments across entities |
search_opportunities | read | Search for sales opportunities using flexible criteria |
search_tasks | read | Search for tasks using flexible criteria |
search_teams | read | Search for teams in the system |
search_users | read | Search for users in the EspoCRM system |
unlink_entities | destructive | Remove relationships between entities |
update_case | write | Update an existing support case |
update_entity | write | Update any entity record by ID |
update_lead | write | Update an existing lead |
update_meeting | write | Update an existing meeting in EspoCRM |
update_task | write | Update an existing task. IMPORTANT: Only use the fields listed here — no other fields are accepted. The dateEnd field accepts ONLY a date (YYYY-MM-DD), never include a time component. |
Trust audit
CAUTIONgrade B · trust 83/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- declared (9 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (13)
ESPOCRM_URL=http://100.117.215.126
CORS_ORIGINS=http://100.117.215.126,http://localhost:3000
"http://100.117.215.126",
"http://100.117.215.126",
delete_entity, remove_user_from_team, unlink_entities
mcpServerPath: path.join(__dirname, '../../build/index.js'),
import { formatContactDetails } from '../../src/utils/formatting';import type { Contact } from '../../src/espocrm/types';import { FlexibleDateTimeSchema, normalizeDateTime } from '../../src/utils/validation';import { EspoCRMClient } from '../../src/espocrm/client';express, socket.io, cors, helmet, dotenv, openai, ws, uuid
axios, winston, zod, @types/jest, @types/node, @typescript-eslint/eslint-plugin, @typescript-eslint/parser, eslint
Gates applied: no_behavioural_pass, no_license.
840d75bcbf57full audit observations/trust-audit/mcp-server/zaphod-black__espocrm.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | 840d75bcbf57 | CAUTION | B | 83 | first audit |
Questions
What is the EspoCRM MCP server?
Opensource MCP Server for EspoCRM
What tools does EspoCRM expose?
47 in total: 27 read-only, 17 that write, and 3 that can delete or overwrite (delete_entity, remove_user_from_team, unlink_entities). Every one is listed on this page with its risk.
Is EspoCRM safe to connect to an agent?
With care. The audit graded it B (83/100) and found 13 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 3 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does EspoCRM need?
It reads ESPOCRM_API_KEY, ESPOCRM_AUTH_METHOD, ESPOCRM_SECRET_KEY and OPENAI_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does EspoCRM run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as espocrm-mcp-server at 1.0.0.
How current is this page?
The grade is for one exact copy of the source (840d75bcbf57), read on 2026-10-08. The repository is watched and re-audited when it changes.