Skip to main content
Glama

Server Details

Log hours and invoice clients from your AI chat. Time tracking and invoicing for freelancers.

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
connerj70/time-tracking
GitHub Stars
0
Server Listing
Tallied
ChatGPT
–
Claude
–

TDQS

A4.4/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct action in a clear domain: invoice preview vs. create vs. send vs. void are separated, and time logging vs. proposing vs. reporting are clearly distinguished. Cross-tool usage is carefully disambiguated in the descriptions, so an agent can reliably pick the right call.

Naming Consistency5/5

All tools use a consistent domain-prefixed verb_noun convention (invoice.create_draft, time.list_entries, workspace.list_projects). Minor pairings like log_entries_batch vs log_entry are still predictable from the pattern.

Tool Count4/5

At 17 tools this is slightly above the ideal 3–15 range, but the count is justified because the server covers three related workflows: time tracking, invoicing, and workspace setup. Every tool maps to a distinct operation, so the size feels intentional rather than padded.

Completeness4/5

The time and invoice lifecycles are well covered: log/update/delete/list/report, and create/preview/send/pay/void. Notable gaps are invoice editing after drafting and client/project update or delete operations, though neither is a critical blocker for the core workflow.

Available Tools

17 tools
invoice.create_draftCreate a draft invoiceAInspect

Use this when the user asks to invoice a client, bill for a period, or turn unbilled hours into an invoice. Creates a draft only; nothing is sent and the client cannot see it yet. Includes all unbilled billable entries for the client through through_date and marks them as invoiced. Show the draft to the user, then use invoice.send when they ask to send it.

NameRequiredDescriptionDefault
notesNo
clientYes
due_in_daysNoDefault: client net terms (30)
through_dateNoDefault: today
group_lines_byNoDefault "project"
tax_rate_percentNo
invoice.getGet invoice detailsA
Read-onlyIdempotent
Inspect

Use this when the user asks about a specific invoice's lines, total, due date, payment link, or payment status. Accepts an invoice id or number (e.g. "INV-0007"). Renders an invoice preview.

NameRequiredDescriptionDefault
invoice_idYesInvoice id or number
invoice.listList invoicesA
Read-onlyIdempotent
Inspect

Use this when the user asks about invoices: outstanding, overdue, paid, drafts, sent this month, which clients owe money, or a specific client's invoices. Returns invoice summaries with status and totals. Use invoice.get for line items.

NameRequiredDescriptionDefault
limitNo
clientNo
statusNoDefault "all". "outstanding" = sent or viewed; "overdue" = outstanding and past due.
end_dateNoIssue date to
start_dateNoIssue date from
invoice.preview_draftPreview what an invoice would containA
Read-onlyIdempotent
Inspect

Use this when the user asks what they could invoice a client for, or wants to see unbilled work before creating an invoice. Creates nothing. Returns the lines, hours, and total an invoice.create_draft call with the same arguments would produce.

NameRequiredDescriptionDefault
clientYesClient name or id
through_dateNoInclude unbilled entries up to and including this date. Default: today.
group_lines_byNoDefault "project"
tax_rate_percentNo
invoice.record_paymentRecord a manual paymentA
Idempotent
Inspect

Use this when the user says a client paid by check, bank transfer, cash, or otherwise outside the Stripe payment link. Marks the invoice paid. Stripe payments are recorded automatically; do not use this for them.

NameRequiredDescriptionDefault
noteNo
methodNoe.g. "bank transfer", "check #1042"
paid_onNoDefault: today
invoice_idYesInvoice id or number
invoice.sendSend an invoice to the clientAInspect

Use this only after the user has reviewed the draft and asks to send it. Emails the invoice with a Stripe payment link to the client's billing email (or to_email) and changes the status to sent. Do not call to re-send unless the user asks. This sends a real email to a real person.

NameRequiredDescriptionDefault
messageNoOptional cover note in the user's voice
to_emailNoOverride or supply the recipient when the client has no billing email
invoice_idYesInvoice id or number
invoice.voidVoid an invoiceA
Destructive
Inspect

Use this only when the user explicitly asks to void or cancel an invoice. Requires confirm: true; without it returns the invoice for a final check. Voiding releases its time entries so they can be invoiced again. Paid invoices cannot be voided.

NameRequiredDescriptionDefault
reasonNo
confirmNo
invoice_idYes
time.delete_entryDelete a time entryA
Destructive
Inspect

Use this only when the user explicitly asks to remove an entry. Requires confirm: true; when omitted it returns the entry for a final check without deleting. Entries on sent invoices cannot be deleted. To fix a mistake, prefer time.update_entry.

NameRequiredDescriptionDefault
confirmNoMust be true to actually delete
entry_idYes
time.list_entriesList time entriesA
Read-onlyIdempotent
Inspect

Use this when the user asks what they worked on, what they logged, or wants entries for a day, week, project, or client. Returns individual entries with resolved project/client names and per-entry rates. For totals and breakdowns use time.report instead. Do not use for calendar events, tasks, or reminders. Defaults to the current week in the workspace timezone.

NameRequiredDescriptionDefault
limitNoDefault 100
clientNoClient name or id
cursorNopage.next_cursor from a previous call
projectNoProject name or id
end_dateNoYYYY-MM-DD, inclusive. Default: today.
start_dateNoYYYY-MM-DD, inclusive. Default: Monday of the current week.
billable_onlyNo
unbilled_onlyNoOnly billable entries not yet on an invoice
time.log_entries_batchLog several time entriesA
Idempotent
Inspect

Use this when logging multiple entries at once: an end-of-day recap, a pasted list, or after time.propose_entries has been confirmed. Each entry is validated independently; partial success is reported per row with the same statuses as time.log_entry. Do not call before the user has confirmed proposed entries.

NameRequiredDescriptionDefault
entriesYes
time.log_entryLog a time entryA
Idempotent
Inspect

Use this when the user states work they did with a duration or a start and end time, for today or a past date. Do not use for future plans, reminders, timers, or calendar scheduling. If the project is ambiguous this returns candidates instead of logging; ask the user and retry. Never auto-creates a project. Echoes the parsed duration and resolved date so you can confirm.

NameRequiredDescriptionDefault
endNoISO datetime or HH:MM. Optional.
dateNoYYYY-MM-DD. Defaults to today in the workspace timezone. Do not guess today; omit it.
rateNoPer-entry hourly rate override in workspace currency. Rare; omit normally.
tagsNo
startNoISO datetime or HH:MM (workspace timezone assumed if no offset). Optional.
projectNoProject name, alias, or id. Fuzzy-matched server-side; returns candidates when ambiguous. Never auto-creates.
billableNoDefaults to the project's billable_default.
durationNoLenient: "2h30m", "2.5", "150", "1:45", "90 min". Omit when start and end are given.
descriptionNoWhat was done, in the user's words. Keep it short; this appears on invoices.
idempotency_keyNoOptional. Retrying with the same key never double-logs.
time.propose_entriesPropose time entries from activityA
Read-onlyIdempotent
Inspect

Use this when the user wants to reconstruct or catch up a day or week from calendar events, commits, pull requests, tickets, or notes you have already gathered from other tools or the user. Pass the raw activity; this returns proposed entries mapped to the user's projects with confidence scores, plus unmatched items, detected gaps, and overlaps. It saves nothing. Present the proposal, confirm with the user, then call time.log_entries_batch with the confirmed entry objects. Do not use for logging a single known entry (use time.log_entry).

NameRequiredDescriptionDefault
activityYes
date_rangeNoDefaults to the span of the activity
default_duration_minNoFor items without a duration. Default varies by source (calendar 60, git 30, tickets 45).
target_hours_per_dayNoFor gap detection. Default 8.
already_logged_handlingNoDefault "flag": include items that look already logged but mark them.
time.reportHours and billing summaryA
Read-onlyIdempotent
Inspect

Use this when the user asks how many hours they worked, billable vs. non-billable, hours by day, project, or client, or how much is unbilled. Returns aggregates, not individual entries (use time.list_entries for those). Defaults to the current week in the workspace timezone. With group_by "day" this renders a week grid.

NameRequiredDescriptionDefault
clientNo
projectNo
end_dateNo
group_byNoDefault "none". Use "day" for weekly views.
start_dateNo
time.update_entryEdit a time entryA
Destructive
Inspect

Use this when the user corrects a duration, description, project, date, times, tags, or billable flag on an existing entry. Requires the entry id (from time.list_entries or a previous log result). Cannot edit entries already on a sent invoice; returns an error explaining why. Returns the previous and updated entry.

NameRequiredDescriptionDefault
endNo
dateNo
rateNo
tagsNo
startNo
projectNo
billableNo
durationNo
entry_idYes
descriptionNo
workspace.create_clientCreate a clientAInspect

Use this when the user names a client that does not exist and confirms it should be created, or asks to add a client with a rate or billing email. Do not create clients speculatively while logging time; ask first. Free plan allows one client; the error includes upgrade_url when the limit is hit.

NameRequiredDescriptionDefault
nameYes
rateNoDefault hourly rate for this client, in workspace currency
addressNo
billing_emailNo
net_terms_daysNoDefault 30
workspace.create_projectCreate a projectAInspect

Use this when the user names a project that does not exist and confirms it should be created, or asks to add one with a rate. Aliases help future fuzzy matching ("acme site", "landing page"). Do not create projects speculatively; ask first.

NameRequiredDescriptionDefault
nameYes
rateNoHourly rate override; otherwise the client or workspace rate applies
clientNoClient name or id. Required for invoicing.
aliasesNo
billable_defaultNoDefault true
workspace.list_projectsList clients, projects, and ratesA
Read-onlyIdempotent
Inspect

Use this when the user asks what projects or clients exist, what a rate is, or when you need to resolve an ambiguous project name before logging time. Returns clients with their projects, aliases, and effective rates. Cheap to call. Prefer reading the workspace://context resource once if the host supports resources.

NameRequiredDescriptionDefault
include_archivedNo

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables Czech freelancers to issue legally complete invoices and credit notes, record expenses and payments, generate VAT and income-tax filings, and manage bookkeeping from an AI chat or a local dashboard.
    25
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    UseHourly is a free, open-source timesheet for freelancers. Log your day in seconds, then turn the hours into a PDF invoice. Its remote MCP server gives any AI assistant 30 tools to log and edit time, run timers, manage clients and projects, create invoices and read annual reports. It uses Streamable HTTP with bearer tokens that can be read-only or read-write, set to expire, and are revoked on a p
    30
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.