Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,549Letters: 14Defects: 1,324counted 2 min ago
teppi

Server definition

Hash
sha256:9587f06ce7eb1dd61c62fde44a12351dbe7d804b77bbce6811329a5034393542
What it is
What a remote MCP server returned when asked what it offers: 20 tools

The blob, as servednamed by its sha256

{ "instructions": null, "tools": [ { "description": "Create a time entry. Requires project_id, task_id and spent_date. Provide `hours` to log a specific duration; OR provide `started_time` (+ optional `ended_time`) for a timestamped entry; OR omit both to start a running timer (on a timestamp-tracking account). Use harvest_list_project_assignments to find valid project_id + task_id. Harvest REST: POST /time_entries. WRITE — creates data.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "ended_time": { "description": "End time for a timestamped entry, e.g. '9:30am'.", "type": "string" }, "hours": { "description": "Duration in decimal hours, e.g. 1.5. Omit to start a running timer.", "minimum": 0, "type": "number" }, "notes": { "description": "Notes for the time entry.", "type": "string" }, "project_id": { "description": "The project id to log time against (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "spent_date": { "description": "The date the time was spent, yyyy-mm-dd (required).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "started_time": { "description": "Start time for a timestamped entry, e.g. '8:00am'.", "type": "string" }, "task_id": { "description": "The task id within the project (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "user_id": { "description": "Log on behalf of another user (defaults to the authenticated user; requires permission).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "project_id", "task_id", "spent_date" ], "type": "object" }, "name": "harvest_create_time_entry", "outputSchema": null }, { "description": "Permanently delete a time entry by id. This cannot be undone. Harvest REST: DELETE /time_entries/{id}. WRITE — destroys data.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "time_entry_id": { "description": "The time entry id to delete (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "time_entry_id" ], "type": "object" }, "name": "harvest_delete_time_entry", "outputSchema": null }, { "description": "Retrieve a single client by id. Harvest REST: GET /clients/{id}.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "client_id": { "description": "The client id (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "client_id" ], "type": "object" }, "name": "harvest_get_client", "outputSchema": null }, { "description": "Retrieve the company/account settings for the authenticated account (name, currency, time/date formats, week start, feature flags). Harvest REST: GET /company.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "harvest_get_company", "outputSchema": null }, { "description": "Retrieve the currently authenticated user (whom the access token belongs to). Harvest REST: GET /users/me.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "harvest_get_current_user", "outputSchema": null }, { "description": "Retrieve a single invoice by id, including its line items. Harvest REST: GET /invoices/{id}.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "invoice_id": { "description": "The invoice id (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "invoice_id" ], "type": "object" }, "name": "harvest_get_invoice", "outputSchema": null }, { "description": "Retrieve a single project by id. Harvest REST: GET /projects/{id}.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "project_id": { "description": "The project id (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "project_id" ], "type": "object" }, "name": "harvest_get_project", "outputSchema": null }, { "description": "Retrieve a single time entry by id. Harvest REST: GET /time_entries/{id}.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "time_entry_id": { "description": "The time entry id (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "time_entry_id" ], "type": "object" }, "name": "harvest_get_time_entry", "outputSchema": null }, { "description": "List clients, optionally filtered by active status or updated-since. Paginated. Harvest REST: GET /clients.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "is_active": { "description": "Only active (true) or archived (false) clients.", "type": "boolean" }, "page": { "description": "Page number (1-based) for pagination.", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (1–2000, Harvest default 2000).", "maximum": 2000, "minimum": 1, "type": "integer" }, "updated_since": { "description": "Only clients updated since this ISO-8601 datetime.", "type": "string" } }, "type": "object" }, "name": "harvest_list_clients", "outputSchema": null }, { "description": "List estimates, optionally filtered by client, state, date range, or updated-since. Paginated. Harvest REST: GET /estimates.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "client_id": { "description": "Filter to a single client id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "from": { "description": "Only estimates issued on/after this date, yyyy-mm-dd.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "page": { "description": "Page number (1-based) for pagination.", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (1–2000, Harvest default 2000).", "maximum": 2000, "minimum": 1, "type": "integer" }, "state": { "description": "Filter by estimate state: draft, sent, accepted or declined.", "enum": [ "draft", "sent", "accepted", "declined" ], "type": "string" }, "to": { "description": "Only estimates issued on/before this date, yyyy-mm-dd.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "updated_since": { "description": "Only estimates updated since this ISO-8601 datetime.", "type": "string" } }, "type": "object" }, "name": "harvest_list_estimates", "outputSchema": null }, { "description": "List expenses, optionally filtered by user, client, project, date range, billed status, or updated-since. Paginated. Harvest REST: GET /expenses.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "client_id": { "description": "Filter to a single client id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "from": { "description": "Only expenses on/after this date, yyyy-mm-dd.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "is_billed": { "description": "Only billed (true) or unbilled (false) expenses.", "type": "boolean" }, "page": { "description": "Page number (1-based) for pagination.", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (1–2000, Harvest default 2000).", "maximum": 2000, "minimum": 1, "type": "integer" }, "project_id": { "description": "Filter to a single project id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "to": { "description": "Only expenses on/before this date, yyyy-mm-dd.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "updated_since": { "description": "Only expenses updated since this ISO-8601 datetime.", "type": "string" }, "user_id": { "description": "Filter to a single user id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "type": "object" }, "name": "harvest_list_expenses", "outputSchema": null }, { "description": "List invoices, optionally filtered by client, project, state, date range, or updated-since. Paginated. Harvest REST: GET /invoices.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "client_id": { "description": "Filter to a single client id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "from": { "description": "Only invoices issued on/after this date, yyyy-mm-dd.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "page": { "description": "Page number (1-based) for pagination.", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (1–2000, Harvest default 2000).", "maximum": 2000, "minimum": 1, "type": "integer" }, "project_id": { "description": "Filter to a single project id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "state": { "description": "Filter by invoice state: draft, open, paid or closed.", "enum": [ "draft", "open", "paid", "closed" ], "type": "string" }, "to": { "description": "Only invoices issued on/before this date, yyyy-mm-dd.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "updated_since": { "description": "Only invoices updated since this ISO-8601 datetime.", "type": "string" } }, "type": "object" }, "name": "harvest_list_invoices", "outputSchema": null }, { "description": "List the authenticated user's active project assignments — the projects and their assignable tasks the current user can log time against (use this to find the project_id + task_id for harvest_create_time_entry). Paginated. Harvest REST: GET /users/me/project_assignments.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "page": { "description": "Page number (1-based) for pagination.", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (1–2000, Harvest default 2000).", "maximum": 2000, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "harvest_list_project_assignments", "outputSchema": null }, { "description": "List projects, optionally filtered by active status or client, or updated-since. Paginated. Harvest REST: GET /projects.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "client_id": { "description": "Filter to a single client id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "is_active": { "description": "Only active (true) or archived (false) projects.", "type": "boolean" }, "page": { "description": "Page number (1-based) for pagination.", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (1–2000, Harvest default 2000).", "maximum": 2000, "minimum": 1, "type": "integer" }, "updated_since": { "description": "Only projects updated since this ISO-8601 datetime.", "type": "string" } }, "type": "object" }, "name": "harvest_list_projects", "outputSchema": null }, { "description": "List tasks (the billable/non-billable work categories that can be assigned to projects), optionally filtered by active status or updated-since. Paginated. Harvest REST: GET /tasks.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "is_active": { "description": "Only active (true) or archived (false) tasks.", "type": "boolean" }, "page": { "description": "Page number (1-based) for pagination.", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (1–2000, Harvest default 2000).", "maximum": 2000, "minimum": 1, "type": "integer" }, "updated_since": { "description": "Only tasks updated since this ISO-8601 datetime.", "type": "string" } }, "type": "object" }, "name": "harvest_list_tasks", "outputSchema": null }, { "description": "List time entries, optionally filtered by user, project, client, task, date range, running/billed status, or updated-since. Paginated. Harvest REST: GET /time_entries.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "client_id": { "description": "Filter to a single client id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "from": { "description": "Only entries on/after this date, yyyy-mm-dd.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "is_billed": { "description": "Only billed (true) or unbilled (false) entries.", "type": "boolean" }, "is_running": { "description": "Only running (true) or only stopped (false) entries.", "type": "boolean" }, "page": { "description": "Page number (1-based) for pagination.", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (1–2000, Harvest default 2000).", "maximum": 2000, "minimum": 1, "type": "integer" }, "project_id": { "description": "Filter to a single project id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "task_id": { "description": "Filter to a single task id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "to": { "description": "Only entries on/before this date, yyyy-mm-dd.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "updated_since": { "description": "Only entries updated since this ISO-8601 datetime.", "type": "string" }, "user_id": { "description": "Filter to a single user id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "type": "object" }, "name": "harvest_list_time_entries", "outputSchema": null }, { "description": "List users in the account, optionally filtered by active status or updated-since. Paginated. Harvest REST: GET /users.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "is_active": { "description": "Only active (true) or archived (false) users.", "type": "boolean" }, "page": { "description": "Page number (1-based) for pagination.", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (1–2000, Harvest default 2000).", "maximum": 2000, "minimum": 1, "type": "integer" }, "updated_since": { "description": "Only users updated since this ISO-8601 datetime.", "type": "string" } }, "type": "object" }, "name": "harvest_list_users", "outputSchema": null }, { "description": "Restart a previously stopped time entry, resuming its timer (error if it is already running). Harvest REST: PATCH /time_entries/{id}/restart. WRITE — modifies data.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "time_entry_id": { "description": "The stopped time entry id to restart (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "time_entry_id" ], "type": "object" }, "name": "harvest_restart_time_entry", "outputSchema": null }, { "description": "Stop a currently running time entry (no-op error if it is already stopped). Harvest REST: PATCH /time_entries/{id}/stop. WRITE — modifies data.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "time_entry_id": { "description": "The running time entry id to stop (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "time_entry_id" ], "type": "object" }, "name": "harvest_stop_time_entry", "outputSchema": null }, { "description": "Update an existing time entry's hours, notes, spent date, or project/task. Only the fields you provide are changed. Harvest REST: PATCH /time_entries/{id}. WRITE — modifies data.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "ended_time": { "description": "Change the end time, e.g. '9:30am'.", "type": "string" }, "hours": { "description": "Change the duration in decimal hours, e.g. 2.25.", "minimum": 0, "type": "number" }, "notes": { "description": "Change the notes.", "type": "string" }, "project_id": { "description": "Reassign to a different project id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "spent_date": { "description": "Change the date, yyyy-mm-dd.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "started_time": { "description": "Change the start time, e.g. '8:00am'.", "type": "string" }, "task_id": { "description": "Reassign to a different task id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "time_entry_id": { "description": "The time entry id to update (required).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "time_entry_id" ], "type": "object" }, "name": "harvest_update_time_entry", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:9587f06ce7eb1dd61c62fde44a12351dbe7d804b77bbce6811329a5034393542 | sha256sum