MCP Plugin Tools
Optional plugins can contribute their own MCP tools. Plugin tools appear in tools/list only when the plugin is active and the tool service classes load successfully.
Helpdesk plugin tools
These tools are available only when the easy_helpdesk plugin is active and their service classes load successfully. The first Helpdesk MCP batch is read-only and targets support/SLA discovery.
| Tool | Example prompt | Example params |
|---|---|---|
easy8_helpdesk_projects_list |
List Helpdesk project settings. | { "name": "easy8_helpdesk_projects_list", "arguments": { "keyword": "support", "limit": 25 } } |
easy8_helpdesk_projects_get |
Show Helpdesk settings 12. | { "name": "easy8_helpdesk_projects_get", "arguments": { "id": 12 } } |
easy8_helpdesk_sla_events_list |
Show active SLA events for issue 123. | { "name": "easy8_helpdesk_sla_events_list", "arguments": { "issue_id": 123, "state": "active", "limit": 25 } } |
easy8_helpdesk_mail_templates_list |
List Helpdesk mail templates for escalations. | { "name": "easy8_helpdesk_mail_templates_list", "arguments": { "name": "escalation", "limit": 25 } } |
Attendance plugin tools
These tools are available only when the easy_attendances plugin is active and Easy Attendance is enabled. They are read-only and respect attendance permissions: users without view_easy_attendance_other_users only see their own attendance records, and approval lists require attendance approval permission.
Use cases:
- review my attendance for a period
- discover absence/attendance activity types
- check who is out when the user has permission to view other users
- review attendance requests waiting for approval
| Tool | Example prompt | Example params |
|---|---|---|
easy8_attendance_activities_list |
List available attendance activities. | { "name": "easy8_attendance_activities_list", "arguments": { "limit": 100 } } |
easy8_attendances_list |
Show my attendance this week. | { "name": "easy8_attendances_list", "arguments": { "user_id": "me", "arrival_from": "2026-05-18", "arrival_to": "2026-05-24", "limit": 25 } } |
easy8_attendances_get |
Show attendance record 42. | { "name": "easy8_attendances_get", "arguments": { "id": 42 } } |
easy8_attendances_approval_list |
Show attendance requests waiting for approval. | { "name": "easy8_attendances_approval_list", "arguments": { "limit": 25 } } |
CRM plugin tools
These tools are available only when the easy_crm plugin is active. List/detail tools are read-only and rely on Easy CRM visibility rules, including project permissions and role-level CRM case visibility. easy8_crm_cases_list returns active CRM cases by default; pass active: false only when finished or canceled cases are needed. It returns CRM cases only, not issues/tasks and not customer-account segmentation. For known opportunity IDs, easy8_crm_active_quotes_list batches active quote terms and can report boolean presence of a product code across direct and catalog/bundle product codes. Quote access follows parent CRM case visibility and does not require separate price-book viewing permission. easy8_crm_sales_activities_create is a write tool for recording confirmed customer interactions as sales activities.
Use cases:
- review current sales pipeline and follow-ups
- find opportunities assigned to me
- check opportunities with a specific status or next action date
- discover CRM case statuses before filtering or reporting
- inspect active quote terms or check boolean product-code presence for known opportunity IDs, including IDs imported from CSV
- record a meeting, call, or follow-up as a sales activity on a customer account or opportunity
- replace an opportunity description after an explicit user-approved change
| Tool | Example prompt | Example params |
|---|---|---|
easy8_crm_case_statuses_list |
List CRM case statuses. | { "name": "easy8_crm_case_statuses_list", "arguments": { "limit": 100 } } |
easy8_crm_cases_list |
Show my active CRM opportunities. | { "name": "easy8_crm_cases_list", "arguments": { "assigned_to_id": "me", "active": true, "limit": 25 } } |
easy8_crm_cases_get |
Show CRM case 321. | { "name": "easy8_crm_cases_get", "arguments": { "id": 321 } } |
easy8_crm_cases_update |
Replace opportunity 321's description with the approved summary. | { "name": "easy8_crm_cases_update", "arguments": { "id": 321, "description": "## Approved summary\n\nCustomer requested a revised proposal.", "description_format": "markdown" } } |
easy8_crm_active_quotes_list |
Show active quote terms and whether the license product is present for these opportunities. | { "name": "easy8_crm_active_quotes_list", "arguments": { "crm_case_ids": [321, 654], "product_code": "LICENSE-USER" } } |
easy8_crm_sales_activities_create |
Record that I discussed an upsell with account 123. | { "name": "easy8_crm_sales_activities_create", "arguments": { "entity_type": "EasyContact", "entity_id": 123, "description": "Discussed upsell opportunity.", "is_finished": true } } |
Opportunity description updates
easy8_crm_cases_update is a write tool that replaces the entire description, rather than appending text. Call it only after the user explicitly approves the change. It accepts a positive integer id, a required string description, and optional description_format (html, markdown, or common_mark). Markdown/CommonMark is converted to HTML using the existing formatter; HTML and omitted format retain the model's HTML sanitization. Success returns the normal crm_case detail payload, including the stored description.
- Send
"description": ""to clear the field. If CRM workflow requires a description, validation fails without saving the change. - The case must be visible and editable by the current user. Project permissions, own-case editing rules, locked-case restrictions, workflow readonly fields, and model validations still apply. Read-only API requests are denied; hidden and missing cases both return not found.
- A changed description is journalized with its old/new values, the current user as author, and
automation_source: "MCP". CRM update notifications follow theeasy_crm_case_updatedsetting and are delivered only for a persisted journal. If the save has no journalized changes, it creates no empty journal or update email. Existing model callbacks remain active: even with an identical description, item-based pricing (easy_crm_use_items) can change the derived price and create a journal eligible for notification. - If notification delivery or enqueueing fails after saving, the tool still returns success with the saved
crm_casedetail and an additionalwarning:"CRM case saved, but the update notification failed."Do not repeat the description update to retry the notification. The warning log includes only the case ID and exception class, not the exception message or description. - No other arguments are supported, including name, assignee, project, status, price, custom fields, notes, automation source, or
lock_version. Extra arguments and invalid types/formats are rejected server-side before assignment. MCP argument logging includes onlyidanddescription_format, not description content. - There is no client-side version check between a previous read and this update. Read the current description before preparing a replacement. Server-side optimistic locking still detects a concurrent save during the update and returns a conflict without an automatic overwrite or retry. Read again and obtain approval for a new replacement after a conflict.
CRM account tools
These tools are available only when the easy_crm plugin and CRM account/contact functionality are active. They are read-only and rely on EasyContact visibility rules.
Account payloads expose arr (Annual Recurring Revenue) and acv (Annual Contract Value) when the backing account attributes are available. The values come directly from annual_recurring_revenue and annual_contract_value without UI rounding. This applies to account list/detail tools, issue-linked account outputs, and account sales activity reports.
Use easy8_issues_list for customer-account issue/task segmentation. When Easy CRM account tools are active, they extend easy8_issues_list with these linked-account filters:
account_id- linked EasyContact account IDtype_id- linked account contact type IDaccount_status_id- linked account status enumeration IDaccount_level_id- linked account level enumeration IDaccount_industry_id- linked account industry enumeration IDaccount_country_code- linked account contact country ISO code from contact billing info, such asDEaccount_manager_id- linked account manager user ID, or"me"customer_success_manager_id- linked customer success manager user ID, or"me"accounted_by_id- linked EasyPartner/accounted-by IDinclude_accounts- include linked customer account references in each issue payload
Use status and status_id only for issue status filtering. Use account_status_id for customer-account status filtering.
Use cases:
- discover CRM account statuses, levels, and contact types
- list customer accounts by structured account filters
- inspect one customer account
- list customer accounts linked to a known issue
- report sales activities aggregated on customer accounts and related CRM opportunities
- analyze sales activity data across many customer accounts in safe batches
For prompts like "analyze all customers and their sales activity data", use easy8_crm_account_sales_activity_analysis first. It returns the number of customers and tells the assistant to ask the user whether to continue in batches or narrow the filters. Use easy8_crm_account_sales_activities_list for a small filtered page, one known account, or an explicit user-approved large_query_mode: "force" call.
| Tool | Example prompt | Example params |
|---|---|---|
easy8_crm_account_enumerations_list |
List CRM account statuses and levels. | { "name": "easy8_crm_account_enumerations_list", "arguments": {} } |
easy8_crm_accounts_list |
List German manufacturing customer accounts. | { "name": "easy8_crm_accounts_list", "arguments": { "country_code": "DE", "account_industry_id": 7, "limit": 25 } } |
easy8_crm_accounts_get |
Show customer account 123. | { "name": "easy8_crm_accounts_get", "arguments": { "id": 123 } } |
easy8_crm_issue_accounts_list |
Show customer accounts linked to issue 456. | { "name": "easy8_crm_issue_accounts_list", "arguments": { "issue_id": 456, "limit": 25 } } |
easy8_crm_account_sales_activities_list |
Show account sales activity summary. | { "name": "easy8_crm_account_sales_activities_list", "arguments": { "account_manager_id": "me", "include_user_summary": true, "limit": 25 } } |
easy8_crm_account_sales_activity_analysis |
Analyze sales activity data across many customer accounts. | { "name": "easy8_crm_account_sales_activity_analysis", "arguments": { "mode": "preview", "batch_size": 100 } } |
Money plugin tools
These tools are available only when the easy_money plugin is active. They are read-only and respect Easy Money permissions. Project summaries include only financial buckets allowed by the current user's specific money permissions.
Use cases:
- review a project's financial summary
- list expected revenues or expected expenses for a project
- list other revenues or other expenses for reporting
- inspect one visible money item without mutating project budget data
| Tool | Example prompt | Example params |
|---|---|---|
easy8_money_project_summaries_list |
List visible project financial summaries. | { "name": "easy8_money_project_summaries_list", "arguments": { "limit": 25 } } |
easy8_money_project_summaries_get |
Show money summary for project 12. | { "name": "easy8_money_project_summaries_get", "arguments": { "project_id": 12 } } |
easy8_money_expected_revenues_list |
List expected revenues for project 12. | { "name": "easy8_money_expected_revenues_list", "arguments": { "project_id": 12, "limit": 25 } } |
easy8_money_expected_revenues_get |
Show expected revenue 80. | { "name": "easy8_money_expected_revenues_get", "arguments": { "id": 80 } } |
easy8_money_expected_expenses_list |
List expected expenses for project 12. | { "name": "easy8_money_expected_expenses_list", "arguments": { "project_id": 12, "limit": 25 } } |
easy8_money_expected_expenses_get |
Show expected expense 81. | { "name": "easy8_money_expected_expenses_get", "arguments": { "id": 81 } } |
easy8_money_other_revenues_list |
List other revenues this month. | { "name": "easy8_money_other_revenues_list", "arguments": { "spent_on_from": "2026-05-01", "spent_on_to": "2026-05-31", "limit": 25 } } |
easy8_money_other_revenues_get |
Show other revenue 82. | { "name": "easy8_money_other_revenues_get", "arguments": { "id": 82 } } |
easy8_money_other_expenses_list |
List other expenses this month. | { "name": "easy8_money_other_expenses_list", "arguments": { "spent_on_from": "2026-05-01", "spent_on_to": "2026-05-31", "limit": 25 } } |
easy8_money_other_expenses_get |
Show other expense 83. | { "name": "easy8_money_other_expenses_get", "arguments": { "id": 83 } } |