View as .md ↗
Lawmatics

Lawmatics

MCP server · Practice Management · lawmatics.com · 40 categories · 177 tools

Lawmatics is a legal CRM, client intake, and marketing automation platform for law firms. This integration exposes contacts, companies, matters, billing (invoices, transactions, expenses, time entries), tasks, documents, events, and marketing data as governed MCP tools, scoped per member by access level.

Update Time Entry (lawmatics_update-time-entry)

Update a time entry in Lawmatics by ID. The API requires exactly one of matterId or contactId on EVERY update — to keep the current association, fetch the entry with get-time-entry and pass its relationships.contactable.id as matterId when that pointer's type is "prospect" or as contactId when it is "contact". Other omitted fields keep their stored values; duration is in hours and the hourly rate is in integer cents. Returns the updated entry including a `relationships` envelope of {id,type} pointers to related records (the matter or contact the time is billed to, the staff and creating users, the billing activity type, and the invoice). WARNING: contact-targeted updates can return a server error AFTER the change was saved — on an upstream error, re-fetch the entry to check before retrying.

Tool Input

timeEntryIdstringrequired— ID of the time entry to update; a numeric string(pattern: ^\d+$)
descriptionstring— New description of the work performed
durationnumber— Duration in hours as a float (e.g. 1.5 = 1 hour 30 minutes), NOT minutes
billableboolean— Whether the time is billable
rateCentsinteger— Hourly rate in integer cents (e.g. 12000 = $120.00/hr), NOT dollars
rateFlatFeeboolean— Whether this is a flat-fee entry
showFlatFeeDurationboolean— Whether to show the client the duration for a flat-fee entry
startedAtstring(date-time)— When the time entry started, as an ISO 8601 timestamp (e.g. "2026-06-05T10:00:00-07:00"). Unix epoch values are NOT accepted.(pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z||([+-](?:[01]\d|2[0-3]):[0-5]\d)))$)
completedAtstring(date-time)— When the time entry completed, as an ISO 8601 timestamp (e.g. "2026-06-05T10:30:00-07:00"). Unix epoch values are NOT accepted. Only completed entries can be added to invoices.(pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z||([+-](?:[01]\d|2[0-3]):[0-5]\d)))$)
activityTypeIdstring— ID of the billing activity type
userIdstring— ID of the user who performed the time entry
createdByIdstring— ID of the user who created the time entry
invoiceIdstring— ID of the invoice to attach this entry to
matterIdstring— ID of the matter this time entry belongs to. The API requires exactly one of matterId or contactId on EVERY update — pass the entry's current matter to keep it (get-time-entry returns it as relationships.contactable.id when that pointer's type is "prospect"), or a different one to re-associate.
contactIdstring— ID of the contact this time entry belongs to. The API requires exactly one of matterId or contactId on EVERY update — pass the entry's current contact to keep it (get-time-entry returns it as relationships.contactable.id when that pointer's type is "contact"), or a different one to re-associate.

Tool Output

idstringrequired— Unique ID of the time entry
descriptionstringnullrequired— Description of the work performed; null if unset
durationnumberrequired— Duration in hours as a float (e.g. 1.5 = 1 hour 30 minutes), NOT minutes
durationRoundednumbernullrequired— Duration rounded to the firm's billing increment, in hours; null if not reported
billablebooleannullrequired— Whether the time is billable; null if not reported
rateFlatFeebooleannullrequired— Whether this is a flat-fee entry; null if not reported
rateCentsintegernullrequired— Hourly rate in integer cents (e.g. 12000 = $120.00/hr); null if not reported
rateCurrencystringnullrequired— ISO currency code of the rate (e.g. "USD"); null if not reported
runningSincestringnullrequired— When the entry's live timer started, as an ISO 8601 timestamp; null when no timer is running
startedAtstringnullrequired— When the time entry started, as an ISO 8601 timestamp; null if unset
completedAtstringnullrequired— When the time entry completed, as an ISO 8601 timestamp; null while incomplete (only completed entries can be added to invoices)
createdAtstringnullrequired— When the time entry record was created, as an ISO 8601 timestamp; null if unknown
updatedAtstringnullrequired— When the time entry record was last updated, as an ISO 8601 timestamp; null if unknown
relationshipsobjectrequired— JSON:API relationship pointers to related records as {id,type} stubs. Not materialized — follow a pointer by calling that resource's own get/find tool (e.g. type 'user' -> get-user, type 'prospect' -> get-matter, type 'contact' -> get-contact, type 'invoice' -> get-invoice).
activityTypeobjectnullrequired— Billing activity type pointer; null when unset
idstringrequired— ID of the referenced Lawmatics record
typestringrequired— JSON:API record class of the reference (e.g. "user", "contact", "prospect", "firm"); resolve it by calling that resource's own get/find tool — this pointer is not materialized
contactableobjectnullrequired— Pointer to the record the time is billed to; type is "prospect" for a matter or "contact" for a contact; null when unassociated
idstringrequired— ID of the referenced Lawmatics record
typestringrequired— JSON:API record class of the reference (e.g. "user", "contact", "prospect", "firm"); resolve it by calling that resource's own get/find tool — this pointer is not materialized
createdByobjectnullrequired— Pointer to the user who created the record; null when unattributed
idstringrequired— ID of the referenced Lawmatics record
typestringrequired— JSON:API record class of the reference (e.g. "user", "contact", "prospect", "firm"); resolve it by calling that resource's own get/find tool — this pointer is not materialized
invoiceobjectnullrequired— Pointer to the invoice this entry is attached to; null when not invoiced
idstringrequired— ID of the referenced Lawmatics record
typestringrequired— JSON:API record class of the reference (e.g. "user", "contact", "prospect", "firm"); resolve it by calling that resource's own get/find tool — this pointer is not materialized
staffobjectnullrequired— Pointer to the user who performed the time entry; null when unattributed
idstringrequired— ID of the referenced Lawmatics record
typestringrequired— JSON:API record class of the reference (e.g. "user", "contact", "prospect", "firm"); resolve it by calling that resource's own get/find tool — this pointer is not materialized

We're Adding More Lawmatics Tools Constantly!

Don't see a specific Lawmatics tool you need? Email [email protected] and we can add it.

Lawmatics Frequently Asked Questions

What does the Update Time Entry tool do?

This page documents the Update Time Entry tool (lawmatics_update-time-entry). Update a time entry in Lawmatics by ID. The API requires exactly one of matterId or contactId on EVERY update, to keep the current association, fetch the entry with get-time-entry and pass its relationships.contactable.id as matterId when that pointer's type is "prospect" or as contactId when it is "contact". Other omitted fields keep their stored values; duration is in hours and the hourly rate is in integer cents. Returns the updated entry including a relationships envelope of {id,type} pointers to related records (the matter or contact the time is billed to, the staff and creating users, the billing activity type, and the invoice). WARNING: contact-targeted updates can return a server error AFTER the change was saved, on an upstream error, re-fetch the entry to check before retrying. It is one of the Lawmatics Time Entries tools, invoked through your firm's Weave MCP connection and available to members whose access level permits it.

What is the Lawmatics integration?

The Lawmatics integration connects your firm's Lawmatics account to Weave. Lawmatics is a legal CRM, client intake, and marketing automation platform for law firms. This integration exposes contacts, companies, matters, billing (invoices, transactions, expenses, time entries), tasks, documents, events, and marketing data as governed MCP tools, scoped per member by access level. It groups 177 tools into 40 categories, exposed through your firm's Weave MCP connection and filtered per member by access level.

How does my firm connect Lawmatics to Weave?

An admin connects Lawmatics once for the whole firm via OAuth. Every member then works through that single connection; there is no per-user Lawmatics login.

Do I need to install or configure anything locally?

No. Weave is fully hosted, so there is nothing to install, run, or maintain on your own machines. An admin connects Lawmatics once from the Weave console through a secure OAuth handshake, and your credentials are encrypted at rest and stay inside Weave's infrastructure. After that, each member simply points their AI assistant at your firm's Weave MCP endpoint, and the tools they are allowed to use appear automatically based on their access level.

Can everyone on my team use every tool?

No. Tools are exposed per member by access level, so each person only sees the Lawmatics tools their role permits.

Are changes made through these tools reversible?

Reads are always safe. Deletes are irreversible: they remove the record from Lawmatics permanently.

How are money amounts represented?

All monetary values (expenses, transactions, invoices, time-entry rates) are integer cents; for example, 50000 means $500.00.

Related Tools