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 yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:9587f06ce7eb1dd61c62fde44a12351dbe7d804b77bbce6811329a5034393542 | sha256sum