smokeball-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_firmA | Get this firm's profile and settings. |
| update_firmA | Update firm profile fields. Only pass fields you want to change. |
| get_firm_user_mappingsA | List all user mappings for this firm. |
| get_firm_user_mappingB | Get a specific firm user mapping by ID. |
| update_firm_user_mappingC | Update a firm user mapping (link a staff member to a system user). |
| delete_firm_user_mappingC | Delete a firm user mapping by ID. |
| search_staffC | Search staff members. query: name or email fragment. |
| get_staff_memberB | Get a staff member by ID. |
| create_staff_memberC | Create a new staff member. |
| update_staff_memberC | Update a staff member's details. |
| delete_staff_memberC | Delete a staff member by ID. |
| get_userC | Get a user by ID. |
| create_userC | Create a new user (invite to the firm). |
| remove_userB | Remove a user from the firm. |
| resend_user_invitationB | Resend an invitation email to a user. |
| list_contactsC | List contacts with offset pagination. |
| get_contactC | Get a contact by ID. |
| create_contactB | Create a contact. contact_type: 'person' (default) or 'company'. For person: supply first_name / last_name. For company: supply company_name. |
| update_contactC | Update a contact's details. |
| delete_contactC | Delete a contact by ID. |
| get_contact_relationsC | Get all relationships for a contact. |
| get_contact_relationB | Get a specific relationship for a contact. |
| create_contact_relationC | Create a relationship between two contacts. |
| update_contact_relationC | Update a contact relationship type. |
| delete_contact_relationB | Delete a relationship from a contact. |
| get_contact_tagsB | Get tags on a contact. |
| add_contact_tagsC | Add tags to a contact. tags_csv: comma-separated tag strings. |
| remove_contact_tagsC | Remove a tag from a contact. tag_id: the ID of the tag to remove. |
| list_mattersC | List matters with offset pagination. |
| get_matterB | Get a matter by ID. |
| create_matterC | Create a matter. matter_type_id: from list_matter_types (required). client_ids_csv: comma-separated contact IDs to set as clients (required). number: optional matter reference number. |
| update_matterC | Update a matter's name, status, or description. |
| patch_matterA | Partially update a matter status or stage (PATCH). Use update_matter for name/description. |
| delete_matterC | Delete a matter by ID. |
| get_matter_billing_configurationB | Get billing configuration for a matter. |
| update_matter_billing_configurationC | Update billing configuration for a matter. billing_type: Hourly | Fixed | Contingency. |
| get_matter_tagsC | Get tags on a matter. |
| add_matter_tagsB | Add tags to a matter. tags_json: JSON array of tag objects, each with keys: id (str), name (str), color (str), type (str). Example: [{"id": "abc", "name": "Urgent", "color": "red", "type": "custom"}] |
| remove_matter_tagsB | Remove a tag from a matter. tag_id: the ID of the tag to remove. |
| list_leadsC | List leads (potential new clients/matters). |
| get_leadC | Get a lead by ID. |
| create_leadA | Create a lead (created as a matter with isLead=true via POST /matters). matter_type_id: from list_matter_types. client_id: existing contact ID to associate as client. |
| update_leadC | Update a lead's status or notes. |
| patch_leadA | Partially update a lead status or assignment (PATCH). Use update_lead for notes. |
| delete_leadC | Delete a lead by ID. |
| list_matter_typesB | List all matter types configured for this firm. |
| get_matter_typeB | Get a matter type by ID. |
| list_matter_type_categoriesB | List all matter type categories. |
| list_stage_setsB | List all stage sets (workflow stage groups). |
| get_stage_setB | Get a specific stage set by ID. |
| get_stage_in_setC | Get a specific stage within a stage set. |
| list_matter_stage_mappingsA | List all matter-to-stage mappings. |
| get_matter_stageB | Get the current stage of a matter. |
| get_roles_on_matterB | List all roles assigned to a matter. |
| get_role_on_matterB | Get a specific role on a matter. |
| add_role_to_matterC | Add a role to a matter. contact_id: associate a contact to this role. |
| update_role_on_matterC | Update a role on a matter. |
| remove_role_from_matterB | Remove a role from a matter. |
| get_relationships_on_matterC | Get all contact relationships on a matter. |
| get_relationship_on_roleC | Get the contact relationship for a specific role on a matter. |
| add_relationship_to_roleC | Add a contact relationship to a role on a matter. |
| update_relationshipC | Update a contact relationship on a matter role. |
| remove_relationship_from_roleC | Remove a contact relationship from a role on a matter. |
| list_tasksC | List tasks. Filter by matter_id to get matter-specific tasks. |
| get_taskC | Get a task by ID. |
| create_taskC | Create a task. due_date: ISO 8601 (YYYY-MM-DD). assigned_to_id: staff ID. |
| update_taskD | Update a task. completed_str: 'true' to mark done, 'false' to unmark. |
| delete_taskC | Delete a task by ID. |
| get_subtasksC | Get all subtasks for a task. |
| get_subtaskC | Get a specific subtask. |
| create_subtaskC | Create a subtask under a task. |
| update_subtaskC | Update a subtask. completed_str: 'true' to mark done, 'false' to unmark. |
| delete_subtaskC | Delete a subtask. |
| get_task_documentsC | Get documents attached to a task. |
| get_task_documentC | Get a specific document attached to a task. |
| create_task_documentC | Attach a file to a task. file_id: from files API. |
| delete_task_documentB | Remove a document attachment from a task. |
| list_eventsB | List calendar events. Filter by matter_id for matter-specific events. |
| get_eventB | Get a calendar event by ID. |
| create_eventB | Create a calendar event. start_date/end_date: ISO 8601 datetime. |
| update_eventC | Update a calendar event. |
| delete_eventC | Delete a calendar event by ID. |
| get_event_remindersB | Get all reminders for a calendar event. |
| create_event_reminderC | Create a reminder for an event. reminder_type: Notification | Email. |
| update_event_reminderB | Update an event reminder's lead time. |
| delete_event_reminderC | Delete an event reminder. |
| list_memos_on_matterC | List memos (notes) on a matter. |
| get_memoB | Get a memo by ID. |
| create_memoC | Create a memo (note) on a matter. |
| update_memoB | Update a memo's content or subject. |
| delete_memoC | Delete a memo by ID. |
| list_feesB | List fee entries (billable time). Filter by matter_id for matter-specific fees. |
| get_feeB | Get a fee entry by ID. |
| create_feeC | Create a fee (time entry). date: YYYY-MM-DD. duration_minutes: time spent. billable: 'true' (default) or 'false'. |
| update_feeC | Update a fee entry. billable: 'true' or 'false' to set; leave empty to skip. |
| patch_feeC | Toggle a fee entry's billable or billed state (PATCH). Use 'true' or 'false'. |
| delete_feeB | Delete a fee entry by ID. |
| list_expensesC | List expense entries. Filter by matter_id for matter-specific expenses. |
| get_expenseC | Get an expense entry by ID. |
| create_expenseC | Create an expense entry. date: YYYY-MM-DD. amount: dollar value. billable: 'true' (default) or 'false'. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| daily_briefing | Morning briefing: open matters needing attention, overdue tasks, and unbilled fees. |
| intake_triage | Triage a new or recently opened matter: check contacts, billing setup, and key documents. |
| billing_summary | Billing summary for a matter: fees, expenses, invoices, and outstanding balances. Note: webhook registrations in this server validate target URLs against SSRF (HTTPS-only; private/loopback/link-local/metadata IPs are blocked). |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| matter_types_resource | All matter types configured in this Smokeball firm — read-only reference data. |
| activity_codes_resource | All billable activity codes configured in this Smokeball firm — read-only reference data. |
| security_notes_resource | Security posture documentation for this Smokeball MCP server. |
TDQS
Scored across 189 tools
Most tools target distinct entities and actions, but the split between patch/update for matters and leads could confuse an agent. Also, similar verbs like 'remove' vs 'delete' are used interchangeably, though descriptions clarify differences.
Tools largely follow a verb_noun pattern (create_, get_, list_, update_, delete_), but there are inconsistencies: 'remove_' instead of 'delete_' for tags and relationships, and occasional non-parallel verbs like 'archive_matter' vs 'unarchive_matter'.
With 189 tools, the server is excessively large for a typical MCP server. While the domain (legal practice management) is broad, many operations could be consolidated or parameterized. This number overwhelms agents and reduces usability.
The tool surface covers CRUD for most entities (contacts, matters, tasks, fees, etc.) and includes many auxiliary features (tags, roles, layouts, webhooks). However, there are notable gaps: no search tools for matters or contacts (only list with pagination), and batch operations are limited.