veryfront 0.1.625 → 0.1.626
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/deno.js +1 -1
- package/esm/src/agent/runtime/current-run-tool-state.d.ts +36 -0
- package/esm/src/agent/runtime/current-run-tool-state.d.ts.map +1 -0
- package/esm/src/agent/runtime/current-run-tool-state.js +246 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +65 -9
- package/esm/src/integrations/_data.js +7 -7
- package/esm/src/integrations/_tool_summaries.d.ts.map +1 -1
- package/esm/src/integrations/_tool_summaries.js +788 -0
- package/esm/src/integrations/schema.d.ts +4 -4
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const connectors = [
|
|
2
2
|
{ "name": "airtable", "displayName": "Airtable", "icon": "airtable.svg", "description": "Read and write records in Airtable bases and tables", "auth": { "type": "oauth2", "provider": "airtable", "authorizationUrl": "https://airtable.com/oauth2/v1/authorize", "tokenUrl": "https://airtable.com/oauth2/v1/token", "scopes": ["data.records:read", "data.records:write", "schema.bases:read", "schema.bases:write"], "tokenAuthMethod": "basic", "pkce": true, "requiredApis": [{ "name": "Airtable OAuth Integration", "enableUrl": "https://airtable.com/create/oauth" }] }, "envVars": [{ "name": "AIRTABLE_CLIENT_ID", "description": "Airtable OAuth Client ID (from your OAuth integration)", "required": true, "sensitive": false, "docsUrl": "https://airtable.com/create/oauth" }, { "name": "AIRTABLE_CLIENT_SECRET", "description": "Airtable OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://airtable.com/create/oauth" }], "tools": [{ "id": "list_bases", "name": "List Bases", "description": "List all accessible Airtable bases", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.airtable.com/v0/meta/bases", "params": { "pageSize": { "type": "number", "in": "query", "description": "Maximum number of bases to return", "default": 100 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Airtable" } }, "response": { "transform": "bases" } } }, { "id": "get_base", "name": "Get Base", "description": "Get schema information for a specific base", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.airtable.com/v0/meta/bases/{baseId}/tables", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true } } } }, { "id": "list_records", "name": "List Records", "description": "List records from a table with optional filtering", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.airtable.com/v0/{baseId}/{tableIdOrName}", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true }, "tableIdOrName": { "type": "string", "in": "path", "description": "Table ID or URL-encoded table name", "required": true }, "view": { "type": "string", "in": "query", "description": "Optional view name or ID" }, "filterByFormula": { "type": "string", "in": "query", "description": "Airtable formula used to filter returned records" }, "maxRecords": { "type": "number", "in": "query", "description": "Maximum records to return" }, "pageSize": { "type": "number", "in": "query", "description": "Records per page", "default": 100 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Airtable" } }, "response": { "transform": "records" } } }, { "id": "get_record", "name": "Get Record", "description": "Get a specific record by ID", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.airtable.com/v0/{baseId}/{tableIdOrName}/{recordId}", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true }, "tableIdOrName": { "type": "string", "in": "path", "description": "Table ID or URL-encoded table name", "required": true }, "recordId": { "type": "string", "in": "path", "description": "Airtable record ID", "required": true } } } }, { "id": "create_record", "name": "Create Record", "description": "Create a new record in a table", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.airtable.com/v0/{baseId}/{tableIdOrName}", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true }, "tableIdOrName": { "type": "string", "in": "path", "description": "Table ID or URL-encoded table name", "required": true } }, "body": { "fields": { "type": "object", "description": "Field values for the new record", "required": true }, "typecast": { "type": "boolean", "description": "Allow Airtable to typecast field values", "default": false } } } }, { "id": "create_records", "name": "Create Records", "description": "Create multiple records in a table", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.airtable.com/v0/{baseId}/{tableIdOrName}", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true }, "tableIdOrName": { "type": "string", "in": "path", "description": "Table ID or URL-encoded table name", "required": true } }, "body": { "records": { "type": "array", "description": "Array of 1-10 record objects with fields", "required": true }, "typecast": { "type": "boolean", "description": "Allow Airtable to typecast field values", "default": false } }, "response": { "transform": "records" } } }, { "id": "update_record", "name": "Update Record", "description": "Update fields on an existing record", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.airtable.com/v0/{baseId}/{tableIdOrName}/{recordId}", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true }, "tableIdOrName": { "type": "string", "in": "path", "description": "Table ID or URL-encoded table name", "required": true }, "recordId": { "type": "string", "in": "path", "description": "Airtable record ID", "required": true } }, "body": { "fields": { "type": "object", "description": "Field values to update", "required": true }, "typecast": { "type": "boolean", "description": "Allow Airtable to typecast field values", "default": false } } } }, { "id": "delete_record", "name": "Delete Record", "description": "Delete a record from a table", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://api.airtable.com/v0/{baseId}/{tableIdOrName}/{recordId}", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true }, "tableIdOrName": { "type": "string", "in": "path", "description": "Table ID or URL-encoded table name", "required": true }, "recordId": { "type": "string", "in": "path", "description": "Airtable record ID", "required": true } } } }, { "id": "create_table", "name": "Create Table", "description": "Create a new table in an Airtable base", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.airtable.com/v0/meta/bases/{baseId}/tables", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true } }, "body": { "name": { "type": "string", "description": "Table name", "required": true }, "description": { "type": "string", "description": "Table description" }, "fields": { "type": "array", "description": "At least one initial field definition for the table", "required": true } } } }, { "id": "update_table", "name": "Update Table", "description": "Update table metadata such as name or description using the table ID", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.airtable.com/v0/meta/bases/{baseId}/tables/{tableId}", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true }, "tableId": { "type": "string", "in": "path", "description": "Airtable table ID", "required": true } }, "body": { "name": { "type": "string", "description": "New table name" }, "description": { "type": "string", "description": "New table description" } } } }, { "id": "create_field", "name": "Create Field", "description": "Create a new field in an Airtable table", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.airtable.com/v0/meta/bases/{baseId}/tables/{tableId}/fields", "params": { "baseId": { "type": "string", "in": "path", "description": "Airtable base ID", "required": true }, "tableId": { "type": "string", "in": "path", "description": "Airtable table ID", "required": true } }, "body": { "name": { "type": "string", "description": "Field name", "required": true }, "type": { "type": "string", "description": "Airtable field type", "required": true }, "description": { "type": "string", "description": "Field description" }, "options": { "type": "object", "description": "Field type-specific options" } } } }], "prompts": [{ "id": "query_data", "title": "Query my data", "prompt": "Search and query records from my Airtable bases. Find specific information across tables.", "category": "productivity", "icon": "search" }, { "id": "add_record", "title": "Add a record", "prompt": "Create a new record in an Airtable table with the specified field values.", "category": "productivity", "icon": "plus" }, { "id": "analyze_base", "title": "Analyze base structure", "prompt": "Analyze the structure and schema of an Airtable base, including all tables and their fields.", "category": "productivity", "icon": "document" }], "suggestedWith": ["gmail", "slack", "notion"] },
|
|
3
3
|
{ "name": "anthropic", "displayName": "Anthropic", "icon": "anthropic.svg", "description": "Integrate with Anthropic Admin API to manage workspaces, monitor usage, and access organization data", "auth": { "type": "api-key", "envVars": { "ANTHROPIC_ADMIN_API_KEY": { "description": "Admin API key for Anthropic organization management", "required": true } } }, "tools": [{ "name": "list-workspaces", "description": "List all workspaces in the organization" }, { "name": "get-usage", "description": "Get API usage statistics for a date range" }, { "name": "list-api-keys", "description": "List API keys for a workspace or organization" }, { "name": "list-members", "description": "List all members in the organization" }, { "name": "get-organization", "description": "Get organization details and settings" }] },
|
|
4
|
-
{ "name": "asana", "displayName": "Asana", "icon": "asana.svg", "description": "Manage tasks, projects, and teams in Asana", "auth": { "type": "oauth2", "provider": "asana", "authorizationUrl": "https://app.asana.com/-/oauth_authorize", "tokenUrl": "https://app.asana.com/-/oauth_token", "scopes": ["default"], "requiredApis": [{ "name": "Asana Developer Console", "enableUrl": "https://app.asana.com/0/developer-console" }] }, "envVars": [{ "name": "ASANA_CLIENT_ID", "description": "Asana OAuth Client ID", "required": true, "sensitive": false, "docsUrl": "https://developers.asana.com/docs/oauth" }, { "name": "ASANA_CLIENT_SECRET", "description": "Asana OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://developers.asana.com/docs/oauth" }], "tools": [{ "id": "list_tasks", "name": "List Tasks", "description": "List tasks in a project or assigned to a user", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/tasks", "params": { "project": { "type": "string", "in": "query", "description": "Asana project GID to list tasks from" }, "assignee": { "type": "string", "in": "query", "description": "Assignee user GID, 'me', or omit when project is provided" }, "workspace": { "type": "string", "in": "query", "description": "Workspace GID for assignee-based task lists" }, "completed_since": { "type": "string", "in": "query", "description": "Only return tasks completed since this ISO timestamp", "default": "now" }, "limit": { "type": "number", "in": "query", "description": "Maximum tasks to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" } }, "response": { "transform": "data" } } }, { "id": "get_task", "name": "Get Task", "description": "Get details of a specific task", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true }, "opt_fields": { "type": "string", "in": "query", "description": "Comma-separated task fields to return" } }, "response": { "transform": "data" } } }, { "id": "create_task", "name": "Create Task", "description": "Create a new task in a project", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://app.asana.com/api/1.0/tasks", "body": { "data": { "type": "object", "description": "Asana task payload with name, projects, workspace, assignee, notes, due_on, etc.", "required": true } }, "response": { "transform": "data" } } }, { "id": "update_task", "name": "Update Task", "description": "Update an existing task", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true } }, "body": { "data": { "type": "object", "description": "Asana task fields to update", "required": true } }, "response": { "transform": "data" } } }, { "id": "delete_task", "name": "Delete Task", "description": "Delete an Asana task by GID", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true } } } }, { "id": "list_projects", "name": "List Projects", "description": "List all projects in the workspace", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/projects", "params": { "workspace": { "type": "string", "in": "query", "description": "Workspace GID to list projects from" }, "team": { "type": "string", "in": "query", "description": "Team GID to list projects from" }, "archived": { "type": "boolean", "in": "query", "description": "Whether to include archived projects", "default": false }, "limit": { "type": "number", "in": "query", "description": "Maximum projects to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" } }, "response": { "transform": "data" } } }, { "id": "list_workspaces", "name": "List Workspaces", "description": "List Asana workspaces accessible to the authenticated user", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/workspaces", "params": { "limit": { "type": "number", "in": "query", "description": "Maximum workspaces to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" } }, "response": { "transform": "data" } } }, { "id": "list_users", "name": "List Users", "description": "List users in an Asana workspace", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/users", "params": { "workspace": { "type": "string", "in": "query", "description": "Workspace GID", "required": true }, "team": { "type": "string", "in": "query", "description": "Optional team GID" }, "limit": { "type": "number", "in": "query", "description": "Maximum users to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" }, "opt_fields": { "type": "string", "in": "query", "description": "Comma-separated user fields", "default": "gid,name,email" } }, "response": { "transform": "data" } } }, { "id": "list_teams", "name": "List Teams", "description": "List teams in an Asana workspace", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/workspaces/{workspaceGid}/teams", "params": { "workspaceGid": { "type": "string", "in": "path", "description": "Workspace GID", "required": true }, "limit": { "type": "number", "in": "query", "description": "Maximum teams to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" }, "opt_fields": { "type": "string", "in": "query", "description": "Comma-separated team fields", "default": "gid,name,description" } }, "response": { "transform": "data" } } }, { "id": "add_task_comment", "name": "Add Task Comment", "description": "Add a story/comment to an Asana task", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}/stories", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true } }, "body": { "data": { "type": "object", "description": "Story payload, e.g. { text: 'Comment text' }", "required": true } }, "response": { "transform": "data" } } }, { "id": "list_task_comments", "name": "List Task Comments", "description": "List comment stories for an Asana task", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}/stories", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true }, "limit": { "type": "number", "in": "query", "description": "Maximum stories to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" }, "opt_fields": { "type": "string", "in": "query", "description": "Comma-separated story fields", "default": "gid,type,text,created_at,created_by.name" } }, "response": { "transform": "data" } } }], "prompts": [{ "id": "my_tasks", "title": "Show my tasks", "prompt": "List all tasks assigned to me in Asana with their due dates and priorities.", "category": "productivity", "icon": "list" }, { "id": "create_task", "title": "Create a task", "prompt": "Create a new task with a title, description, due date, and assignee.", "category": "productivity", "icon": "plus" }], "suggestedWith": ["slack", "notion", "calendar"] },
|
|
4
|
+
{ "name": "asana", "displayName": "Asana", "icon": "asana.svg", "description": "Manage tasks, projects, and teams in Asana", "auth": { "type": "oauth2", "provider": "asana", "authorizationUrl": "https://app.asana.com/-/oauth_authorize", "tokenUrl": "https://app.asana.com/-/oauth_token", "scopes": ["default"], "requiredApis": [{ "name": "Asana Developer Console", "enableUrl": "https://app.asana.com/0/developer-console" }] }, "envVars": [{ "name": "ASANA_CLIENT_ID", "description": "Asana OAuth Client ID", "required": true, "sensitive": false, "docsUrl": "https://developers.asana.com/docs/oauth" }, { "name": "ASANA_CLIENT_SECRET", "description": "Asana OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://developers.asana.com/docs/oauth" }], "tools": [{ "id": "list_tasks", "name": "List Tasks", "description": "List tasks in a project or assigned to a user", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/tasks", "params": { "project": { "type": "string", "in": "query", "description": "Asana project GID to list tasks from" }, "assignee": { "type": "string", "in": "query", "description": "Assignee user GID, 'me', or omit when project is provided" }, "workspace": { "type": "string", "in": "query", "description": "Workspace GID for assignee-based task lists" }, "completed_since": { "type": "string", "in": "query", "description": "Only return tasks completed since this ISO timestamp", "default": "now" }, "limit": { "type": "number", "in": "query", "description": "Maximum tasks to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" } }, "response": { "transform": "data", "historicalSummary": { "collectionKeys": ["data", "tasks"], "collectionName": "tasks", "itemFields": [{ "name": "id" }, { "name": "gid" }, { "name": "key" }, { "name": "node_id" }, { "name": "name" }, { "name": "title" }, { "name": "summary" }, { "name": "subject" }, { "name": "number" }, { "name": "state" }, { "name": "status" }, { "name": "url" }, { "name": "html_url" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_by", "kind": "contact" }, { "name": "assignee", "kind": "contact" }, { "name": "owner", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "tasks details and provider-specific payload fields" } } } }, { "id": "get_task", "name": "Get Task", "description": "Get details of a specific task", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true }, "opt_fields": { "type": "string", "in": "query", "description": "Comma-separated task fields to return" } }, "response": { "transform": "data" } } }, { "id": "create_task", "name": "Create Task", "description": "Create a new task in a project", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://app.asana.com/api/1.0/tasks", "body": { "data": { "type": "object", "description": "Asana task payload with name, projects, workspace, assignee, notes, due_on, etc.", "required": true } }, "response": { "transform": "data" } } }, { "id": "update_task", "name": "Update Task", "description": "Update an existing task", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true } }, "body": { "data": { "type": "object", "description": "Asana task fields to update", "required": true } }, "response": { "transform": "data" } } }, { "id": "delete_task", "name": "Delete Task", "description": "Delete an Asana task by GID", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true } } } }, { "id": "list_projects", "name": "List Projects", "description": "List all projects in the workspace", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/projects", "params": { "workspace": { "type": "string", "in": "query", "description": "Workspace GID to list projects from" }, "team": { "type": "string", "in": "query", "description": "Team GID to list projects from" }, "archived": { "type": "boolean", "in": "query", "description": "Whether to include archived projects", "default": false }, "limit": { "type": "number", "in": "query", "description": "Maximum projects to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" } }, "response": { "transform": "data", "historicalSummary": { "collectionKeys": ["data", "projects"], "collectionName": "projects", "itemFields": [{ "name": "id" }, { "name": "gid" }, { "name": "key" }, { "name": "node_id" }, { "name": "name" }, { "name": "title" }, { "name": "summary" }, { "name": "subject" }, { "name": "number" }, { "name": "state" }, { "name": "status" }, { "name": "url" }, { "name": "html_url" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_by", "kind": "contact" }, { "name": "assignee", "kind": "contact" }, { "name": "owner", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "projects details and provider-specific payload fields" } } } }, { "id": "list_workspaces", "name": "List Workspaces", "description": "List Asana workspaces accessible to the authenticated user", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/workspaces", "params": { "limit": { "type": "number", "in": "query", "description": "Maximum workspaces to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" } }, "response": { "transform": "data", "historicalSummary": { "collectionKeys": ["data", "workspaces"], "collectionName": "workspaces", "itemFields": [{ "name": "id" }, { "name": "gid" }, { "name": "key" }, { "name": "node_id" }, { "name": "name" }, { "name": "title" }, { "name": "summary" }, { "name": "subject" }, { "name": "number" }, { "name": "state" }, { "name": "status" }, { "name": "url" }, { "name": "html_url" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_by", "kind": "contact" }, { "name": "assignee", "kind": "contact" }, { "name": "owner", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "workspaces details and provider-specific payload fields" } } } }, { "id": "list_users", "name": "List Users", "description": "List users in an Asana workspace", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/users", "params": { "workspace": { "type": "string", "in": "query", "description": "Workspace GID", "required": true }, "team": { "type": "string", "in": "query", "description": "Optional team GID" }, "limit": { "type": "number", "in": "query", "description": "Maximum users to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" }, "opt_fields": { "type": "string", "in": "query", "description": "Comma-separated user fields", "default": "gid,name,email" } }, "response": { "transform": "data", "historicalSummary": { "collectionKeys": ["data", "users"], "collectionName": "users", "itemFields": [{ "name": "gid" }, { "name": "name" }, { "name": "email" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "user profile details and provider-specific payload fields" } } } }, { "id": "list_teams", "name": "List Teams", "description": "List teams in an Asana workspace", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/workspaces/{workspaceGid}/teams", "params": { "workspaceGid": { "type": "string", "in": "path", "description": "Workspace GID", "required": true }, "limit": { "type": "number", "in": "query", "description": "Maximum teams to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" }, "opt_fields": { "type": "string", "in": "query", "description": "Comma-separated team fields", "default": "gid,name,description" } }, "response": { "transform": "data", "historicalSummary": { "collectionKeys": ["data", "teams"], "collectionName": "teams", "itemFields": [{ "name": "id" }, { "name": "gid" }, { "name": "key" }, { "name": "node_id" }, { "name": "name" }, { "name": "title" }, { "name": "summary" }, { "name": "subject" }, { "name": "number" }, { "name": "state" }, { "name": "status" }, { "name": "url" }, { "name": "html_url" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_by", "kind": "contact" }, { "name": "assignee", "kind": "contact" }, { "name": "owner", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "teams details and provider-specific payload fields" } } } }, { "id": "add_task_comment", "name": "Add Task Comment", "description": "Add a story/comment to an Asana task", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}/stories", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true } }, "body": { "data": { "type": "object", "description": "Story payload, e.g. { text: 'Comment text' }", "required": true } }, "response": { "transform": "data" } } }, { "id": "list_task_comments", "name": "List Task Comments", "description": "List comment stories for an Asana task", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://app.asana.com/api/1.0/tasks/{taskGid}/stories", "params": { "taskGid": { "type": "string", "in": "path", "description": "Asana task GID", "required": true }, "limit": { "type": "number", "in": "query", "description": "Maximum stories to return", "default": 50 }, "offset": { "type": "string", "in": "query", "description": "Pagination offset from Asana" }, "opt_fields": { "type": "string", "in": "query", "description": "Comma-separated story fields", "default": "gid,type,text,created_at,created_by.name" } }, "response": { "transform": "data", "historicalSummary": { "collectionKeys": ["data", "comments", "stories"], "collectionName": "comments", "itemFields": [{ "name": "gid" }, { "name": "type" }, { "name": "text", "maxLength": 300 }, { "name": "created_at" }, { "name": "created_by", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "full comment story payloads and provider-specific fields" } } } }], "prompts": [{ "id": "my_tasks", "title": "Show my tasks", "prompt": "List all tasks assigned to me in Asana with their due dates and priorities.", "category": "productivity", "icon": "list" }, { "id": "create_task", "title": "Create a task", "prompt": "Create a new task with a title, description, due date, and assignee.", "category": "productivity", "icon": "plus" }], "suggestedWith": ["slack", "notion", "calendar"] },
|
|
5
5
|
{ "name": "aws", "displayName": "Amazon Web Services", "icon": "aws.svg", "description": "Integration with AWS services including S3, EC2, and Lambda", "auth": { "type": "api-key", "fields": [{ "name": "accessKeyId", "label": "AWS Access Key ID", "type": "string", "required": true, "envVar": "AWS_ACCESS_KEY_ID" }, { "name": "secretAccessKey", "label": "AWS Secret Access Key", "type": "password", "required": true, "envVar": "AWS_SECRET_ACCESS_KEY" }, { "name": "region", "label": "AWS Region", "type": "string", "required": true, "envVar": "AWS_REGION", "default": "us-east-1" }] }, "envVars": [{ "name": "AWS_ACCESS_KEY_ID", "description": "AWS Access Key ID", "required": true }, { "name": "AWS_SECRET_ACCESS_KEY", "description": "AWS Secret Access Key", "required": true, "sensitive": true }, { "name": "AWS_REGION", "description": "AWS Region (e.g. us-east-1)", "required": true, "default": "us-east-1" }], "tools": [{ "name": "list-s3-buckets", "description": "List all S3 buckets in your AWS account", "file": "tools/list-s3-buckets.ts" }, { "name": "list-s3-objects", "description": "List objects in a specific S3 bucket", "file": "tools/list-s3-objects.ts" }, { "name": "get-s3-object", "description": "Get the contents of an object from S3", "file": "tools/get-s3-object.ts" }, { "name": "list-ec2-instances", "description": "List EC2 instances in your AWS account", "file": "tools/list-ec2-instances.ts" }, { "name": "list-lambda-functions", "description": "List Lambda functions in your AWS account", "file": "tools/list-lambda-functions.ts" }], "dependencies": { "@aws-sdk/client-s3": "^3.600.0", "@aws-sdk/client-ec2": "^3.600.0", "@aws-sdk/client-lambda": "^3.600.0", "@aws-sdk/credential-providers": "^3.600.0" } },
|
|
6
6
|
{ "name": "bitbucket", "displayName": "Bitbucket", "icon": "bitbucket.svg", "description": "Manage repositories, pull requests, and issues on Bitbucket", "auth": { "type": "oauth2", "provider": "bitbucket", "authorizationUrl": "https://bitbucket.org/site/oauth2/authorize", "tokenUrl": "https://bitbucket.org/site/oauth2/access_token", "scopes": ["repository", "pullrequest", "issue", "account"] }, "envVars": [{ "name": "BITBUCKET_CLIENT_ID", "description": "Bitbucket OAuth Consumer Key", "required": true, "sensitive": false, "docsUrl": "https://support.atlassian.com/bitbucket-cloud/docs/use-oauth-on-bitbucket-cloud/" }, { "name": "BITBUCKET_CLIENT_SECRET", "description": "Bitbucket OAuth Consumer Secret", "required": true, "sensitive": true, "docsUrl": "https://support.atlassian.com/bitbucket-cloud/docs/use-oauth-on-bitbucket-cloud/" }], "tools": [{ "id": "list_repositories", "name": "List Repositories", "description": "Get list of user's repositories", "requiresWrite": false }, { "id": "list_pull_requests", "name": "List Pull Requests", "description": "Get pull requests for a repository", "requiresWrite": false }, { "id": "create_pull_request", "name": "Create Pull Request", "description": "Create a new pull request", "requiresWrite": true }, { "id": "list_issues", "name": "List Issues", "description": "Get issues for a repository", "requiresWrite": false }], "prompts": [{ "id": "review_prs", "title": "Review my pull requests", "prompt": "Show me my open pull requests on Bitbucket and help me review them. Summarize the changes and any comments.", "category": "development", "icon": "git-pull-request" }, { "id": "list_repos", "title": "List my repositories", "prompt": "Show me all my Bitbucket repositories with their details and recent activity.", "category": "development", "icon": "folder" }, { "id": "check_issues", "title": "Check repository issues", "prompt": "Show me the open issues in my repositories and help me prioritize them.", "category": "development", "icon": "bug" }], "suggestedWith": ["github", "gitlab", "jira"] },
|
|
7
7
|
{ "name": "calendar", "displayName": "Google Calendar", "icon": "calendar.svg", "description": "Manage events, find free time, and schedule meetings", "auth": { "type": "oauth2", "provider": "google", "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", "tokenUrl": "https://oauth2.googleapis.com/token", "scopes": ["https://www.googleapis.com/auth/calendar.readonly", "https://www.googleapis.com/auth/calendar.events"], "requiredApis": [{ "name": "Google Calendar API", "enableUrl": "https://console.cloud.google.com/apis/library/calendar-json.googleapis.com" }] }, "envVars": [{ "name": "GOOGLE_CLIENT_ID", "description": "Google OAuth Client ID", "required": true, "sensitive": false, "docsUrl": "https://console.cloud.google.com/apis/credentials" }, { "name": "GOOGLE_CLIENT_SECRET", "description": "Google OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://console.cloud.google.com/apis/credentials" }], "tools": [{ "id": "list_calendars", "name": "List Calendars", "description": "List all calendars in the authenticated user's calendar list", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://www.googleapis.com/calendar/v3/users/me/calendarList", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum calendars to return", "default": 100 } }, "response": { "transform": "items" } } }, { "id": "list_events", "name": "List Events", "description": "Get upcoming calendar events", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events", "params": { "calendarId": { "type": "string", "in": "path", "description": "Calendar ID (use 'primary' for main calendar)", "required": true, "default": "primary" }, "timeMin": { "type": "string", "in": "query", "description": "Start time (RFC3339)" }, "timeMax": { "type": "string", "in": "query", "description": "End time (RFC3339)" }, "maxResults": { "type": "number", "in": "query", "description": "Maximum events", "default": 10 }, "orderBy": { "type": "string", "in": "query", "description": "Order by: startTime or updated", "default": "startTime" }, "singleEvents": { "type": "boolean", "in": "query", "description": "Expand recurring events", "default": true } }, "response": { "transform": "items" } } }, { "id": "create_event", "name": "Create Event", "description": "Schedule a new calendar event", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events", "params": { "calendarId": { "type": "string", "in": "path", "description": "Calendar ID", "required": true, "default": "primary" } }, "body": { "summary": { "type": "string", "description": "Event title", "required": true }, "description": { "type": "string", "description": "Event description" }, "start": { "type": "object", "description": "Start time: {dateTime: 'RFC3339', timeZone: 'TZ'}", "required": true }, "end": { "type": "object", "description": "End time: {dateTime: 'RFC3339', timeZone: 'TZ'}", "required": true }, "attendees": { "type": "array", "description": "Array of {email: string} objects" }, "location": { "type": "string", "description": "Event location" } } } }, { "id": "get_event", "name": "Get Event", "description": "Get details of a specific calendar event", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events/{eventId}", "params": { "calendarId": { "type": "string", "in": "path", "description": "Calendar ID", "required": true, "default": "primary" }, "eventId": { "type": "string", "in": "path", "description": "Event ID", "required": true } } } }, { "id": "update_event", "name": "Update Event", "description": "Update an existing calendar event", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events/{eventId}", "params": { "calendarId": { "type": "string", "in": "path", "description": "Calendar ID", "required": true, "default": "primary" }, "eventId": { "type": "string", "in": "path", "description": "Event ID to update", "required": true }, "sendUpdates": { "type": "string", "in": "query", "description": "Whether to send update notifications: all, externalOnly, or none", "default": "none" } }, "body": { "summary": { "type": "string", "description": "Updated event title" }, "description": { "type": "string", "description": "Updated event description" }, "start": { "type": "object", "description": "Updated start time: {dateTime: 'RFC3339', timeZone: 'TZ'}" }, "end": { "type": "object", "description": "Updated end time: {dateTime: 'RFC3339', timeZone: 'TZ'}" }, "attendees": { "type": "array", "description": "Updated array of {email: string} attendees" }, "location": { "type": "string", "description": "Updated event location" } } } }, { "id": "delete_event", "name": "Delete Event", "description": "Delete a calendar event by ID", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events/{eventId}", "params": { "calendarId": { "type": "string", "in": "path", "description": "Calendar ID", "required": true, "default": "primary" }, "eventId": { "type": "string", "in": "path", "description": "Event ID to delete", "required": true }, "sendUpdates": { "type": "string", "in": "query", "description": "Whether to send cancellation notifications: all, externalOnly, or none", "default": "none" } } } }, { "id": "find_free_time", "name": "Find Free Time", "description": "Find available time slots in calendar", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://www.googleapis.com/calendar/v3/freeBusy", "body": { "timeMin": { "type": "string", "description": "Start of window (RFC3339)", "required": true }, "timeMax": { "type": "string", "description": "End of window (RFC3339)", "required": true }, "items": { "type": "array", "description": "Array of {id: calendarId} to check", "required": true } } } }], "prompts": [{ "id": "block_deep_work", "title": "Block time for deep work", "prompt": "Find a 2-hour block for focused work this week and add it to my calendar.", "category": "productivity", "icon": "clock" }, { "id": "schedule_meeting", "title": "Schedule a meeting", "prompt": "Help me schedule a meeting. Find available time slots and create the calendar event.", "category": "productivity", "icon": "users" }, { "id": "today_agenda", "title": "What's on my calendar today?", "prompt": "Show me my calendar for today and summarize my schedule.", "category": "productivity", "icon": "calendar" }], "suggestedWith": ["gmail", "slack"] },
|
|
@@ -11,15 +11,15 @@ export const connectors = [
|
|
|
11
11
|
{ "name": "figma", "displayName": "Figma", "icon": "figma.svg", "description": "Access Figma designs, files, comments, and collaborate on design projects", "auth": { "type": "oauth2", "provider": "figma", "authorizationUrl": "https://www.figma.com/oauth", "tokenUrl": "https://api.figma.com/v1/oauth/token", "scopes": ["current_user:read", "file_content:read", "file_comments:read", "file_comments:write"], "tokenAuthMethod": "client_secret_basic", "requiredApis": [{ "name": "Figma OAuth App", "enableUrl": "https://www.figma.com/developers/apps" }] }, "envVars": [{ "name": "FIGMA_CLIENT_ID", "description": "Figma OAuth Client ID (from your app settings)", "required": true, "sensitive": false, "docsUrl": "https://www.figma.com/developers/apps" }, { "name": "FIGMA_CLIENT_SECRET", "description": "Figma OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://www.figma.com/developers/apps" }], "tools": [{ "id": "get_me", "name": "Get Me", "description": "Get the authenticated user's Figma profile (id, email, handle). Use this to verify the connection and identify the user.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.figma.com/v1/me" } }, { "id": "list_files", "name": "List Files", "description": "List recent Figma files accessible to the user", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.figma.com/v1/projects/{projectId}/files", "params": { "projectId": { "type": "string", "in": "path", "description": "Figma project ID whose files should be listed", "required": true }, "branch_data": { "type": "boolean", "in": "query", "description": "Include branch metadata", "default": false } } } }, { "id": "get_file", "name": "Get File", "description": "Get detailed information about a Figma file including components and styles", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.figma.com/v1/files/{fileKey}", "params": { "fileKey": { "type": "string", "in": "path", "description": "Figma file key", "required": true }, "ids": { "type": "string", "in": "query", "description": "Comma-separated node IDs to include" }, "depth": { "type": "number", "in": "query", "description": "Traversal depth for document tree" }, "geometry": { "type": "string", "in": "query", "description": "Set to paths to export vector data" }, "plugin_data": { "type": "string", "in": "query", "description": "Plugin data namespace to include" } } } }, { "id": "get_comments", "name": "Get Comments", "description": "Get all comments on a Figma file", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.figma.com/v1/files/{fileKey}/comments", "params": { "fileKey": { "type": "string", "in": "path", "description": "Figma file key", "required": true } }, "response": { "transform": "comments" } } }, { "id": "post_comment", "name": "Post Comment", "description": "Post a comment on a Figma file", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.figma.com/v1/files/{fileKey}/comments", "params": { "fileKey": { "type": "string", "in": "path", "description": "Figma file key", "required": true } }, "body": { "message": { "type": "string", "description": "Comment text", "required": true }, "client_meta": { "type": "object", "description": "Optional Figma comment position metadata" } } } }, { "id": "list_projects", "name": "List Projects", "description": "List all projects in a team. The teamId is the numeric ID found in the Figma URL: figma.com/files/team/{teamId}/...", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.figma.com/v1/teams/{teamId}/projects", "params": { "teamId": { "type": "string", "in": "path", "description": "Numeric Figma team ID from the URL: figma.com/files/team/{teamId}/...", "required": true } }, "response": { "transform": "projects" } } }], "prompts": [{ "id": "review_design", "title": "Review a design", "prompt": "Review a Figma design file and provide feedback on the components, layout, and design system usage.", "category": "design", "icon": "eye" }, { "id": "summarize_comments", "title": "Summarize comments", "prompt": "Read all comments on a Figma file and summarize the feedback, action items, and unresolved discussions.", "category": "design", "icon": "message" }, { "id": "extract_components", "title": "Extract components", "prompt": "List all components in a Figma file and describe their structure, variants, and properties.", "category": "design", "icon": "component" }, { "id": "design_feedback", "title": "Give design feedback", "prompt": "Review the design file and post constructive feedback as comments on specific elements.", "category": "design", "icon": "plus" }], "suggestedWith": ["linear", "slack", "notion"] },
|
|
12
12
|
{ "name": "github", "displayName": "GitHub", "icon": "github.svg", "description": "Manage repositories, issues, and pull requests", "auth": { "type": "oauth2", "provider": "github", "authorizationUrl": "https://github.com/login/oauth/authorize", "tokenUrl": "https://github.com/login/oauth/access_token", "scopes": ["repo", "read:user", "read:org"] }, "envVars": [{ "name": "GITHUB_CLIENT_ID", "description": "GitHub OAuth App Client ID", "required": true, "sensitive": false, "docsUrl": "https://github.com/settings/developers" }, { "name": "GITHUB_CLIENT_SECRET", "description": "GitHub OAuth App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://github.com/settings/developers" }], "tools": [{ "id": "get_current_user", "name": "Get Current User", "description": "Get the authenticated GitHub user identity", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/user" } }, { "id": "list_repos", "name": "List Repositories", "description": "Get list of user's repositories", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/user/repos", "params": { "type": { "type": "string", "in": "query", "description": "Type: all, owner, public, private, member" }, "sort": { "type": "string", "in": "query", "description": "Sort: created, updated, pushed, full_name", "default": "updated" }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 30 }, "page": { "type": "number", "in": "query", "description": "Page number for pagination" } }, "response": { "historicalSummary": { "collectionKeys": ["repositories", "data"], "collectionName": "repositories", "itemFields": [{ "name": "id" }, { "name": "node_id" }, { "name": "name" }, { "name": "full_name" }, { "name": "owner", "kind": "contact" }, { "name": "html_url" }, { "name": "private" }, { "name": "archived" }, { "name": "open_issues_count" }, { "name": "default_branch" }, { "name": "updated_at" }, { "name": "pushed_at" }], "omitted": "repository descriptions and provider-specific payload fields" } } } }, { "id": "get_user", "name": "Get User", "description": "Get a GitHub user profile by username. Use this to verify repository owners, assignees, and other GitHub usernames before acting.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/users/{username}", "params": { "username": { "type": "string", "in": "path", "description": "GitHub username/login to look up", "required": true } } } }, { "id": "get_repo", "name": "Get Repository", "description": "Get details of a specific repository", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/repos/{owner}/{repo}", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true } } } }, { "id": "list_prs", "name": "List Pull Requests", "description": "Get pull requests for a repository", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/repos/{owner}/{repo}/pulls", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "state": { "type": "string", "in": "query", "description": "State: open, closed, all", "default": "open" }, "per_page": { "type": "number", "in": "query", "description": "Results per page", "default": 30 }, "page": { "type": "number", "in": "query", "description": "Page number for pagination" } }, "response": { "historicalSummary": { "collectionKeys": ["pullRequests", "data"], "collectionName": "pullRequests", "itemFields": [{ "name": "id" }, { "name": "node_id" }, { "name": "number" }, { "name": "title" }, { "name": "state" }, { "name": "html_url" }, { "name": "user", "kind": "contact" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "closed_at" }, { "name": "merged_at" }, { "name": "draft" }], "omitted": "pull request bodies, diff details, and provider-specific payload fields" } } } }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new issue in a repository", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.github.com/repos/{owner}/{repo}/issues", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true } }, "body": { "title": { "type": "string", "description": "Issue title", "required": true }, "body": { "type": "string", "description": "Issue body (markdown)" }, "labels": { "type": "array", "description": "Label names" }, "assignees": { "type": "array", "description": "Usernames to assign" } } } }, { "id": "get_pr_diff", "name": "Get PR Diff", "description": "Get the diff for a pull request", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/repos/{owner}/{repo}/pulls/{pull_number}", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "pull_number": { "type": "number", "in": "path", "description": "Pull request number", "required": true }, "Accept": { "type": "string", "in": "header", "description": "Response format", "default": "application/vnd.github.v3.diff" } } } }, { "id": "list_issues", "name": "List Issues", "description": "List issues for a repository", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.github.com/graphql", "query": "query($owner: String!, $repo: String!, $first: Int, $states: [IssueState!]) { repository(owner: $owner, name: $repo) { issues(first: $first, states: $states, orderBy: { field: UPDATED_AT, direction: DESC }) { nodes { id number title body state url createdAt updatedAt author { login } labels(first: 10) { nodes { name } } assignees(first: 10) { nodes { login } } } pageInfo { hasNextPage endCursor } } } }", "params": { "owner": { "type": "string", "in": "body", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "body", "description": "Repository name", "required": true }, "states": { "type": "string[]", "in": "body", "description": "Issue states to include (e.g. OPEN, CLOSED)", "default": ["OPEN"] }, "first": { "type": "number", "in": "body", "description": "Results per page", "default": 30 } }, "response": { "transform": "repository.issues.nodes", "historicalSummary": { "collectionKeys": ["issues", "nodes", "data"], "collectionName": "issues", "itemFields": [{ "name": "id" }, { "name": "node_id" }, { "name": "number" }, { "name": "title" }, { "name": "state" }, { "name": "url" }, { "name": "html_url" }, { "name": "author", "kind": "contact" }, { "name": "user", "kind": "contact" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "created_at" }, { "name": "updated_at" }], "outputFields": [{ "name": "pageInfo", "kind": "object" }], "omitted": "issue bodies, comments, and provider-specific payload fields" } } } }, { "id": "get_issue", "name": "Get Issue", "description": "Get details of a GitHub issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "issue_number": { "type": "number", "in": "path", "description": "Issue number", "required": true } }, "response": { "historicalSummary": { "collectionKeys": ["issue", "data"], "collectionName": "issues", "itemFields": [{ "name": "id" }, { "name": "node_id" }, { "name": "number" }, { "name": "title" }, { "name": "state" }, { "name": "html_url" }, { "name": "url" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "closed_at" }, { "name": "createdAt" }, { "name": "updatedAt" }], "singleItem": true, "omitted": "issue body, comments, timeline, and provider-specific payload fields" } } } }, { "id": "update_issue", "name": "Update Issue", "description": "Update, close, or reopen a GitHub issue", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "issue_number": { "type": "number", "in": "path", "description": "Issue number", "required": true } }, "body": { "title": { "type": "string", "description": "Updated issue title" }, "body": { "type": "string", "description": "Updated issue body (markdown)" }, "state": { "type": "string", "description": "Issue state: open or closed" }, "labels": { "type": "array", "description": "Replacement label names" }, "assignees": { "type": "array", "description": "Replacement assignee usernames" } } } }, { "id": "add_issue_comment", "name": "Add Issue Comment", "description": "Add a comment to a GitHub issue or pull request", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}/comments", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "issue_number": { "type": "number", "in": "path", "description": "Issue or pull request number", "required": true } }, "body": { "body": { "type": "string", "description": "Comment body (markdown)", "required": true } } } }, { "id": "get_pr", "name": "Get Pull Request", "description": "Get details of a specific pull request (title, body, status, author, reviewers, labels)", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/repos/{owner}/{repo}/pulls/{pull_number}", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "pull_number": { "type": "number", "in": "path", "description": "Pull request number", "required": true } }, "response": { "historicalSummary": { "collectionKeys": ["pullRequest", "data"], "collectionName": "pullRequests", "itemFields": [{ "name": "id" }, { "name": "node_id" }, { "name": "number" }, { "name": "title" }, { "name": "state" }, { "name": "html_url" }, { "name": "url" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "closed_at" }, { "name": "merged_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "draft" }, { "name": "mergeable" }], "singleItem": true, "omitted": "pull request body, diff, reviews, and provider-specific payload fields" } } } }, { "id": "create_pr", "name": "Create Pull Request", "description": "Create a new pull request in a repository", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.github.com/repos/{owner}/{repo}/pulls", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true } }, "body": { "title": { "type": "string", "description": "PR title", "required": true }, "body": { "type": "string", "description": "PR description (markdown)" }, "head": { "type": "string", "description": "Branch to merge from (e.g. feature-branch or owner:feature-branch)", "required": true }, "base": { "type": "string", "description": "Branch to merge into (e.g. main)", "required": true }, "draft": { "type": "boolean", "description": "Create as draft PR", "default": false } } } }, { "id": "merge_pr", "name": "Merge Pull Request", "description": "Merge an open pull request", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://api.github.com/repos/{owner}/{repo}/pulls/{pull_number}/merge", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "pull_number": { "type": "number", "in": "path", "description": "Pull request number to merge", "required": true } }, "body": { "commit_title": { "type": "string", "description": "Merge commit title" }, "commit_message": { "type": "string", "description": "Merge commit message" }, "merge_method": { "type": "string", "description": "Merge method: merge, squash, or rebase", "default": "merge" } } } }, { "id": "list_commits", "name": "List Commits", "description": "List commits for a repository, branch, or file path", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/repos/{owner}/{repo}/commits", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "sha": { "type": "string", "in": "query", "description": "SHA or branch name to list commits from" }, "path": { "type": "string", "in": "query", "description": "Only include commits touching this file path" }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 30 }, "page": { "type": "number", "in": "query", "description": "Page number for pagination" } }, "response": { "historicalSummary": { "collectionKeys": ["commits", "data"], "collectionName": "commits", "itemFields": [{ "name": "sha" }, { "name": "node_id" }, { "name": "html_url" }, { "name": "author", "kind": "contact" }, { "name": "committer", "kind": "contact" }], "omitted": "full commit messages, verification payloads, and file details" } } } }], "prompts": [{ "id": "review_prs", "title": "Review my open PRs", "prompt": "Show me my open pull requests and help me review them. Summarize the changes and any comments.", "category": "development", "icon": "git-pull-request" }, { "id": "create_issue", "title": "Create GitHub issue", "prompt": "Help me create a new GitHub issue with a clear description and appropriate labels.", "category": "development", "icon": "circle-dot" }, { "id": "summarize_commits", "title": "Summarize recent commits", "prompt": "Summarize the recent commits in my repository and highlight significant changes.", "category": "development", "icon": "git-commit" }], "suggestedWith": ["jira", "slack"] },
|
|
13
13
|
{ "name": "gitlab", "displayName": "GitLab", "icon": "gitlab.svg", "description": "Search and manage GitLab issues, merge requests, and projects", "auth": { "type": "oauth2", "provider": "gitlab", "authorizationUrl": "https://gitlab.com/oauth/authorize", "tokenUrl": "https://gitlab.com/oauth/token", "scopes": ["api", "read_user", "read_repository"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "GitLab Application", "enableUrl": "https://gitlab.com/-/profile/applications" }] }, "envVars": [{ "name": "GITLAB_CLIENT_ID", "description": "GitLab OAuth Application ID", "required": true, "sensitive": false, "docsUrl": "https://docs.gitlab.com/ee/api/oauth2.html" }, { "name": "GITLAB_CLIENT_SECRET", "description": "GitLab OAuth Application Secret", "required": true, "sensitive": true, "docsUrl": "https://docs.gitlab.com/ee/api/oauth2.html" }], "tools": [{ "id": "list_projects", "name": "List Projects", "description": "List accessible GitLab projects", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gitlab.com/api/v4/projects", "params": { "membership": { "type": "boolean", "in": "query", "description": "Only return projects the user is a member of", "default": true }, "search": { "type": "string", "in": "query", "description": "Search text for projects" }, "simple": { "type": "boolean", "in": "query", "description": "Return simplified project objects", "default": true }, "page": { "type": "number", "in": "query", "description": "Result page", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page", "default": 20 } } } }, { "id": "get_project", "name": "Get Project", "description": "Get detailed information about a GitLab project", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gitlab.com/api/v4/projects/{projectId}", "params": { "projectId": { "type": "string", "in": "path", "description": "GitLab numeric project ID or raw namespace/project path", "required": true } } } }, { "id": "search_issues", "name": "Search Issues", "description": "Search for issues across projects", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gitlab.com/api/v4/issues", "params": { "search": { "type": "string", "in": "query", "description": "Search text for issue title or description" }, "state": { "type": "string", "in": "query", "description": "Issue state", "default": "opened" }, "scope": { "type": "string", "in": "query", "description": "Issue scope such as created_by_me, assigned_to_me, or all", "default": "assigned_to_me" }, "labels": { "type": "string", "in": "query", "description": "Comma-separated label names" }, "page": { "type": "number", "in": "query", "description": "Result page", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page", "default": 20 } } } }, { "id": "get_issue", "name": "Get Issue", "description": "Get detailed information about a specific issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gitlab.com/api/v4/projects/{projectId}/issues/{issueIid}", "params": { "projectId": { "type": "string", "in": "path", "description": "GitLab numeric project ID or raw namespace/project path", "required": true }, "issueIid": { "type": "number", "in": "path", "description": "Project-local issue IID", "required": true } } } }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new issue in a project", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gitlab.com/api/v4/projects/{projectId}/issues", "params": { "projectId": { "type": "string", "in": "path", "description": "GitLab numeric project ID or raw namespace/project path", "required": true } }, "body": { "title": { "type": "string", "description": "Issue title", "required": true }, "description": { "type": "string", "description": "Issue description" }, "labels": { "type": "string", "description": "Comma-separated labels" }, "assignee_ids": { "type": "array", "description": "GitLab user IDs to assign" } } } }, { "id": "update_issue", "name": "Update Issue", "description": "Update, close, or reopen a GitLab issue", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://gitlab.com/api/v4/projects/{projectId}/issues/{issueIid}", "params": { "projectId": { "type": "string", "in": "path", "description": "GitLab numeric project ID or raw namespace/project path", "required": true }, "issueIid": { "type": "number", "in": "path", "description": "Project-local issue IID", "required": true } }, "body": { "title": { "type": "string", "description": "Updated issue title" }, "description": { "type": "string", "description": "Updated issue description" }, "state_event": { "type": "string", "description": "close or reopen" }, "labels": { "type": "string", "description": "Comma-separated replacement labels" }, "assignee_ids": { "type": "array", "description": "GitLab user IDs to assign" } } } }, { "id": "add_issue_comment", "name": "Add Issue Comment", "description": "Add a comment/note to a GitLab issue", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gitlab.com/api/v4/projects/{projectId}/issues/{issueIid}/notes", "params": { "projectId": { "type": "string", "in": "path", "description": "GitLab numeric project ID or raw namespace/project path", "required": true }, "issueIid": { "type": "number", "in": "path", "description": "Project-local issue IID", "required": true } }, "body": { "body": { "type": "string", "description": "Comment body in Markdown", "required": true }, "confidential": { "type": "boolean", "description": "Make the note visible only to project members" } } } }, { "id": "list_merge_requests", "name": "List Merge Requests", "description": "List merge requests for a project or across projects", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gitlab.com/api/v4/merge_requests", "params": { "state": { "type": "string", "in": "query", "description": "Merge request state", "default": "opened" }, "scope": { "type": "string", "in": "query", "description": "Merge request scope such as created_by_me, assigned_to_me, or all", "default": "assigned_to_me" }, "search": { "type": "string", "in": "query", "description": "Search text for merge requests" }, "page": { "type": "number", "in": "query", "description": "Result page", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page", "default": 20 } } } }, { "id": "get_merge_request", "name": "Get Merge Request", "description": "Get detailed information about a specific GitLab merge request", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gitlab.com/api/v4/projects/{projectId}/merge_requests/{mergeRequestIid}", "params": { "projectId": { "type": "string", "in": "path", "description": "GitLab numeric project ID or raw namespace/project path", "required": true }, "mergeRequestIid": { "type": "number", "in": "path", "description": "Project-local merge request IID", "required": true } } } }, { "id": "add_merge_request_comment", "name": "Add Merge Request Comment", "description": "Add a comment/note to a GitLab merge request", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gitlab.com/api/v4/projects/{projectId}/merge_requests/{mergeRequestIid}/notes", "params": { "projectId": { "type": "string", "in": "path", "description": "GitLab numeric project ID or raw namespace/project path", "required": true }, "mergeRequestIid": { "type": "number", "in": "path", "description": "Project-local merge request IID", "required": true } }, "body": { "body": { "type": "string", "description": "Comment body in Markdown", "required": true }, "internal": { "type": "boolean", "description": "Make the note internal when supported" } } } }], "prompts": [{ "id": "find_issues", "title": "Find my issues", "prompt": "Search for issues assigned to me that are open. Show me the most important ones.", "category": "development", "icon": "bug" }, { "id": "review_mrs", "title": "Review merge requests", "prompt": "Show me all open merge requests that need my review. Summarize what each one does.", "category": "development", "icon": "git-merge" }, { "id": "create_bug_report", "title": "Create bug report", "prompt": "Help me create a detailed bug report issue with steps to reproduce, expected vs actual behavior.", "category": "development", "icon": "plus" }, { "id": "project_status", "title": "Project status", "prompt": "Give me a summary of my projects: open issues, merge requests, and recent activity.", "category": "development", "icon": "list" }], "suggestedWith": ["github", "jira", "slack"] },
|
|
14
|
-
{ "name": "gmail", "displayName": "Gmail", "icon": "gmail.svg", "description": "Read and send emails via Gmail API", "auth": { "type": "oauth2", "provider": "google", "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", "tokenUrl": "https://oauth2.googleapis.com/token", "scopes": ["https://www.googleapis.com/auth/gmail.readonly", "https://www.googleapis.com/auth/gmail.send", "https://www.googleapis.com/auth/gmail.modify", "https://www.googleapis.com/auth/gmail.labels", "https://www.googleapis.com/auth/gmail.compose", "https://mail.google.com/"], "requiredApis": [{ "name": "Gmail API", "enableUrl": "https://console.cloud.google.com/apis/library/gmail.googleapis.com" }] }, "envVars": [{ "name": "GOOGLE_CLIENT_ID", "description": "Google OAuth Client ID", "required": true, "sensitive": false, "docsUrl": "https://console.cloud.google.com/apis/credentials" }, { "name": "GOOGLE_CLIENT_SECRET", "description": "Google OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://console.cloud.google.com/apis/credentials" }], "tools": [{ "id": "list_emails", "name": "List Emails", "description": "List Gmail message summaries with IDs, sender, recipient, subject, date, snippet, labels, and pagination tokens. Use get-email only when full message content is needed.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of message summaries to return (1-50)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query (e.g. is:unread, from:user@example.com)" }, "labelIds": { "type": "string[]", "in": "query", "description": "Only return messages with these label IDs (e.g. INBOX, UNREAD)" }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "enrich": { "type": "gmail-message-metadata", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{id}", "idField": "id", "metadataHeaders": ["From", "To", "Subject", "Date"], "maxItems": 50 }, "historicalSummary": { "collectionKeys": ["messages", "data"], "collectionName": "messages", "itemFields": [{ "name": "id" }, { "name": "threadId" }, { "name": "from", "kind": "contact" }, { "name": "sender", "kind": "contact" }, { "name": "to" }, { "name": "subject" }, { "name": "date" }, { "name": "internalDate" }, { "name": "snippet", "maxLength": 300 }, { "name": "labelIds", "kind": "string-array" }, { "name": "isUnread" }, { "name": "unread" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "resultSizeEstimate" }], "omitted": "large email bodies and provider-specific payload fields" } } } }, { "id": "send_email", "name": "Send Email", "description": "Send an email to recipients", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/send", "body": { "raw": { "type": "string", "description": "Base64url-encoded RFC 2822 email message", "required": true }, "threadId": { "type": "string", "description": "Thread ID for a reply" } } } }, { "id": "get_email", "name": "Get Email", "description": "Get a specific email by ID with full content", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal, raw", "default": "full" }, "metadataHeaders": { "type": "string[]", "in": "query", "description": "Headers to include when format is metadata, e.g. From, To, Subject, Date" } } } }, { "id": "search_emails", "name": "Search Emails", "description": "Search Gmail messages and return summaries with IDs, sender, recipient, subject, date, snippet, labels, and pagination tokens.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages", "params": { "q": { "type": "string", "in": "query", "description": "Gmail search query", "required": true }, "maxResults": { "type": "number", "in": "query", "description": "Maximum number of message summaries to return (1-50)", "default": 10 }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "enrich": { "type": "gmail-message-metadata", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{id}", "idField": "id", "metadataHeaders": ["From", "To", "Subject", "Date"], "maxItems": 50 }, "historicalSummary": { "collectionKeys": ["messages", "data"], "collectionName": "messages", "itemFields": [{ "name": "id" }, { "name": "threadId" }, { "name": "from", "kind": "contact" }, { "name": "sender", "kind": "contact" }, { "name": "to" }, { "name": "subject" }, { "name": "date" }, { "name": "internalDate" }, { "name": "snippet", "maxLength": 300 }, { "name": "labelIds", "kind": "string-array" }, { "name": "isUnread" }, { "name": "unread" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "resultSizeEstimate" }], "omitted": "large email bodies and provider-specific payload fields" } } } }, { "id": "mark_email_read", "name": "Mark Email Read", "description": "Mark an email as read", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "removeLabelIds": { "type": "array", "description": "Label IDs to remove, use UNREAD", "default": ["UNREAD"] } } } }, { "id": "archive_email", "name": "Archive Email", "description": "Archive an email", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "removeLabelIds": { "type": "array", "description": "Label IDs to remove, use INBOX", "default": ["INBOX"] } } } }, { "id": "list_labels", "name": "List Labels", "description": "List Gmail labels", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels", "response": { "transform": "labels" } } }, { "id": "get_label", "name": "Get Label", "description": "Get a Gmail label", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels/{labelId}", "params": { "labelId": { "type": "string", "in": "path", "description": "Label ID", "required": true } } } }, { "id": "create_label", "name": "Create Label", "description": "Create a Gmail user label", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels", "body": { "name": { "type": "string", "description": "Label display name", "required": true }, "messageListVisibility": { "type": "string", "description": "Message list visibility: show or hide" }, "labelListVisibility": { "type": "string", "description": "Label list visibility" }, "color": { "type": "object", "description": "Label color object" } } } }, { "id": "update_label", "name": "Update Label", "description": "Update a Gmail user label", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels/{labelId}", "params": { "labelId": { "type": "string", "in": "path", "description": "Label ID", "required": true } }, "body": { "name": { "type": "string", "description": "Label display name", "required": true }, "messageListVisibility": { "type": "string", "description": "Message list visibility: show or hide" }, "labelListVisibility": { "type": "string", "description": "Label list visibility" }, "color": { "type": "object", "description": "Label color object" } } } }, { "id": "delete_label", "name": "Delete Label", "description": "Delete a Gmail user label", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels/{labelId}", "params": { "labelId": { "type": "string", "in": "path", "description": "Label ID", "required": true } } } }, { "id": "apply_labels", "name": "Apply Labels", "description": "Apply or remove labels on an email", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "modify_email_labels", "name": "Modify Email Labels", "description": "Modify labels on an email", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "trash_email", "name": "Trash Email", "description": "Move an email to trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/trash", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } } } }, { "id": "untrash_email", "name": "Untrash Email", "description": "Remove an email from trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/untrash", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } } } }, { "id": "delete_email", "name": "Delete Email", "description": "Permanently delete an email", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } } } }, { "id": "batch_modify_emails", "name": "Batch Modify Emails", "description": "Modify labels on multiple emails", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/batchModify", "body": { "ids": { "type": "array", "description": "Email message IDs", "required": true }, "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "batch_delete_emails", "name": "Batch Delete Emails", "description": "Permanently delete multiple emails", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/batchDelete", "body": { "ids": { "type": "array", "description": "Email message IDs", "required": true } } } }, { "id": "list_threads", "name": "List Threads", "description": "List Gmail threads", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of threads to return (1-500)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query" }, "labelIds": { "type": "string[]", "in": "query", "description": "Only return threads with these label IDs" }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "transform": "threads" } } }, { "id": "get_thread", "name": "Get Thread", "description": "Get a Gmail thread", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal", "default": "full" } } } }, { "id": "modify_thread_labels", "name": "Modify Thread Labels", "description": "Modify labels on a Gmail thread", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}/modify", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } }, "body": { "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "trash_thread", "name": "Trash Thread", "description": "Move a Gmail thread to trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}/trash", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } } } }, { "id": "untrash_thread", "name": "Untrash Thread", "description": "Remove a Gmail thread from trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}/untrash", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } } } }, { "id": "delete_thread", "name": "Delete Thread", "description": "Permanently delete a Gmail thread", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } } } }, { "id": "create_draft", "name": "Create Draft", "description": "Create a Gmail draft", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts", "body": { "message": { "type": "object", "description": "Draft message containing raw RFC 2822 content", "required": true } } } }, { "id": "list_drafts", "name": "List Drafts", "description": "List Gmail drafts", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of drafts to return (1-500)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query" }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "transform": "drafts" } } }, { "id": "get_draft", "name": "Get Draft", "description": "Get a Gmail draft", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/{draftId}", "params": { "draftId": { "type": "string", "in": "path", "description": "Draft ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal, raw", "default": "full" } } } }, { "id": "update_draft", "name": "Update Draft", "description": "Replace a Gmail draft", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/{draftId}", "params": { "draftId": { "type": "string", "in": "path", "description": "Draft ID", "required": true } }, "body": { "message": { "type": "object", "description": "Draft message containing raw RFC 2822 content", "required": true } } } }, { "id": "send_draft", "name": "Send Draft", "description": "Send an existing Gmail draft", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/send", "body": { "id": { "type": "string", "description": "Draft ID", "required": true } } } }, { "id": "delete_draft", "name": "Delete Draft", "description": "Permanently delete a Gmail draft", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/{draftId}", "params": { "draftId": { "type": "string", "in": "path", "description": "Draft ID", "required": true } } } }, { "id": "get_attachment", "name": "Get Attachment", "description": "Get a Gmail message attachment", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/attachments/{attachmentId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true }, "attachmentId": { "type": "string", "in": "path", "description": "Attachment ID", "required": true } } } }, { "id": "get_profile", "name": "Get Profile", "description": "Get the Gmail mailbox profile", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/profile" } }, { "id": "list_history", "name": "List History", "description": "List Gmail mailbox history changes", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/history", "params": { "startHistoryId": { "type": "string", "in": "query", "description": "History ID to start after", "required": true }, "maxResults": { "type": "number", "in": "query", "description": "Maximum history records", "default": 100 }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" }, "labelId": { "type": "string", "in": "query", "description": "Only return history for this label" }, "historyTypes": { "type": "string[]", "in": "query", "description": "History event types" } } } }], "prompts": [{ "id": "summarize_emails", "title": "Summarize today's emails", "prompt": "Summarize my unread emails from today. Group them by priority and highlight any that need immediate attention.", "category": "productivity", "icon": "mail" }, { "id": "draft_reply", "title": "Draft a quick reply", "prompt": "Help me draft a reply to my most recent email. Keep it professional and concise.", "category": "productivity", "icon": "reply" }, { "id": "find_emails", "title": "Find important emails", "prompt": "Search my emails for important messages from the past week that I might have missed.", "category": "productivity", "icon": "search" }], "suggestedWith": ["calendar", "slack"] },
|
|
15
|
-
{ "name": "harvest", "displayName": "Harvest", "icon": "harvest.svg", "description": "Track time, manage projects, and control invoices with Harvest — trusted by 70,000+ businesses", "auth": { "type": "oauth2", "provider": "harvest", "authorizationUrl": "https://id.getharvest.com/oauth2/authorize", "tokenUrl": "https://id.getharvest.com/api/v2/oauth2/token", "scopes": [], "requiredApis": [{ "name": "Harvest OAuth2 Application", "enableUrl": "https://id.getharvest.com/developers" }] }, "envVars": [{ "name": "HARVEST_CLIENT_ID", "description": "Harvest OAuth2 Client ID (from your OAuth2 application in Harvest ID)", "required": true, "sensitive": false, "docsUrl": "https://id.getharvest.com/developers" }, { "name": "HARVEST_CLIENT_SECRET", "description": "Harvest OAuth2 Client Secret", "required": true, "sensitive": true, "docsUrl": "https://id.getharvest.com/developers" }], "tools": [{ "id": "list_accounts", "name": "List Accounts", "description": "List all Harvest accounts the authenticated user can access. Call this first to get your Harvest-Account-Id for subsequent API calls.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://id.getharvest.com/api/v2/accounts", "response": { "transform": "accounts" } } }, { "id": "get_current_user", "name": "Get Current User", "description": "Get the authenticated user's Harvest profile (id, name, email, timezone, roles)", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/users/me", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" } } } }, { "id": "list_users", "name": "List Users", "description": "List all active users in the Harvest account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/users", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status", "default": true }, "updated_since": { "type": "string", "in": "query", "description": "Only return users updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "users" } } }, { "id": "list_time_entries", "name": "List Time Entries", "description": "List time entries (timesheets). Filter by user, project, client, or date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/time_entries", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "task_id": { "type": "number", "in": "query", "description": "Filter by task ID" }, "is_running": { "type": "boolean", "in": "query", "description": "Filter to only currently running timers" }, "is_billed": { "type": "boolean", "in": "query", "description": "Filter by billed status" }, "from": { "type": "string", "in": "query", "description": "Start date (YYYY-MM-DD). Return entries with spent_date >= from." }, "to": { "type": "string", "in": "query", "description": "End date (YYYY-MM-DD). Return entries with spent_date <= to." }, "updated_since": { "type": "string", "in": "query", "description": "Only return entries updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "time_entries" } } }, { "id": "get_time_entry", "name": "Get Time Entry", "description": "Get details of a specific time entry by ID", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID", "required": true } } } }, { "id": "create_time_entry", "name": "Create Time Entry", "description": "Create a new time entry (timesheet). Provide either hours or start/end times.", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.harvestapp.com/v2/time_entries", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" } }, "body": { "project_id": { "type": "number", "description": "Harvest project ID", "required": true }, "task_id": { "type": "number", "description": "Harvest task ID", "required": true }, "spent_date": { "type": "string", "description": "Date of the time entry (YYYY-MM-DD)", "required": true }, "user_id": { "type": "number", "description": "User ID to log time for (defaults to authenticated user)" }, "hours": { "type": "number", "description": "Hours to log (e.g. 1.5). Use instead of started_time/ended_time." }, "started_time": { "type": "string", "description": "Start time (hh:mmam/pm, e.g. 8:00am). Use with ended_time instead of hours." }, "ended_time": { "type": "string", "description": "End time (hh:mmam/pm, e.g. 5:30pm). Use with started_time instead of hours." }, "notes": { "type": "string", "description": "Notes about the time entry" }, "external_reference": { "type": "object", "description": "External reference object with id, group_id, account_id, permalink" } } } }, { "id": "update_time_entry", "name": "Update Time Entry", "description": "Update an existing time entry", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID", "required": true } }, "body": { "project_id": { "type": "number", "description": "Updated project ID" }, "task_id": { "type": "number", "description": "Updated task ID" }, "spent_date": { "type": "string", "description": "Updated date (YYYY-MM-DD)" }, "hours": { "type": "number", "description": "Updated hours" }, "started_time": { "type": "string", "description": "Updated start time (hh:mmam/pm)" }, "ended_time": { "type": "string", "description": "Updated end time (hh:mmam/pm)" }, "notes": { "type": "string", "description": "Updated notes" }, "is_locked": { "type": "boolean", "description": "Lock/unlock the time entry" } } } }, { "id": "delete_time_entry", "name": "Delete Time Entry", "description": "Delete a time entry. Only unlocked, non-billed entries can be deleted.", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID", "required": true } } } }, { "id": "stop_timer", "name": "Stop Timer", "description": "Stop a running timer for a time entry", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}/stop", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID of the running timer", "required": true } } } }, { "id": "restart_timer", "name": "Restart Timer", "description": "Restart a stopped timer for a time entry", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}/restart", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID", "required": true } } } }, { "id": "list_projects", "name": "List Projects", "description": "List all projects in the Harvest account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/projects", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status" }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "updated_since": { "type": "string", "in": "query", "description": "Only return projects updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "projects" } } }, { "id": "get_project", "name": "Get Project", "description": "Get details of a specific project", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/projects/{projectId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "projectId": { "type": "number", "in": "path", "description": "Harvest project ID", "required": true } } } }, { "id": "list_tasks", "name": "List Tasks", "description": "List all tasks available in the Harvest account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/tasks", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status" }, "updated_since": { "type": "string", "in": "query", "description": "Only return tasks updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "tasks" } } }, { "id": "list_project_task_assignments", "name": "List Project Task Assignments", "description": "List all task assignments for a specific project (tasks billable to this project)", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/projects/{projectId}/task_assignments", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "projectId": { "type": "number", "in": "path", "description": "Harvest project ID", "required": true }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status" }, "updated_since": { "type": "string", "in": "query", "description": "Only return task assignments updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "task_assignments" } } }, { "id": "list_clients", "name": "List Clients", "description": "List all clients in the Harvest account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/clients", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status" }, "updated_since": { "type": "string", "in": "query", "description": "Only return clients updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "clients" } } }, { "id": "get_client", "name": "Get Client", "description": "Get details of a specific client", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/clients/{clientId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "clientId": { "type": "number", "in": "path", "description": "Harvest client ID", "required": true } } } }, { "id": "list_invoices", "name": "List Invoices", "description": "List all invoices. Filter by client, status, or date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/invoices", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "state": { "type": "string", "in": "query", "description": "Filter by state: draft, open, paid, closed" }, "from": { "type": "string", "in": "query", "description": "Only invoices with issue_date >= from (YYYY-MM-DD)" }, "to": { "type": "string", "in": "query", "description": "Only invoices with issue_date <= to (YYYY-MM-DD)" }, "updated_since": { "type": "string", "in": "query", "description": "Only return invoices updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "invoices" } } }, { "id": "get_invoice", "name": "Get Invoice", "description": "Get details of a specific invoice including line items", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/invoices/{invoiceId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "invoiceId": { "type": "number", "in": "path", "description": "Harvest invoice ID", "required": true } } } }, { "id": "create_invoice", "name": "Create Invoice", "description": "Create a new invoice for a client", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.harvestapp.com/v2/invoices", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" } }, "body": { "client_id": { "type": "number", "description": "Client ID to invoice", "required": true }, "subject": { "type": "string", "description": "Invoice subject line" }, "notes": { "type": "string", "description": "Invoice notes visible to client" }, "issue_date": { "type": "string", "description": "Issue date (YYYY-MM-DD, defaults to today)" }, "due_date": { "type": "string", "description": "Due date (YYYY-MM-DD)" }, "currency": { "type": "string", "description": "Invoice currency code (e.g. USD, EUR). Defaults to account currency." }, "line_items_import": { "type": "object", "description": "Import time entries/expenses into line items: { project_ids: number[], time: { summary_type, from, to }, expenses: { summary_type, from, to, attach_receipt } }" }, "line_items": { "type": "array", "description": "Manual line items array: [{ kind, description, unit_price, quantity, taxed, taxed2 }]" } } } }, { "id": "update_invoice", "name": "Update Invoice", "description": "Update an existing invoice (subject, notes, dates, line items, state)", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.harvestapp.com/v2/invoices/{invoiceId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "invoiceId": { "type": "number", "in": "path", "description": "Harvest invoice ID", "required": true } }, "body": { "subject": { "type": "string", "description": "Updated subject" }, "notes": { "type": "string", "description": "Updated notes" }, "issue_date": { "type": "string", "description": "Updated issue date (YYYY-MM-DD)" }, "due_date": { "type": "string", "description": "Updated due date (YYYY-MM-DD)" }, "line_items": { "type": "array", "description": "Updated line items" } } } }, { "id": "list_invoice_payments", "name": "List Invoice Payments", "description": "List all payments recorded for an invoice", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/invoices/{invoiceId}/payments", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "invoiceId": { "type": "number", "in": "path", "description": "Harvest invoice ID", "required": true }, "updated_since": { "type": "string", "in": "query", "description": "Only return payments updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "invoice_payments" } } }, { "id": "create_invoice_payment", "name": "Create Invoice Payment", "description": "Record a payment for an invoice", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.harvestapp.com/v2/invoices/{invoiceId}/payments", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "invoiceId": { "type": "number", "in": "path", "description": "Harvest invoice ID", "required": true } }, "body": { "amount": { "type": "number", "description": "Payment amount", "required": true }, "paid_at": { "type": "string", "description": "Payment datetime (ISO 8601, defaults to now)" }, "paid_date": { "type": "string", "description": "Payment date (YYYY-MM-DD, use instead of paid_at for date-only)" }, "notes": { "type": "string", "description": "Payment notes" }, "send_thank_you": { "type": "boolean", "description": "Send a thank-you email to the client", "default": false } } } }, { "id": "time_report_by_project", "name": "Time Report by Project", "description": "Get a time report aggregated by project. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/time/projects", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "include_fixed_fee": { "type": "boolean", "in": "query", "description": "Include fixed-fee projects" }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results" } } }, { "id": "time_report_by_team", "name": "Time Report by Team", "description": "Get a time report aggregated by team member. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/time/team", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results" } } }, { "id": "time_report_by_client", "name": "Time Report by Client", "description": "Get a time report aggregated by client. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/time/clients", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results" } } }, { "id": "time_report_by_task", "name": "Time Report by Task", "description": "Get a time report aggregated by task. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/time/tasks", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results" } } }, { "id": "invoice_report", "name": "Invoice Report", "description": "Get an invoiced time and expenses report. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/invoices/invoiced", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results" } } }], "prompts": [{ "id": "log_time", "title": "Log time for today", "prompt": "Log time entries for today. Show me my projects and tasks, then create time entries for the work I describe.", "category": "productivity", "icon": "clock" }, { "id": "weekly_timesheet", "title": "Show weekly timesheet", "prompt": "Show me my time entries for this week grouped by project. Calculate total hours per project and overall.", "category": "productivity", "icon": "calendar" }, { "id": "create_invoice", "title": "Create an invoice", "prompt": "Create a new invoice for a client. Import tracked time entries for the specified period and generate the invoice.", "category": "finance", "icon": "file-text" }, { "id": "invoice_status", "title": "Check invoice status", "prompt": "Show me all open invoices with their amounts, due dates, and payment status. Flag any overdue invoices.", "category": "finance", "icon": "alert-circle" }, { "id": "team_report", "title": "Team time report", "prompt": "Generate a time report for the team this month. Show hours logged per person, per project, and identify anyone who hasn't logged time.", "category": "management", "icon": "users" }], "suggestedWith": ["github", "jira", "slack"] },
|
|
16
|
-
{ "name": "jira", "displayName": "Jira", "icon": "jira.svg", "description": "Search, create, and manage Jira issues and projects", "auth": { "type": "oauth2", "provider": "atlassian", "authorizationUrl": "https://auth.atlassian.com/authorize", "tokenUrl": "https://auth.atlassian.com/oauth/token", "scopes": ["read:jira-work", "write:jira-work", "read:jira-user", "offline_access"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "Atlassian OAuth 2.0", "enableUrl": "https://developer.atlassian.com/console/myapps/" }], "additionalAuthParams": { "audience": "api.atlassian.com", "prompt": "consent" } }, "envVars": [{ "name": "ATLASSIAN_CLIENT_ID", "description": "Atlassian OAuth 2.0 Client ID (from your app)", "required": true, "sensitive": false, "docsUrl": "https://developer.atlassian.com/console/myapps/" }, { "name": "ATLASSIAN_CLIENT_SECRET", "description": "Atlassian OAuth 2.0 Client Secret", "required": true, "sensitive": true, "docsUrl": "https://developer.atlassian.com/console/myapps/" }], "tools": [{ "id": "list_sites", "name": "List Atlassian Sites", "description": "List Atlassian cloud sites/resources the OAuth token can access; use the returned id as cloudId for Jira and Confluence tools", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/oauth/token/accessible-resources", "response": { "transform": "" } } }, { "id": "list_projects", "name": "List Projects", "description": "List all accessible Jira projects", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/project/search", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true }, "query": { "type": "string", "in": "query", "description": "Search text for project name or key" }, "maxResults": { "type": "number", "in": "query", "description": "Maximum projects to return", "default": 50 }, "startAt": { "type": "number", "in": "query", "description": "Pagination offset", "default": 0 } }, "response": { "transform": "values" } } }, { "id": "get_project", "name": "Get Project", "description": "Get detailed information about a Jira project", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "projectIdOrKey": { "type": "string", "in": "path", "description": "Jira project ID or key", "required": true } } } }, { "id": "search_issues", "name": "Search Issues", "description": "Search Jira issues using JQL (Jira Query Language)", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/search/jql", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true }, "jql": { "type": "string", "in": "query", "description": "Jira Query Language search expression", "required": true }, "maxResults": { "type": "number", "in": "query", "description": "Maximum issues to return", "default": 50 }, "nextPageToken": { "type": "string", "in": "query", "description": "Pagination token from the previous Jira JQL search response" }, "fields": { "type": "array", "in": "query", "description": "Issue fields to include" } }, "response": { "transform": "issues" } } }, { "id": "get_issue", "name": "Get Issue", "description": "Get detailed information about a specific Jira issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true }, "fields": { "type": "string", "in": "query", "description": "Comma-separated issue fields to include" } } } }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new Jira issue in a project", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true } }, "body": { "fields": { "type": "object", "description": "Jira issue fields including project, issuetype, summary, and description", "required": true } } } }, { "id": "update_issue", "name": "Update Issue", "description": "Update an existing Jira issue (status, fields, etc.)", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true } }, "body": { "fields": { "type": "object", "description": "Jira fields to set" }, "update": { "type": "object", "description": "Jira update operations" } } } }, { "id": "list_comments", "name": "List Comments", "description": "List comments on a Jira issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true }, "startAt": { "type": "number", "in": "query", "description": "Pagination offset", "default": 0 }, "maxResults": { "type": "number", "in": "query", "description": "Maximum comments to return", "default": 50 } } } }, { "id": "add_comment", "name": "Add Comment", "description": "Add a comment to a Jira issue", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true } }, "body": { "body": { "type": "object", "description": "Comment body in Atlassian Document Format", "required": true } } } }, { "id": "get_transitions", "name": "Get Transitions", "description": "List available workflow transitions for a Jira issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true } } } }, { "id": "transition_issue", "name": "Transition Issue", "description": "Move a Jira issue to a new workflow status. First call get_transitions to get valid transition IDs, then pass the ID here.", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true } }, "body": { "transition": { "type": "object", "description": "Transition object with id field, e.g. {\"id\": \"21\"}", "required": true }, "fields": { "type": "object", "description": "Optional field updates to apply during the transition" }, "comment": { "type": "object", "description": "Optional comment in Atlassian Document Format to add with the transition" } } } }], "prompts": [{ "id": "find_bugs", "title": "Find open bugs", "prompt": "Search for all open bugs assigned to me or in my current sprint.", "category": "productivity", "icon": "bug" }, { "id": "create_task", "title": "Create a task", "prompt": "Create a new task in Jira with a title, description, and priority.", "category": "productivity", "icon": "plus" }, { "id": "sprint_summary", "title": "Sprint summary", "prompt": "Get a summary of all issues in the current sprint, organized by status.", "category": "productivity", "icon": "list" }, { "id": "update_status", "title": "Update issue status", "prompt": "Move an issue to a different status (To Do, In Progress, Done, etc.).", "category": "productivity", "icon": "check" }], "suggestedWith": ["github", "slack", "confluence"] },
|
|
17
|
-
{ "name": "linear", "displayName": "Linear", "icon": "linear.svg", "description": "Search, create, and manage Linear issues and projects", "auth": { "type": "oauth2", "provider": "linear", "authorizationUrl": "https://linear.app/oauth/authorize", "tokenUrl": "https://api.linear.app/oauth/token", "scopes": ["read", "write"], "tokenAuthMethod": "basic", "requiredApis": [{ "name": "Linear OAuth Application", "enableUrl": "https://linear.app/settings/api" }] }, "envVars": [{ "name": "LINEAR_CLIENT_ID", "description": "Linear OAuth Client ID (from your OAuth application)", "required": true, "sensitive": false, "docsUrl": "https://linear.app/settings/api" }, { "name": "LINEAR_CLIENT_SECRET", "description": "Linear OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://linear.app/settings/api" }], "tools": [{ "id": "search_issues", "name": "Search Issues", "description": "Search for Linear issues by title or description", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($query: String!, $first: Int) { searchIssues(term: $query, first: $first) { nodes { id identifier title description state { name } assignee { name } priority priorityLabel createdAt updatedAt } } }", "params": { "query": { "type": "string", "in": "body", "description": "Search query text", "required": true }, "first": { "type": "number", "in": "body", "description": "Max results", "default": 20 } }, "response": { "transform": "searchIssues" } } }, { "id": "get_issue", "name": "Get Issue", "description": "Get detailed information about a specific Linear issue", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($id: String!) { issue(id: $id) { id identifier title description state { name } assignee { name email } priority priorityLabel team { name } project { name } labels { nodes { name } } comments { nodes { body user { name } createdAt } } createdAt updatedAt } }", "params": { "id": { "type": "string", "in": "body", "description": "Issue ID or identifier (e.g. ENG-123)", "required": true } }, "response": { "transform": "issue" } } }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new Linear issue in a team", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($teamId: String!, $title: String!, $description: String, $priority: Int) { issueCreate(input: { teamId: $teamId, title: $title, description: $description, priority: $priority }) { success issue { id identifier title url } } }", "params": { "teamId": { "type": "string", "in": "body", "description": "Team ID", "required": true }, "title": { "type": "string", "in": "body", "description": "Issue title", "required": true }, "description": { "type": "string", "in": "body", "description": "Issue description (markdown)" }, "priority": { "type": "number", "in": "body", "description": "Priority (0=none, 1=urgent, 2=high, 3=medium, 4=low)" } }, "response": { "transform": "issueCreate" } } }, { "id": "update_issue", "name": "Update Issue", "description": "Update the status, assignee, or other properties of an issue", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($id: String!, $stateId: String, $assigneeId: String, $priority: Int) { issueUpdate(id: $id, input: { stateId: $stateId, assigneeId: $assigneeId, priority: $priority }) { success issue { id identifier title state { name } assignee { name } } } }", "params": { "id": { "type": "string", "in": "body", "description": "Issue ID", "required": true }, "stateId": { "type": "string", "in": "body", "description": "New state ID" }, "assigneeId": { "type": "string", "in": "body", "description": "New assignee user ID" }, "priority": { "type": "number", "in": "body", "description": "New priority" } }, "response": { "transform": "issueUpdate" } } }, { "id": "delete_issue", "name": "Delete Issue", "description": "Archive a Linear issue. By default this is non-permanent so canary-created issues do not remain active.", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($id: String!, $permanentlyDelete: Boolean) { issueDelete(id: $id, permanentlyDelete: $permanentlyDelete) { success } }", "params": { "id": { "type": "string", "in": "body", "description": "Issue ID", "required": true }, "permanentlyDelete": { "type": "boolean", "in": "body", "description": "Whether to permanently delete the issue. Defaults to false (archive).", "default": false } }, "response": { "transform": "issueDelete" } } }, { "id": "list_projects", "name": "List Projects", "description": "List all projects in the workspace", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($first: Int) { projects(first: $first) { nodes { id name description state startDate targetDate lead { name } teams { nodes { name } } } } }", "params": { "first": { "type": "number", "in": "body", "description": "Max results", "default": 50 } }, "response": { "transform": "projects" } } }, { "id": "list_teams", "name": "List Teams", "description": "List Linear teams in the workspace so issues can be created in the right team", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($first: Int) { teams(first: $first) { nodes { id name key description private issueCount createdAt updatedAt } } }", "params": { "first": { "type": "number", "in": "body", "description": "Max results", "default": 50 } }, "response": { "transform": "teams" } } }, { "id": "list_workflow_states", "name": "List Workflow States", "description": "List workflow states for a Linear team so issues can be moved to the right status", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($teamId: String!) { team(id: $teamId) { id name states { nodes { id name type color position } } } }", "params": { "teamId": { "type": "string", "in": "body", "description": "Team ID", "required": true } }, "response": { "transform": "team.states" } } }, { "id": "list_users", "name": "List Users", "description": "List Linear users in the workspace so issues can be assigned to the right person", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($first: Int) { users(first: $first) { nodes { id name displayName email active avatarUrl } } }", "params": { "first": { "type": "number", "in": "body", "description": "Max results", "default": 50 } }, "response": { "transform": "users" } } }, { "id": "add_comment", "name": "Add Comment", "description": "Add a comment to a Linear issue", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($issueId: String!, $body: String!) { commentCreate(input: { issueId: $issueId, body: $body }) { success comment { id body createdAt user { id name } issue { id identifier title } } } }", "params": { "issueId": { "type": "string", "in": "body", "description": "Issue ID", "required": true }, "body": { "type": "string", "in": "body", "description": "Comment body in markdown", "required": true } }, "response": { "transform": "commentCreate" } } }], "prompts": [{ "id": "find_issues", "title": "Find my issues", "prompt": "Search for Linear issues assigned to me or related to a specific topic.", "category": "productivity", "icon": "search" }, { "id": "create_bug_report", "title": "Create bug report", "prompt": "Create a new bug report in Linear with title, description, and relevant labels.", "category": "productivity", "icon": "plus" }, { "id": "update_issue_status", "title": "Update issue status", "prompt": "Update the status of a Linear issue (e.g., mark as done, in progress, blocked).", "category": "productivity", "icon": "check" }, { "id": "project_overview", "title": "Project overview", "prompt": "Get an overview of all projects in Linear, including their status and key issues.", "category": "productivity", "icon": "list" }], "suggestedWith": ["github", "slack", "figma"] },
|
|
14
|
+
{ "name": "gmail", "displayName": "Gmail", "icon": "gmail.svg", "description": "Read and send emails via Gmail API", "auth": { "type": "oauth2", "provider": "google", "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", "tokenUrl": "https://oauth2.googleapis.com/token", "scopes": ["https://www.googleapis.com/auth/gmail.readonly", "https://www.googleapis.com/auth/gmail.send", "https://www.googleapis.com/auth/gmail.modify", "https://www.googleapis.com/auth/gmail.labels", "https://www.googleapis.com/auth/gmail.compose", "https://mail.google.com/"], "requiredApis": [{ "name": "Gmail API", "enableUrl": "https://console.cloud.google.com/apis/library/gmail.googleapis.com" }] }, "envVars": [{ "name": "GOOGLE_CLIENT_ID", "description": "Google OAuth Client ID", "required": true, "sensitive": false, "docsUrl": "https://console.cloud.google.com/apis/credentials" }, { "name": "GOOGLE_CLIENT_SECRET", "description": "Google OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://console.cloud.google.com/apis/credentials" }], "tools": [{ "id": "list_emails", "name": "List Emails", "description": "List Gmail message summaries with IDs, sender, recipient, subject, date, snippet, labels, and pagination tokens. Use get-email only when full message content is needed.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of message summaries to return (1-50)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query (e.g. is:unread, from:user@example.com)" }, "labelIds": { "type": "string[]", "in": "query", "description": "Only return messages with these label IDs (e.g. INBOX, UNREAD)" }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "enrich": { "type": "gmail-message-metadata", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{id}", "idField": "id", "metadataHeaders": ["From", "To", "Subject", "Date"], "maxItems": 50 }, "historicalSummary": { "collectionKeys": ["messages", "data"], "collectionName": "messages", "itemFields": [{ "name": "id" }, { "name": "threadId" }, { "name": "from", "kind": "contact" }, { "name": "sender", "kind": "contact" }, { "name": "to" }, { "name": "subject" }, { "name": "date" }, { "name": "internalDate" }, { "name": "snippet", "maxLength": 300 }, { "name": "labelIds", "kind": "string-array" }, { "name": "isUnread" }, { "name": "unread" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "resultSizeEstimate" }], "omitted": "large email bodies and provider-specific payload fields" } } } }, { "id": "send_email", "name": "Send Email", "description": "Send an email to recipients", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/send", "body": { "raw": { "type": "string", "description": "Base64url-encoded RFC 2822 email message", "required": true }, "threadId": { "type": "string", "description": "Thread ID for a reply" } } } }, { "id": "get_email", "name": "Get Email", "description": "Get a specific email by ID with full content", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal, raw", "default": "full" }, "metadataHeaders": { "type": "string[]", "in": "query", "description": "Headers to include when format is metadata, e.g. From, To, Subject, Date" } } } }, { "id": "search_emails", "name": "Search Emails", "description": "Search Gmail messages and return summaries with IDs, sender, recipient, subject, date, snippet, labels, and pagination tokens.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages", "params": { "q": { "type": "string", "in": "query", "description": "Gmail search query", "required": true }, "maxResults": { "type": "number", "in": "query", "description": "Maximum number of message summaries to return (1-50)", "default": 10 }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "enrich": { "type": "gmail-message-metadata", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{id}", "idField": "id", "metadataHeaders": ["From", "To", "Subject", "Date"], "maxItems": 50 }, "historicalSummary": { "collectionKeys": ["messages", "data"], "collectionName": "messages", "itemFields": [{ "name": "id" }, { "name": "threadId" }, { "name": "from", "kind": "contact" }, { "name": "sender", "kind": "contact" }, { "name": "to" }, { "name": "subject" }, { "name": "date" }, { "name": "internalDate" }, { "name": "snippet", "maxLength": 300 }, { "name": "labelIds", "kind": "string-array" }, { "name": "isUnread" }, { "name": "unread" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "resultSizeEstimate" }], "omitted": "large email bodies and provider-specific payload fields" } } } }, { "id": "mark_email_read", "name": "Mark Email Read", "description": "Mark an email as read", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "removeLabelIds": { "type": "array", "description": "Label IDs to remove, use UNREAD", "default": ["UNREAD"] } } } }, { "id": "archive_email", "name": "Archive Email", "description": "Archive an email", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "removeLabelIds": { "type": "array", "description": "Label IDs to remove, use INBOX", "default": ["INBOX"] } } } }, { "id": "list_labels", "name": "List Labels", "description": "List Gmail labels", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels", "response": { "transform": "labels", "historicalSummary": { "collectionKeys": ["labels", "data"], "collectionName": "labels", "itemFields": [{ "name": "id" }, { "name": "name" }, { "name": "type" }], "omitted": "label counters and provider-specific payload fields" } } } }, { "id": "get_label", "name": "Get Label", "description": "Get a Gmail label", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels/{labelId}", "params": { "labelId": { "type": "string", "in": "path", "description": "Label ID", "required": true } } } }, { "id": "create_label", "name": "Create Label", "description": "Create a Gmail user label", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels", "body": { "name": { "type": "string", "description": "Label display name", "required": true }, "messageListVisibility": { "type": "string", "description": "Message list visibility: show or hide" }, "labelListVisibility": { "type": "string", "description": "Label list visibility" }, "color": { "type": "object", "description": "Label color object" } } } }, { "id": "update_label", "name": "Update Label", "description": "Update a Gmail user label", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels/{labelId}", "params": { "labelId": { "type": "string", "in": "path", "description": "Label ID", "required": true } }, "body": { "name": { "type": "string", "description": "Label display name", "required": true }, "messageListVisibility": { "type": "string", "description": "Message list visibility: show or hide" }, "labelListVisibility": { "type": "string", "description": "Label list visibility" }, "color": { "type": "object", "description": "Label color object" } } } }, { "id": "delete_label", "name": "Delete Label", "description": "Delete a Gmail user label", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels/{labelId}", "params": { "labelId": { "type": "string", "in": "path", "description": "Label ID", "required": true } } } }, { "id": "apply_labels", "name": "Apply Labels", "description": "Apply or remove labels on an email", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "modify_email_labels", "name": "Modify Email Labels", "description": "Modify labels on an email", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "trash_email", "name": "Trash Email", "description": "Move an email to trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/trash", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } } } }, { "id": "untrash_email", "name": "Untrash Email", "description": "Remove an email from trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/untrash", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } } } }, { "id": "delete_email", "name": "Delete Email", "description": "Permanently delete an email", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } } } }, { "id": "batch_modify_emails", "name": "Batch Modify Emails", "description": "Modify labels on multiple emails", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/batchModify", "body": { "ids": { "type": "array", "description": "Email message IDs", "required": true }, "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "batch_delete_emails", "name": "Batch Delete Emails", "description": "Permanently delete multiple emails", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/batchDelete", "body": { "ids": { "type": "array", "description": "Email message IDs", "required": true } } } }, { "id": "list_threads", "name": "List Threads", "description": "List Gmail threads", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of threads to return (1-500)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query" }, "labelIds": { "type": "string[]", "in": "query", "description": "Only return threads with these label IDs" }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "transform": "threads", "historicalSummary": { "collectionKeys": ["threads", "data"], "collectionName": "threads", "itemFields": [{ "name": "id" }, { "name": "snippet", "maxLength": 300 }, { "name": "historyId" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "resultSizeEstimate" }], "omitted": "large thread payloads and provider-specific fields" } } } }, { "id": "get_thread", "name": "Get Thread", "description": "Get a Gmail thread", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal", "default": "full" } } } }, { "id": "modify_thread_labels", "name": "Modify Thread Labels", "description": "Modify labels on a Gmail thread", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}/modify", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } }, "body": { "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "trash_thread", "name": "Trash Thread", "description": "Move a Gmail thread to trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}/trash", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } } } }, { "id": "untrash_thread", "name": "Untrash Thread", "description": "Remove a Gmail thread from trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}/untrash", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } } } }, { "id": "delete_thread", "name": "Delete Thread", "description": "Permanently delete a Gmail thread", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } } } }, { "id": "create_draft", "name": "Create Draft", "description": "Create a Gmail draft", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts", "body": { "message": { "type": "object", "description": "Draft message containing raw RFC 2822 content", "required": true } } } }, { "id": "list_drafts", "name": "List Drafts", "description": "List Gmail drafts", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of drafts to return (1-500)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query" }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "transform": "drafts", "historicalSummary": { "collectionKeys": ["drafts", "data"], "collectionName": "drafts", "itemFields": [{ "name": "id" }, { "name": "message", "kind": "object" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "resultSizeEstimate" }], "omitted": "draft message bodies and provider-specific payload fields" } } } }, { "id": "get_draft", "name": "Get Draft", "description": "Get a Gmail draft", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/{draftId}", "params": { "draftId": { "type": "string", "in": "path", "description": "Draft ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal, raw", "default": "full" } } } }, { "id": "update_draft", "name": "Update Draft", "description": "Replace a Gmail draft", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/{draftId}", "params": { "draftId": { "type": "string", "in": "path", "description": "Draft ID", "required": true } }, "body": { "message": { "type": "object", "description": "Draft message containing raw RFC 2822 content", "required": true } } } }, { "id": "send_draft", "name": "Send Draft", "description": "Send an existing Gmail draft", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/send", "body": { "id": { "type": "string", "description": "Draft ID", "required": true } } } }, { "id": "delete_draft", "name": "Delete Draft", "description": "Permanently delete a Gmail draft", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/{draftId}", "params": { "draftId": { "type": "string", "in": "path", "description": "Draft ID", "required": true } } } }, { "id": "get_attachment", "name": "Get Attachment", "description": "Get a Gmail message attachment", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/attachments/{attachmentId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true }, "attachmentId": { "type": "string", "in": "path", "description": "Attachment ID", "required": true } } } }, { "id": "get_profile", "name": "Get Profile", "description": "Get the Gmail mailbox profile", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/profile" } }, { "id": "list_history", "name": "List History", "description": "List Gmail mailbox history changes", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/history", "params": { "startHistoryId": { "type": "string", "in": "query", "description": "History ID to start after", "required": true }, "maxResults": { "type": "number", "in": "query", "description": "Maximum history records", "default": 100 }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" }, "labelId": { "type": "string", "in": "query", "description": "Only return history for this label" }, "historyTypes": { "type": "string[]", "in": "query", "description": "History event types" } }, "response": { "historicalSummary": { "collectionKeys": ["history", "data"], "collectionName": "history", "itemFields": [{ "name": "id" }, { "name": "messages", "kind": "object" }, { "name": "messagesAdded", "kind": "object" }, { "name": "messagesDeleted", "kind": "object" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "historyId" }], "omitted": "history details and provider-specific payload fields" } } } }], "prompts": [{ "id": "summarize_emails", "title": "Summarize today's emails", "prompt": "Summarize my unread emails from today. Group them by priority and highlight any that need immediate attention.", "category": "productivity", "icon": "mail" }, { "id": "draft_reply", "title": "Draft a quick reply", "prompt": "Help me draft a reply to my most recent email. Keep it professional and concise.", "category": "productivity", "icon": "reply" }, { "id": "find_emails", "title": "Find important emails", "prompt": "Search my emails for important messages from the past week that I might have missed.", "category": "productivity", "icon": "search" }], "suggestedWith": ["calendar", "slack"] },
|
|
15
|
+
{ "name": "harvest", "displayName": "Harvest", "icon": "harvest.svg", "description": "Track time, manage projects, and control invoices with Harvest — trusted by 70,000+ businesses", "auth": { "type": "oauth2", "provider": "harvest", "authorizationUrl": "https://id.getharvest.com/oauth2/authorize", "tokenUrl": "https://id.getharvest.com/api/v2/oauth2/token", "scopes": [], "requiredApis": [{ "name": "Harvest OAuth2 Application", "enableUrl": "https://id.getharvest.com/developers" }] }, "envVars": [{ "name": "HARVEST_CLIENT_ID", "description": "Harvest OAuth2 Client ID (from your OAuth2 application in Harvest ID)", "required": true, "sensitive": false, "docsUrl": "https://id.getharvest.com/developers" }, { "name": "HARVEST_CLIENT_SECRET", "description": "Harvest OAuth2 Client Secret", "required": true, "sensitive": true, "docsUrl": "https://id.getharvest.com/developers" }], "tools": [{ "id": "list_accounts", "name": "List Accounts", "description": "List all Harvest accounts the authenticated user can access. Call this first to get your Harvest-Account-Id for subsequent API calls.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://id.getharvest.com/api/v2/accounts", "response": { "transform": "accounts", "historicalSummary": { "collectionKeys": ["accounts", "data"], "collectionName": "accounts", "itemFields": [{ "name": "id" }, { "name": "name" }, { "name": "product" }], "omitted": "account auth policy and provider-specific fields" } } } }, { "id": "get_current_user", "name": "Get Current User", "description": "Get the authenticated user's Harvest profile (id, name, email, timezone, roles)", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/users/me", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" } } } }, { "id": "list_users", "name": "List Users", "description": "List all active users in the Harvest account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/users", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status", "default": true }, "updated_since": { "type": "string", "in": "query", "description": "Only return users updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "users", "historicalSummary": { "collectionKeys": ["users", "data"], "collectionName": "users", "itemFields": [{ "name": "id" }, { "name": "email" }, { "name": "first_name" }, { "name": "last_name" }, { "name": "is_active" }, { "name": "timezone" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "user rates, avatars, and provider-specific payload fields" } } } }, { "id": "list_time_entries", "name": "List Time Entries", "description": "List time entries (timesheets). Filter by user, project, client, or date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/time_entries", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "task_id": { "type": "number", "in": "query", "description": "Filter by task ID" }, "is_running": { "type": "boolean", "in": "query", "description": "Filter to only currently running timers" }, "is_billed": { "type": "boolean", "in": "query", "description": "Filter by billed status" }, "from": { "type": "string", "in": "query", "description": "Start date (YYYY-MM-DD). Return entries with spent_date >= from." }, "to": { "type": "string", "in": "query", "description": "End date (YYYY-MM-DD). Return entries with spent_date <= to." }, "updated_since": { "type": "string", "in": "query", "description": "Only return entries updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "time_entries", "historicalSummary": { "collectionKeys": ["time_entries", "data"], "collectionName": "timeEntries", "itemFields": [{ "name": "id" }, { "name": "spent_date" }, { "name": "hours" }, { "name": "billable" }, { "name": "user", "kind": "contact" }, { "name": "client", "kind": "object" }, { "name": "project", "kind": "object" }, { "name": "task", "kind": "object" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "notes, rates, invoice details, and provider-specific payload fields" } } } }, { "id": "get_time_entry", "name": "Get Time Entry", "description": "Get details of a specific time entry by ID", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID", "required": true } } } }, { "id": "create_time_entry", "name": "Create Time Entry", "description": "Create a new time entry (timesheet). Provide either hours or start/end times.", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.harvestapp.com/v2/time_entries", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" } }, "body": { "project_id": { "type": "number", "description": "Harvest project ID", "required": true }, "task_id": { "type": "number", "description": "Harvest task ID", "required": true }, "spent_date": { "type": "string", "description": "Date of the time entry (YYYY-MM-DD)", "required": true }, "user_id": { "type": "number", "description": "User ID to log time for (defaults to authenticated user)" }, "hours": { "type": "number", "description": "Hours to log (e.g. 1.5). Use instead of started_time/ended_time." }, "started_time": { "type": "string", "description": "Start time (hh:mmam/pm, e.g. 8:00am). Use with ended_time instead of hours." }, "ended_time": { "type": "string", "description": "End time (hh:mmam/pm, e.g. 5:30pm). Use with started_time instead of hours." }, "notes": { "type": "string", "description": "Notes about the time entry" }, "external_reference": { "type": "object", "description": "External reference object with id, group_id, account_id, permalink" } } } }, { "id": "update_time_entry", "name": "Update Time Entry", "description": "Update an existing time entry", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID", "required": true } }, "body": { "project_id": { "type": "number", "description": "Updated project ID" }, "task_id": { "type": "number", "description": "Updated task ID" }, "spent_date": { "type": "string", "description": "Updated date (YYYY-MM-DD)" }, "hours": { "type": "number", "description": "Updated hours" }, "started_time": { "type": "string", "description": "Updated start time (hh:mmam/pm)" }, "ended_time": { "type": "string", "description": "Updated end time (hh:mmam/pm)" }, "notes": { "type": "string", "description": "Updated notes" }, "is_locked": { "type": "boolean", "description": "Lock/unlock the time entry" } } } }, { "id": "delete_time_entry", "name": "Delete Time Entry", "description": "Delete a time entry. Only unlocked, non-billed entries can be deleted.", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID", "required": true } } } }, { "id": "stop_timer", "name": "Stop Timer", "description": "Stop a running timer for a time entry", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}/stop", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID of the running timer", "required": true } } } }, { "id": "restart_timer", "name": "Restart Timer", "description": "Restart a stopped timer for a time entry", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.harvestapp.com/v2/time_entries/{timeEntryId}/restart", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "timeEntryId": { "type": "number", "in": "path", "description": "Harvest time entry ID", "required": true } } } }, { "id": "list_projects", "name": "List Projects", "description": "List all projects in the Harvest account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/projects", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status" }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "updated_since": { "type": "string", "in": "query", "description": "Only return projects updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "projects", "historicalSummary": { "collectionKeys": ["projects", "data"], "collectionName": "projects", "itemFields": [{ "name": "id" }, { "name": "name" }, { "name": "code" }, { "name": "is_active" }, { "name": "client", "kind": "object" }, { "name": "updated_at" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "project budgets, notes, rates, and provider-specific payload fields" } } } }, { "id": "get_project", "name": "Get Project", "description": "Get details of a specific project", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/projects/{projectId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "projectId": { "type": "number", "in": "path", "description": "Harvest project ID", "required": true } } } }, { "id": "list_tasks", "name": "List Tasks", "description": "List all tasks available in the Harvest account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/tasks", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status" }, "updated_since": { "type": "string", "in": "query", "description": "Only return tasks updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "tasks", "historicalSummary": { "collectionKeys": ["tasks", "data"], "collectionName": "tasks", "itemFields": [{ "name": "id" }, { "name": "name" }, { "name": "is_active" }, { "name": "is_default" }, { "name": "updated_at" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "task rates and provider-specific payload fields" } } } }, { "id": "list_project_task_assignments", "name": "List Project Task Assignments", "description": "List all task assignments for a specific project (tasks billable to this project)", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/projects/{projectId}/task_assignments", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "projectId": { "type": "number", "in": "path", "description": "Harvest project ID", "required": true }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status" }, "updated_since": { "type": "string", "in": "query", "description": "Only return task assignments updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "task_assignments", "historicalSummary": { "collectionKeys": ["task_assignments", "data"], "collectionName": "taskAssignments", "itemFields": [{ "name": "id" }, { "name": "task", "kind": "object" }, { "name": "project", "kind": "object" }, { "name": "is_active" }, { "name": "updated_at" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "task assignment rates and provider-specific payload fields" } } } }, { "id": "list_clients", "name": "List Clients", "description": "List all clients in the Harvest account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/clients", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "is_active": { "type": "boolean", "in": "query", "description": "Filter by active status" }, "updated_since": { "type": "string", "in": "query", "description": "Only return clients updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "clients", "historicalSummary": { "collectionKeys": ["clients", "data"], "collectionName": "clients", "itemFields": [{ "name": "id" }, { "name": "name" }, { "name": "currency" }, { "name": "is_active" }, { "name": "updated_at" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "client addresses, statement keys, and provider-specific payload fields" } } } }, { "id": "get_client", "name": "Get Client", "description": "Get details of a specific client", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/clients/{clientId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "clientId": { "type": "number", "in": "path", "description": "Harvest client ID", "required": true } } } }, { "id": "list_invoices", "name": "List Invoices", "description": "List all invoices. Filter by client, status, or date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/invoices", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "state": { "type": "string", "in": "query", "description": "Filter by state: draft, open, paid, closed" }, "from": { "type": "string", "in": "query", "description": "Only invoices with issue_date >= from (YYYY-MM-DD)" }, "to": { "type": "string", "in": "query", "description": "Only invoices with issue_date <= to (YYYY-MM-DD)" }, "updated_since": { "type": "string", "in": "query", "description": "Only return invoices updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "invoices", "historicalSummary": { "collectionKeys": ["invoices", "data"], "collectionName": "invoices", "itemFields": [{ "name": "id" }, { "name": "number" }, { "name": "state" }, { "name": "amount" }, { "name": "due_date" }, { "name": "client", "kind": "object" }, { "name": "updated_at" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "invoice notes, line items, and provider-specific payload fields" } } } }, { "id": "get_invoice", "name": "Get Invoice", "description": "Get details of a specific invoice including line items", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/invoices/{invoiceId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "invoiceId": { "type": "number", "in": "path", "description": "Harvest invoice ID", "required": true } } } }, { "id": "create_invoice", "name": "Create Invoice", "description": "Create a new invoice for a client", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.harvestapp.com/v2/invoices", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" } }, "body": { "client_id": { "type": "number", "description": "Client ID to invoice", "required": true }, "subject": { "type": "string", "description": "Invoice subject line" }, "notes": { "type": "string", "description": "Invoice notes visible to client" }, "issue_date": { "type": "string", "description": "Issue date (YYYY-MM-DD, defaults to today)" }, "due_date": { "type": "string", "description": "Due date (YYYY-MM-DD)" }, "currency": { "type": "string", "description": "Invoice currency code (e.g. USD, EUR). Defaults to account currency." }, "line_items_import": { "type": "object", "description": "Import time entries/expenses into line items: { project_ids: number[], time: { summary_type, from, to }, expenses: { summary_type, from, to, attach_receipt } }" }, "line_items": { "type": "array", "description": "Manual line items array: [{ kind, description, unit_price, quantity, taxed, taxed2 }]" } } } }, { "id": "update_invoice", "name": "Update Invoice", "description": "Update an existing invoice (subject, notes, dates, line items, state)", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.harvestapp.com/v2/invoices/{invoiceId}", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "invoiceId": { "type": "number", "in": "path", "description": "Harvest invoice ID", "required": true } }, "body": { "subject": { "type": "string", "description": "Updated subject" }, "notes": { "type": "string", "description": "Updated notes" }, "issue_date": { "type": "string", "description": "Updated issue date (YYYY-MM-DD)" }, "due_date": { "type": "string", "description": "Updated due date (YYYY-MM-DD)" }, "line_items": { "type": "array", "description": "Updated line items" } } } }, { "id": "list_invoice_payments", "name": "List Invoice Payments", "description": "List all payments recorded for an invoice", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/invoices/{invoiceId}/payments", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "invoiceId": { "type": "number", "in": "path", "description": "Harvest invoice ID", "required": true }, "updated_since": { "type": "string", "in": "query", "description": "Only return payments updated after this ISO 8601 datetime" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "invoice_payments", "historicalSummary": { "collectionKeys": ["invoice_payments", "data"], "collectionName": "invoicePayments", "itemFields": [{ "name": "id" }, { "name": "amount" }, { "name": "paid_at" }, { "name": "created_at" }, { "name": "updated_at" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "payment notes and provider-specific payload fields" } } } }, { "id": "create_invoice_payment", "name": "Create Invoice Payment", "description": "Record a payment for an invoice", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.harvestapp.com/v2/invoices/{invoiceId}/payments", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "invoiceId": { "type": "number", "in": "path", "description": "Harvest invoice ID", "required": true } }, "body": { "amount": { "type": "number", "description": "Payment amount", "required": true }, "paid_at": { "type": "string", "description": "Payment datetime (ISO 8601, defaults to now)" }, "paid_date": { "type": "string", "description": "Payment date (YYYY-MM-DD, use instead of paid_at for date-only)" }, "notes": { "type": "string", "description": "Payment notes" }, "send_thank_you": { "type": "boolean", "description": "Send a thank-you email to the client", "default": false } } } }, { "id": "time_report_by_project", "name": "Time Report by Project", "description": "Get a time report aggregated by project. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/time/projects", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "include_fixed_fee": { "type": "boolean", "in": "query", "description": "Include fixed-fee projects" }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results", "historicalSummary": { "collectionKeys": ["results", "data"], "collectionName": "projectTimeReports", "itemFields": [{ "name": "project_id" }, { "name": "project_name" }, { "name": "client_id" }, { "name": "client_name" }, { "name": "total_hours" }, { "name": "billable_hours" }, { "name": "billable_amount" }, { "name": "currency" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "report breakdown details and provider-specific payload fields" } } } }, { "id": "time_report_by_team", "name": "Time Report by Team", "description": "Get a time report aggregated by team member. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/time/team", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results", "historicalSummary": { "collectionKeys": ["results", "data"], "collectionName": "teamTimeReports", "itemFields": [{ "name": "user_id" }, { "name": "user_name" }, { "name": "total_hours" }, { "name": "billable_hours" }, { "name": "billable_amount" }, { "name": "currency" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "team report details and provider-specific payload fields" } } } }, { "id": "time_report_by_client", "name": "Time Report by Client", "description": "Get a time report aggregated by client. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/time/clients", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results", "historicalSummary": { "collectionKeys": ["results", "data"], "collectionName": "clientTimeReports", "itemFields": [{ "name": "client_id" }, { "name": "client_name" }, { "name": "total_hours" }, { "name": "billable_hours" }, { "name": "billable_amount" }, { "name": "currency" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "client report details and provider-specific payload fields" } } } }, { "id": "time_report_by_task", "name": "Time Report by Task", "description": "Get a time report aggregated by task. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/time/tasks", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "client_id": { "type": "number", "in": "query", "description": "Filter by client ID" }, "project_id": { "type": "number", "in": "query", "description": "Filter by project ID" }, "user_id": { "type": "number", "in": "query", "description": "Filter by user ID" }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results", "historicalSummary": { "collectionKeys": ["results", "data"], "collectionName": "taskTimeReports", "itemFields": [{ "name": "task_id" }, { "name": "task_name" }, { "name": "total_hours" }, { "name": "billable_hours" }, { "name": "billable_amount" }, { "name": "currency" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "task report details and provider-specific payload fields" } } } }, { "id": "invoice_report", "name": "Invoice Report", "description": "Get an invoiced time and expenses report. Requires from and to date range.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.harvestapp.com/v2/reports/invoices/invoiced", "params": { "account_id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true, "headerName": "Harvest-Account-Id" }, "from": { "type": "string", "in": "query", "description": "Report start date (YYYY-MM-DD)", "required": true }, "to": { "type": "string", "in": "query", "description": "Report end date (YYYY-MM-DD)", "required": true }, "page": { "type": "number", "in": "query", "description": "Page number", "default": 1 }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 50 } }, "response": { "transform": "results", "historicalSummary": { "collectionKeys": ["results", "data"], "collectionName": "invoiceReports", "itemFields": [{ "name": "client_id" }, { "name": "client_name" }, { "name": "invoice_id" }, { "name": "invoice_number" }, { "name": "amount" }, { "name": "currency" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "invoice report details and provider-specific payload fields" } } } }], "prompts": [{ "id": "log_time", "title": "Log time for today", "prompt": "Log time entries for today. Show me my projects and tasks, then create time entries for the work I describe.", "category": "productivity", "icon": "clock" }, { "id": "weekly_timesheet", "title": "Show weekly timesheet", "prompt": "Show me my time entries for this week grouped by project. Calculate total hours per project and overall.", "category": "productivity", "icon": "calendar" }, { "id": "create_invoice", "title": "Create an invoice", "prompt": "Create a new invoice for a client. Import tracked time entries for the specified period and generate the invoice.", "category": "finance", "icon": "file-text" }, { "id": "invoice_status", "title": "Check invoice status", "prompt": "Show me all open invoices with their amounts, due dates, and payment status. Flag any overdue invoices.", "category": "finance", "icon": "alert-circle" }, { "id": "team_report", "title": "Team time report", "prompt": "Generate a time report for the team this month. Show hours logged per person, per project, and identify anyone who hasn't logged time.", "category": "management", "icon": "users" }], "suggestedWith": ["github", "jira", "slack"] },
|
|
16
|
+
{ "name": "jira", "displayName": "Jira", "icon": "jira.svg", "description": "Search, create, and manage Jira issues and projects", "auth": { "type": "oauth2", "provider": "atlassian", "authorizationUrl": "https://auth.atlassian.com/authorize", "tokenUrl": "https://auth.atlassian.com/oauth/token", "scopes": ["read:jira-work", "write:jira-work", "read:jira-user", "offline_access"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "Atlassian OAuth 2.0", "enableUrl": "https://developer.atlassian.com/console/myapps/" }], "additionalAuthParams": { "audience": "api.atlassian.com", "prompt": "consent" } }, "envVars": [{ "name": "ATLASSIAN_CLIENT_ID", "description": "Atlassian OAuth 2.0 Client ID (from your app)", "required": true, "sensitive": false, "docsUrl": "https://developer.atlassian.com/console/myapps/" }, { "name": "ATLASSIAN_CLIENT_SECRET", "description": "Atlassian OAuth 2.0 Client Secret", "required": true, "sensitive": true, "docsUrl": "https://developer.atlassian.com/console/myapps/" }], "tools": [{ "id": "list_sites", "name": "List Atlassian Sites", "description": "List Atlassian cloud sites/resources the OAuth token can access; use the returned id as cloudId for Jira and Confluence tools", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/oauth/token/accessible-resources", "response": { "transform": "", "historicalSummary": { "collectionKeys": ["values", "sites", "data"], "collectionName": "sites", "itemFields": [{ "name": "id" }, { "name": "gid" }, { "name": "key" }, { "name": "node_id" }, { "name": "name" }, { "name": "title" }, { "name": "summary" }, { "name": "subject" }, { "name": "number" }, { "name": "state" }, { "name": "status" }, { "name": "url" }, { "name": "html_url" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_by", "kind": "contact" }, { "name": "assignee", "kind": "contact" }, { "name": "owner", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "sites details and provider-specific payload fields" } } } }, { "id": "list_projects", "name": "List Projects", "description": "List all accessible Jira projects", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/project/search", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true }, "query": { "type": "string", "in": "query", "description": "Search text for project name or key" }, "maxResults": { "type": "number", "in": "query", "description": "Maximum projects to return", "default": 50 }, "startAt": { "type": "number", "in": "query", "description": "Pagination offset", "default": 0 } }, "response": { "transform": "values", "historicalSummary": { "collectionKeys": ["values", "projects", "data"], "collectionName": "projects", "itemFields": [{ "name": "id" }, { "name": "gid" }, { "name": "key" }, { "name": "node_id" }, { "name": "name" }, { "name": "title" }, { "name": "summary" }, { "name": "subject" }, { "name": "number" }, { "name": "state" }, { "name": "status" }, { "name": "url" }, { "name": "html_url" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_by", "kind": "contact" }, { "name": "assignee", "kind": "contact" }, { "name": "owner", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "projects details and provider-specific payload fields" } } } }, { "id": "get_project", "name": "Get Project", "description": "Get detailed information about a Jira project", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "projectIdOrKey": { "type": "string", "in": "path", "description": "Jira project ID or key", "required": true } } } }, { "id": "search_issues", "name": "Search Issues", "description": "Search Jira issues using JQL (Jira Query Language)", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/search/jql", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true }, "jql": { "type": "string", "in": "query", "description": "Jira Query Language search expression", "required": true }, "maxResults": { "type": "number", "in": "query", "description": "Maximum issues to return", "default": 50 }, "nextPageToken": { "type": "string", "in": "query", "description": "Pagination token from the previous Jira JQL search response" }, "fields": { "type": "array", "in": "query", "description": "Issue fields to include" } }, "response": { "transform": "issues", "historicalSummary": { "collectionKeys": ["issues", "data"], "collectionName": "issues", "itemFields": [{ "name": "id" }, { "name": "key" }, { "name": "summary" }, { "name": "status", "kind": "object" }, { "name": "assignee", "kind": "contact" }, { "name": "created" }, { "name": "updated" }], "outputFields": [{ "name": "total" }, { "name": "startAt" }, { "name": "maxResults" }], "omitted": "issue descriptions, comments, changelog, and provider-specific payload fields" } } } }, { "id": "get_issue", "name": "Get Issue", "description": "Get detailed information about a specific Jira issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true }, "fields": { "type": "string", "in": "query", "description": "Comma-separated issue fields to include" } } } }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new Jira issue in a project", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true } }, "body": { "fields": { "type": "object", "description": "Jira issue fields including project, issuetype, summary, and description", "required": true } } } }, { "id": "update_issue", "name": "Update Issue", "description": "Update an existing Jira issue (status, fields, etc.)", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from accessible-resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true } }, "body": { "fields": { "type": "object", "description": "Jira fields to set" }, "update": { "type": "object", "description": "Jira update operations" } } } }, { "id": "list_comments", "name": "List Comments", "description": "List comments on a Jira issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true }, "startAt": { "type": "number", "in": "query", "description": "Pagination offset", "default": 0 }, "maxResults": { "type": "number", "in": "query", "description": "Maximum comments to return", "default": 50 } }, "response": { "historicalSummary": { "collectionKeys": ["comments", "data"], "collectionName": "comments", "itemFields": [{ "name": "id" }, { "name": "body", "kind": "object" }, { "name": "author", "kind": "contact" }, { "name": "created" }, { "name": "updated" }], "outputFields": [{ "name": "total" }, { "name": "startAt" }, { "name": "maxResults" }], "omitted": "full comment payloads and provider-specific fields" } } } }, { "id": "add_comment", "name": "Add Comment", "description": "Add a comment to a Jira issue", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true } }, "body": { "body": { "type": "object", "description": "Comment body in Atlassian Document Format", "required": true } } } }, { "id": "get_transitions", "name": "Get Transitions", "description": "List available workflow transitions for a Jira issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true } } } }, { "id": "transition_issue", "name": "Transition Issue", "description": "Move a Jira issue to a new workflow status. First call get_transitions to get valid transition IDs, then pass the ID here.", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions", "params": { "cloudId": { "type": "string", "in": "path", "description": "Atlassian cloud ID from OAuth accessible resources", "required": true }, "issueIdOrKey": { "type": "string", "in": "path", "description": "Jira issue ID or key", "required": true } }, "body": { "transition": { "type": "object", "description": "Transition object with id field, e.g. {\"id\": \"21\"}", "required": true }, "fields": { "type": "object", "description": "Optional field updates to apply during the transition" }, "comment": { "type": "object", "description": "Optional comment in Atlassian Document Format to add with the transition" } } } }], "prompts": [{ "id": "find_bugs", "title": "Find open bugs", "prompt": "Search for all open bugs assigned to me or in my current sprint.", "category": "productivity", "icon": "bug" }, { "id": "create_task", "title": "Create a task", "prompt": "Create a new task in Jira with a title, description, and priority.", "category": "productivity", "icon": "plus" }, { "id": "sprint_summary", "title": "Sprint summary", "prompt": "Get a summary of all issues in the current sprint, organized by status.", "category": "productivity", "icon": "list" }, { "id": "update_status", "title": "Update issue status", "prompt": "Move an issue to a different status (To Do, In Progress, Done, etc.).", "category": "productivity", "icon": "check" }], "suggestedWith": ["github", "slack", "confluence"] },
|
|
17
|
+
{ "name": "linear", "displayName": "Linear", "icon": "linear.svg", "description": "Search, create, and manage Linear issues and projects", "auth": { "type": "oauth2", "provider": "linear", "authorizationUrl": "https://linear.app/oauth/authorize", "tokenUrl": "https://api.linear.app/oauth/token", "scopes": ["read", "write"], "tokenAuthMethod": "basic", "requiredApis": [{ "name": "Linear OAuth Application", "enableUrl": "https://linear.app/settings/api" }] }, "envVars": [{ "name": "LINEAR_CLIENT_ID", "description": "Linear OAuth Client ID (from your OAuth application)", "required": true, "sensitive": false, "docsUrl": "https://linear.app/settings/api" }, { "name": "LINEAR_CLIENT_SECRET", "description": "Linear OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://linear.app/settings/api" }], "tools": [{ "id": "search_issues", "name": "Search Issues", "description": "Search for Linear issues by title or description", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($query: String!, $first: Int) { searchIssues(term: $query, first: $first) { nodes { id identifier title description state { name } assignee { name } priority priorityLabel createdAt updatedAt } } }", "params": { "query": { "type": "string", "in": "body", "description": "Search query text", "required": true }, "first": { "type": "number", "in": "body", "description": "Max results", "default": 20 } }, "response": { "transform": "searchIssues", "historicalSummary": { "collectionKeys": ["searchIssues", "issues", "nodes", "data"], "collectionName": "issues", "itemFields": [{ "name": "id" }, { "name": "identifier" }, { "name": "title" }, { "name": "state", "kind": "object" }, { "name": "assignee", "kind": "contact" }, { "name": "url" }, { "name": "createdAt" }, { "name": "updatedAt" }], "outputFields": [{ "name": "pageInfo", "kind": "object" }], "omitted": "issue descriptions, comments, and provider-specific payload fields" } } } }, { "id": "get_issue", "name": "Get Issue", "description": "Get detailed information about a specific Linear issue", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($id: String!) { issue(id: $id) { id identifier title description state { name } assignee { name email } priority priorityLabel team { name } project { name } labels { nodes { name } } comments { nodes { body user { name } createdAt } } createdAt updatedAt } }", "params": { "id": { "type": "string", "in": "body", "description": "Issue ID or identifier (e.g. ENG-123)", "required": true } }, "response": { "transform": "issue" } } }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new Linear issue in a team", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($teamId: String!, $title: String!, $description: String, $priority: Int) { issueCreate(input: { teamId: $teamId, title: $title, description: $description, priority: $priority }) { success issue { id identifier title url } } }", "params": { "teamId": { "type": "string", "in": "body", "description": "Team ID", "required": true }, "title": { "type": "string", "in": "body", "description": "Issue title", "required": true }, "description": { "type": "string", "in": "body", "description": "Issue description (markdown)" }, "priority": { "type": "number", "in": "body", "description": "Priority (0=none, 1=urgent, 2=high, 3=medium, 4=low)" } }, "response": { "transform": "issueCreate" } } }, { "id": "update_issue", "name": "Update Issue", "description": "Update the status, assignee, or other properties of an issue", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($id: String!, $stateId: String, $assigneeId: String, $priority: Int) { issueUpdate(id: $id, input: { stateId: $stateId, assigneeId: $assigneeId, priority: $priority }) { success issue { id identifier title state { name } assignee { name } } } }", "params": { "id": { "type": "string", "in": "body", "description": "Issue ID", "required": true }, "stateId": { "type": "string", "in": "body", "description": "New state ID" }, "assigneeId": { "type": "string", "in": "body", "description": "New assignee user ID" }, "priority": { "type": "number", "in": "body", "description": "New priority" } }, "response": { "transform": "issueUpdate" } } }, { "id": "delete_issue", "name": "Delete Issue", "description": "Archive a Linear issue. By default this is non-permanent so canary-created issues do not remain active.", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($id: String!, $permanentlyDelete: Boolean) { issueDelete(id: $id, permanentlyDelete: $permanentlyDelete) { success } }", "params": { "id": { "type": "string", "in": "body", "description": "Issue ID", "required": true }, "permanentlyDelete": { "type": "boolean", "in": "body", "description": "Whether to permanently delete the issue. Defaults to false (archive).", "default": false } }, "response": { "transform": "issueDelete" } } }, { "id": "list_projects", "name": "List Projects", "description": "List all projects in the workspace", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($first: Int) { projects(first: $first) { nodes { id name description state startDate targetDate lead { name } teams { nodes { name } } } } }", "params": { "first": { "type": "number", "in": "body", "description": "Max results", "default": 50 } }, "response": { "transform": "projects", "historicalSummary": { "collectionKeys": ["projects", "nodes", "data"], "collectionName": "projects", "itemFields": [{ "name": "id" }, { "name": "gid" }, { "name": "key" }, { "name": "node_id" }, { "name": "name" }, { "name": "title" }, { "name": "summary" }, { "name": "subject" }, { "name": "number" }, { "name": "state" }, { "name": "status" }, { "name": "url" }, { "name": "html_url" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_by", "kind": "contact" }, { "name": "assignee", "kind": "contact" }, { "name": "owner", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "projects details and provider-specific payload fields" } } } }, { "id": "list_teams", "name": "List Teams", "description": "List Linear teams in the workspace so issues can be created in the right team", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($first: Int) { teams(first: $first) { nodes { id name key description private issueCount createdAt updatedAt } } }", "params": { "first": { "type": "number", "in": "body", "description": "Max results", "default": 50 } }, "response": { "transform": "teams", "historicalSummary": { "collectionKeys": ["teams", "nodes", "data"], "collectionName": "teams", "itemFields": [{ "name": "id" }, { "name": "gid" }, { "name": "key" }, { "name": "node_id" }, { "name": "name" }, { "name": "title" }, { "name": "summary" }, { "name": "subject" }, { "name": "number" }, { "name": "state" }, { "name": "status" }, { "name": "url" }, { "name": "html_url" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_by", "kind": "contact" }, { "name": "assignee", "kind": "contact" }, { "name": "owner", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "teams details and provider-specific payload fields" } } } }, { "id": "list_workflow_states", "name": "List Workflow States", "description": "List workflow states for a Linear team so issues can be moved to the right status", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($teamId: String!) { team(id: $teamId) { id name states { nodes { id name type color position } } } }", "params": { "teamId": { "type": "string", "in": "body", "description": "Team ID", "required": true } }, "response": { "transform": "team.states", "historicalSummary": { "collectionKeys": ["states", "nodes", "data"], "collectionName": "workflowStates", "itemFields": [{ "name": "id" }, { "name": "gid" }, { "name": "key" }, { "name": "node_id" }, { "name": "name" }, { "name": "title" }, { "name": "summary" }, { "name": "subject" }, { "name": "number" }, { "name": "state" }, { "name": "status" }, { "name": "url" }, { "name": "html_url" }, { "name": "created_at" }, { "name": "updated_at" }, { "name": "createdAt" }, { "name": "updatedAt" }, { "name": "user", "kind": "contact" }, { "name": "author", "kind": "contact" }, { "name": "created_by", "kind": "contact" }, { "name": "assignee", "kind": "contact" }, { "name": "owner", "kind": "contact" }], "outputFields": [{ "name": "nextPageToken" }, { "name": "next_page" }, { "name": "next" }, { "name": "offset" }, { "name": "total" }, { "name": "per_page" }, { "name": "page" }], "omitted": "workflowStates details and provider-specific payload fields" } } } }, { "id": "list_users", "name": "List Users", "description": "List Linear users in the workspace so issues can be assigned to the right person", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($first: Int) { users(first: $first) { nodes { id name displayName email active avatarUrl } } }", "params": { "first": { "type": "number", "in": "body", "description": "Max results", "default": 50 } }, "response": { "transform": "users", "historicalSummary": { "collectionKeys": ["users", "nodes", "data"], "collectionName": "users", "itemFields": [{ "name": "id" }, { "name": "name" }, { "name": "email" }, { "name": "active" }, { "name": "displayName" }], "outputFields": [{ "name": "pageInfo", "kind": "object" }], "omitted": "user avatars and provider-specific payload fields" } } } }, { "id": "add_comment", "name": "Add Comment", "description": "Add a comment to a Linear issue", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($issueId: String!, $body: String!) { commentCreate(input: { issueId: $issueId, body: $body }) { success comment { id body createdAt user { id name } issue { id identifier title } } } }", "params": { "issueId": { "type": "string", "in": "body", "description": "Issue ID", "required": true }, "body": { "type": "string", "in": "body", "description": "Comment body in markdown", "required": true } }, "response": { "transform": "commentCreate" } } }], "prompts": [{ "id": "find_issues", "title": "Find my issues", "prompt": "Search for Linear issues assigned to me or related to a specific topic.", "category": "productivity", "icon": "search" }, { "id": "create_bug_report", "title": "Create bug report", "prompt": "Create a new bug report in Linear with title, description, and relevant labels.", "category": "productivity", "icon": "plus" }, { "id": "update_issue_status", "title": "Update issue status", "prompt": "Update the status of a Linear issue (e.g., mark as done, in progress, blocked).", "category": "productivity", "icon": "check" }, { "id": "project_overview", "title": "Project overview", "prompt": "Get an overview of all projects in Linear, including their status and key issues.", "category": "productivity", "icon": "list" }], "suggestedWith": ["github", "slack", "figma"] },
|
|
18
18
|
{ "name": "mixpanel", "displayName": "Mixpanel", "icon": "mixpanel.svg", "description": "Track events, analyze funnels, and understand user behavior with Mixpanel analytics", "auth": { "type": "api-key", "requiredApis": [{ "name": "Mixpanel API", "enableUrl": "https://mixpanel.com/settings/project" }], "keyName": "MIXPANEL_PROJECT_TOKEN" }, "envVars": [{ "name": "MIXPANEL_PROJECT_TOKEN", "description": "Mixpanel Project Token for event tracking", "required": true, "sensitive": true, "docsUrl": "https://docs.mixpanel.com/docs/tracking-methods/id-management/authentication" }, { "name": "MIXPANEL_API_SECRET", "description": "Mixpanel API Secret for data export and query operations", "required": true, "sensitive": true, "docsUrl": "https://developer.mixpanel.com/reference/authentication" }, { "name": "MIXPANEL_PROJECT_ID", "description": "Mixpanel Project ID (found in project settings)", "required": true, "sensitive": false, "docsUrl": "https://docs.mixpanel.com/docs/admin/organizations-projects/manage-projects" }], "tools": [{ "id": "track_event", "name": "Track Event", "description": "Track a custom event in Mixpanel with properties", "requiresWrite": true }, { "id": "query_events", "name": "Query Events", "description": "Query and export event data from Mixpanel", "requiresWrite": false }, { "id": "get_funnel", "name": "Get Funnel", "description": "Retrieve funnel analysis data to understand conversion rates", "requiresWrite": false }, { "id": "get_retention", "name": "Get Retention", "description": "Analyze user retention cohorts over time", "requiresWrite": false }, { "id": "list_cohorts", "name": "List Cohorts", "description": "List all user cohorts defined in your Mixpanel project", "requiresWrite": false }], "prompts": [{ "id": "event_analysis", "title": "Event analysis", "prompt": "Show me the most important events tracked in my Mixpanel project over the last 7 days and their trends.", "category": "analytics", "icon": "chart" }, { "id": "funnel_performance", "title": "Funnel performance", "prompt": "Analyze my key conversion funnels and identify where users are dropping off.", "category": "analytics", "icon": "funnel" }, { "id": "retention_insights", "title": "Retention insights", "prompt": "Give me insights about user retention and cohort behavior over the past month.", "category": "analytics", "icon": "users" }], "suggestedWith": ["slack", "analytics", "monitoring"] },
|
|
19
19
|
{ "name": "neon", "displayName": "Neon", "icon": "neon.svg", "description": "Manage Neon Postgres projects, branches, and execute database queries", "auth": { "type": "api-key", "requiredApis": [{ "name": "Neon Management API", "enableUrl": "https://console.neon.tech/app/settings/api-keys" }], "tokenName": "API Key", "docsUrl": "https://neon.tech/docs/manage/api-keys" }, "envVars": [{ "name": "NEON_API_KEY", "description": "Neon API Key for Management API access", "required": true, "sensitive": true, "docsUrl": "https://neon.tech/docs/manage/api-keys" }, { "name": "DATABASE_URL", "description": "PostgreSQL connection string for database queries", "required": true, "sensitive": true, "docsUrl": "https://neon.tech/docs/connect/connect-from-any-app" }], "npmDependencies": { "pg": "^8.13.1" }, "tools": [{ "id": "list_projects", "name": "List Projects", "description": "List all Neon projects in your account", "requiresWrite": false }, { "id": "list_branches", "name": "List Branches", "description": "List all branches for a specific project", "requiresWrite": false }, { "id": "query_database", "name": "Query Database", "description": "Execute SQL queries against the connected database", "requiresWrite": false }, { "id": "list_tables", "name": "List Tables", "description": "List all tables in the connected database", "requiresWrite": false }, { "id": "describe_table", "name": "Describe Table", "description": "Get detailed schema information for a specific table", "requiresWrite": false }], "prompts": [{ "id": "check_db_status", "title": "Check database status", "prompt": "Show me the status of my Neon projects and their branches.", "category": "database", "icon": "database" }, { "id": "explore_schema", "title": "Explore database schema", "prompt": "List all tables in my database and show me the schema for the main tables.", "category": "database", "icon": "table" }, { "id": "query_data", "title": "Query database", "prompt": "Help me query my database to find specific data.", "category": "database", "icon": "search" }], "suggestedWith": ["stripe", "clerk", "vercel"] },
|
|
20
20
|
{ "name": "notion", "displayName": "Notion", "icon": "notion.svg", "description": "Search, read, and create pages in Notion workspaces", "auth": { "type": "oauth2", "provider": "notion", "authorizationUrl": "https://api.notion.com/v1/oauth/authorize", "tokenUrl": "https://api.notion.com/v1/oauth/token", "scopes": [], "tokenAuthMethod": "basic", "requiredApis": [{ "name": "Notion Integration", "enableUrl": "https://www.notion.so/my-integrations" }] }, "envVars": [{ "name": "NOTION_CLIENT_ID", "description": "Notion OAuth Client ID (from your integration)", "required": true, "sensitive": false, "docsUrl": "https://www.notion.so/my-integrations" }, { "name": "NOTION_CLIENT_SECRET", "description": "Notion OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://www.notion.so/my-integrations" }], "tools": [{ "id": "search_notion", "name": "Search Notion", "description": "Search pages and databases in the workspace", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://api.notion.com/v1/search", "params": { "Notion-Version": { "type": "string", "in": "header", "description": "Notion API version", "default": "2022-06-28" } }, "body": { "query": { "type": "string", "description": "Search query text" }, "filter": { "type": "object", "description": "Optional Notion search filter" }, "sort": { "type": "object", "description": "Optional Notion search sort" }, "page_size": { "type": "number", "description": "Maximum results to return", "default": 10 }, "start_cursor": { "type": "string", "description": "Pagination cursor" } }, "response": { "transform": "results" } } }, { "id": "read_page", "name": "Read Page", "description": "Read the content of a Notion page", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.notion.com/v1/blocks/{pageId}/children", "params": { "Notion-Version": { "type": "string", "in": "header", "description": "Notion API version", "default": "2022-06-28" }, "pageId": { "type": "string", "in": "path", "description": "Notion page ID", "required": true }, "page_size": { "type": "number", "in": "query", "description": "Maximum child blocks to return", "default": 100 }, "start_cursor": { "type": "string", "in": "query", "description": "Pagination cursor" } }, "response": { "transform": "results" } } }, { "id": "create_page", "name": "Create Page", "description": "Create a new page in a database or as a subpage", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.notion.com/v1/pages", "params": { "Notion-Version": { "type": "string", "in": "header", "description": "Notion API version", "default": "2022-06-28" } }, "body": { "parent": { "type": "object", "description": "Notion parent object, e.g. database_id or page_id", "required": true }, "properties": { "type": "object", "description": "Page properties", "required": true }, "children": { "type": "array", "description": "Optional child blocks" } } } }, { "id": "query_database", "name": "Query Database", "description": "Query a Notion database with filters and sorts", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://api.notion.com/v1/databases/{databaseId}/query", "params": { "Notion-Version": { "type": "string", "in": "header", "description": "Notion API version", "default": "2022-06-28" }, "databaseId": { "type": "string", "in": "path", "description": "Notion database ID", "required": true } }, "body": { "filter": { "type": "object", "description": "Optional Notion database filter" }, "sorts": { "type": "array", "description": "Optional Notion database sorts" }, "page_size": { "type": "number", "description": "Maximum results to return", "default": 10 }, "start_cursor": { "type": "string", "description": "Pagination cursor" } }, "response": { "transform": "results" } } }, { "id": "get_page", "name": "Get Page Metadata", "description": "Retrieve Notion page metadata and properties without fetching child block content", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.notion.com/v1/pages/{pageId}", "params": { "Notion-Version": { "type": "string", "in": "header", "description": "Notion API version", "default": "2022-06-28" }, "pageId": { "type": "string", "in": "path", "description": "Notion page ID", "required": true } } } }, { "id": "get_database", "name": "Get Database", "description": "Retrieve Notion database metadata, title, and property schema", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.notion.com/v1/databases/{databaseId}", "params": { "Notion-Version": { "type": "string", "in": "header", "description": "Notion API version", "default": "2022-06-28" }, "databaseId": { "type": "string", "in": "path", "description": "Notion database ID", "required": true } } } }, { "id": "append_blocks", "name": "Append Blocks", "description": "Append child blocks to a Notion page or block", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.notion.com/v1/blocks/{blockId}/children", "params": { "Notion-Version": { "type": "string", "in": "header", "description": "Notion API version", "default": "2022-06-28" }, "blockId": { "type": "string", "in": "path", "description": "Page or block ID to append children to", "required": true } }, "body": { "children": { "type": "array", "description": "Notion block objects to append", "required": true }, "after": { "type": "string", "description": "Optional existing child block ID after which to append" } } } }, { "id": "update_page", "name": "Update Page", "description": "Update Notion page properties or archive/unarchive a page", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://api.notion.com/v1/pages/{pageId}", "params": { "Notion-Version": { "type": "string", "in": "header", "description": "Notion API version", "default": "2022-06-28" }, "pageId": { "type": "string", "in": "path", "description": "Notion page ID", "required": true } }, "body": { "properties": { "type": "object", "description": "Page properties to update" }, "archived": { "type": "boolean", "description": "Whether the page should be archived" }, "icon": { "type": "object", "description": "Optional page icon" }, "cover": { "type": "object", "description": "Optional page cover" } } } }], "prompts": [{ "id": "search_docs", "title": "Search my docs", "prompt": "Search my Notion workspace for relevant documentation or notes about a topic.", "category": "productivity", "icon": "search" }, { "id": "summarize_page", "title": "Summarize a page", "prompt": "Read and summarize a specific Notion page. Extract the key points and action items.", "category": "productivity", "icon": "document" }, { "id": "create_meeting_notes", "title": "Create meeting notes", "prompt": "Create a new meeting notes page with today's date, attendees, agenda, and action items sections.", "category": "productivity", "icon": "plus" }], "suggestedWith": ["gmail", "slack", "calendar"] },
|
|
21
21
|
{ "name": "onedrive", "displayName": "OneDrive", "icon": "onedrive.svg", "description": "Access and manage files in Microsoft OneDrive", "auth": { "type": "oauth2", "provider": "microsoft", "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize", "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token", "scopes": ["Files.Read", "Files.ReadWrite", "Files.Read.All", "Files.ReadWrite.All", "offline_access"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "Microsoft Graph API", "enableUrl": "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }] }, "envVars": [{ "name": "MICROSOFT_CLIENT_ID", "description": "Microsoft Azure App Client ID (shared with Outlook/Teams/SharePoint)", "required": true, "sensitive": false, "docsUrl": "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }, { "name": "MICROSOFT_CLIENT_SECRET", "description": "Microsoft Azure App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }], "tools": [{ "id": "list_files", "name": "List Files", "description": "List files and folders in a OneDrive folder", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/drive/root/children", "params": { "$top": { "type": "number", "in": "query", "description": "Maximum number of items to return", "default": 200 }, "$select": { "type": "string", "in": "query", "description": "Comma-separated fields to return" } } } }, { "id": "search_files", "name": "Search Files", "description": "Search for files and folders in OneDrive by name or content", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/drive/root/search(q='{query}')", "params": { "query": { "type": "string", "in": "path", "description": "Search query", "required": true }, "$top": { "type": "number", "in": "query", "description": "Maximum number of items to return", "default": 200 } } } }, { "id": "upload_file", "name": "Upload File", "description": "Upload or update a file in OneDrive", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://graph.microsoft.com/v1.0/me/drive/items/{parentFolderId}:/{fileName}:/content", "params": { "parentFolderId": { "type": "string", "in": "path", "description": "Parent folder item ID, or root", "default": "root" }, "fileName": { "type": "string", "in": "path", "description": "Name of the file to upload", "required": true } }, "body": { "content": { "type": "string", "description": "File content to upload", "required": true } }, "contentType": "application/octet-stream" } }, { "id": "download_file", "name": "Download File", "description": "Download file content from OneDrive", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/drive/items/{itemId}/content", "params": { "itemId": { "type": "string", "in": "path", "description": "OneDrive file item ID", "required": true } } } }], "prompts": [{ "id": "search_documents", "title": "Search documents", "prompt": "Search for documents in OneDrive and summarize their content.", "category": "productivity", "icon": "search" }, { "id": "list_recent_files", "title": "List recent files", "prompt": "Show me the most recently modified files in my OneDrive.", "category": "productivity", "icon": "document" }, { "id": "organize_files", "title": "Organize files", "prompt": "Help me organize and manage files in my OneDrive storage.", "category": "productivity", "icon": "folder" }, { "id": "backup_file", "title": "Backup a file", "prompt": "Upload and backup a file to my OneDrive storage.", "category": "productivity", "icon": "upload" }], "suggestedWith": ["outlook", "teams", "sharepoint"] },
|
|
22
|
-
{ "name": "outlook", "displayName": "Microsoft Outlook", "icon": "outlook.svg", "description": "Read, send, and manage Outlook emails", "auth": { "type": "oauth2", "provider": "microsoft", "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize", "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token", "scopes": ["Mail.Read", "Mail.Send", "Mail.ReadWrite", "offline_access"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "Microsoft Graph API", "enableUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }] }, "envVars": [{ "name": "MICROSOFT_CLIENT_ID", "description": "Microsoft Azure App Client ID (Application ID)", "required": true, "sensitive": false, "docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }, { "name": "MICROSOFT_CLIENT_SECRET", "description": "Microsoft Azure App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }], "tools": [{ "id": "list_emails", "name": "List Emails", "description": "List recent emails from inbox or a specific folder", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/mailFolders/{folderId}/messages", "params": { "folderId": { "type": "string", "in": "path", "description": "Mail folder ID or well-known name", "required": true, "default": "inbox" }, "$top": { "type": "number", "in": "query", "description": "Maximum messages to return", "default": 25 }, "$select": { "type": "string", "in": "query", "description": "Comma-separated message fields to return" }, "$orderby": { "type": "string", "in": "query", "description": "Sort expression", "default": "receivedDateTime desc" }, "$filter": { "type": "string", "in": "query", "description": "OData filter expression" } }, "response": { "transform": "value", "historicalSummary": { "collectionKeys": ["value", "data", "messages"], "collectionName": "messages", "itemFields": [{ "name": "id" }, { "name": "conversationId" }, { "name": "from", "kind": "contact" }, { "name": "sender", "kind": "contact" }, { "name": "toRecipients", "kind": "contact-array" }, { "name": "subject" }, { "name": "receivedDateTime" }, { "name": "sentDateTime" }, { "name": "bodyPreview", "maxLength": 300 }, { "name": "categories", "kind": "string-array" }, { "name": "isRead" }, { "name": "importance" }, { "name": "hasAttachments" }], "outputFields": [{ "name": "@odata.nextLink" }, { "name": "@odata.count" }], "omitted": "large email bodies and provider-specific message fields" } } } }, { "id": "get_email", "name": "Get Email", "description": "Get detailed information about a specific email", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Microsoft Graph message ID", "required": true }, "$select": { "type": "string", "in": "query", "description": "Comma-separated message fields to return" } } } }, { "id": "send_email", "name": "Send Email", "description": "Send a new email message", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://graph.microsoft.com/v1.0/me/sendMail", "body": { "message": { "type": "object", "description": "Microsoft Graph message object with subject, body, toRecipients, etc.", "required": true }, "saveToSentItems": { "type": "boolean", "description": "Save sent message to Sent Items", "default": true } } } }, { "id": "search_emails", "name": "Search Emails", "description": "Search emails by query, subject, sender, or date", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/messages", "params": { "$search": { "type": "string", "in": "query", "description": "Search query, e.g. \"subject:roadmap\"", "required": true }, "$top": { "type": "number", "in": "query", "description": "Maximum messages to return", "default": 25 }, "$select": { "type": "string", "in": "query", "description": "Comma-separated message fields to return" } }, "response": { "transform": "value", "historicalSummary": { "collectionKeys": ["value", "data", "messages"], "collectionName": "messages", "itemFields": [{ "name": "id" }, { "name": "conversationId" }, { "name": "from", "kind": "contact" }, { "name": "sender", "kind": "contact" }, { "name": "toRecipients", "kind": "contact-array" }, { "name": "subject" }, { "name": "receivedDateTime" }, { "name": "sentDateTime" }, { "name": "bodyPreview", "maxLength": 300 }, { "name": "categories", "kind": "string-array" }, { "name": "isRead" }, { "name": "importance" }, { "name": "hasAttachments" }], "outputFields": [{ "name": "@odata.nextLink" }, { "name": "@odata.count" }], "omitted": "large email bodies and provider-specific message fields" } } } }, { "id": "list_folders", "name": "List Folders", "description": "List all mail folders in the mailbox", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/mailFolders", "params": { "includeHiddenFolders": { "type": "boolean", "in": "query", "description": "Include hidden folders", "default": false }, "$top": { "type": "number", "in": "query", "description": "Maximum folders to return", "default": 100 } }, "response": { "transform": "value" } } }], "prompts": [{ "id": "check_emails", "title": "Check my emails", "prompt": "List my recent unread emails and summarize the most important ones.", "category": "productivity", "icon": "mail" }, { "id": "search_emails", "title": "Search my emails", "prompt": "Search my emails for specific topics, senders, or date ranges.", "category": "productivity", "icon": "search" }, { "id": "draft_email", "title": "Draft an email", "prompt": "Help me draft a professional email with proper formatting and tone.", "category": "productivity", "icon": "compose" }], "suggestedWith": ["teams", "calendar", "gmail"] },
|
|
22
|
+
{ "name": "outlook", "displayName": "Microsoft Outlook", "icon": "outlook.svg", "description": "Read, send, and manage Outlook emails", "auth": { "type": "oauth2", "provider": "microsoft", "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize", "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token", "scopes": ["Mail.Read", "Mail.Send", "Mail.ReadWrite", "offline_access"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "Microsoft Graph API", "enableUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }] }, "envVars": [{ "name": "MICROSOFT_CLIENT_ID", "description": "Microsoft Azure App Client ID (Application ID)", "required": true, "sensitive": false, "docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }, { "name": "MICROSOFT_CLIENT_SECRET", "description": "Microsoft Azure App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }], "tools": [{ "id": "list_emails", "name": "List Emails", "description": "List recent emails from inbox or a specific folder", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/mailFolders/{folderId}/messages", "params": { "folderId": { "type": "string", "in": "path", "description": "Mail folder ID or well-known name", "required": true, "default": "inbox" }, "$top": { "type": "number", "in": "query", "description": "Maximum messages to return", "default": 25 }, "$select": { "type": "string", "in": "query", "description": "Comma-separated message fields to return" }, "$orderby": { "type": "string", "in": "query", "description": "Sort expression", "default": "receivedDateTime desc" }, "$filter": { "type": "string", "in": "query", "description": "OData filter expression" } }, "response": { "transform": "value", "historicalSummary": { "collectionKeys": ["value", "data", "messages"], "collectionName": "messages", "itemFields": [{ "name": "id" }, { "name": "conversationId" }, { "name": "from", "kind": "contact" }, { "name": "sender", "kind": "contact" }, { "name": "toRecipients", "kind": "contact-array" }, { "name": "subject" }, { "name": "receivedDateTime" }, { "name": "sentDateTime" }, { "name": "bodyPreview", "maxLength": 300 }, { "name": "categories", "kind": "string-array" }, { "name": "isRead" }, { "name": "importance" }, { "name": "hasAttachments" }], "outputFields": [{ "name": "@odata.nextLink" }, { "name": "@odata.count" }], "omitted": "large email bodies and provider-specific message fields" } } } }, { "id": "get_email", "name": "Get Email", "description": "Get detailed information about a specific email", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Microsoft Graph message ID", "required": true }, "$select": { "type": "string", "in": "query", "description": "Comma-separated message fields to return" } } } }, { "id": "send_email", "name": "Send Email", "description": "Send a new email message", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://graph.microsoft.com/v1.0/me/sendMail", "body": { "message": { "type": "object", "description": "Microsoft Graph message object with subject, body, toRecipients, etc.", "required": true }, "saveToSentItems": { "type": "boolean", "description": "Save sent message to Sent Items", "default": true } } } }, { "id": "search_emails", "name": "Search Emails", "description": "Search emails by query, subject, sender, or date", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/messages", "params": { "$search": { "type": "string", "in": "query", "description": "Search query, e.g. \"subject:roadmap\"", "required": true }, "$top": { "type": "number", "in": "query", "description": "Maximum messages to return", "default": 25 }, "$select": { "type": "string", "in": "query", "description": "Comma-separated message fields to return" } }, "response": { "transform": "value", "historicalSummary": { "collectionKeys": ["value", "data", "messages"], "collectionName": "messages", "itemFields": [{ "name": "id" }, { "name": "conversationId" }, { "name": "from", "kind": "contact" }, { "name": "sender", "kind": "contact" }, { "name": "toRecipients", "kind": "contact-array" }, { "name": "subject" }, { "name": "receivedDateTime" }, { "name": "sentDateTime" }, { "name": "bodyPreview", "maxLength": 300 }, { "name": "categories", "kind": "string-array" }, { "name": "isRead" }, { "name": "importance" }, { "name": "hasAttachments" }], "outputFields": [{ "name": "@odata.nextLink" }, { "name": "@odata.count" }], "omitted": "large email bodies and provider-specific message fields" } } } }, { "id": "list_folders", "name": "List Folders", "description": "List all mail folders in the mailbox", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/me/mailFolders", "params": { "includeHiddenFolders": { "type": "boolean", "in": "query", "description": "Include hidden folders", "default": false }, "$top": { "type": "number", "in": "query", "description": "Maximum folders to return", "default": 100 } }, "response": { "transform": "value", "historicalSummary": { "collectionKeys": ["value", "folders", "data"], "collectionName": "folders", "itemFields": [{ "name": "id" }, { "name": "displayName" }, { "name": "parentFolderId" }, { "name": "childFolderCount" }, { "name": "unreadItemCount" }, { "name": "totalItemCount" }], "outputFields": [{ "name": "@odata.nextLink" }, { "name": "@odata.count" }], "omitted": "folder provider-specific payload fields" } } } }], "prompts": [{ "id": "check_emails", "title": "Check my emails", "prompt": "List my recent unread emails and summarize the most important ones.", "category": "productivity", "icon": "mail" }, { "id": "search_emails", "title": "Search my emails", "prompt": "Search my emails for specific topics, senders, or date ranges.", "category": "productivity", "icon": "search" }, { "id": "draft_email", "title": "Draft an email", "prompt": "Help me draft a professional email with proper formatting and tone.", "category": "productivity", "icon": "compose" }], "suggestedWith": ["teams", "calendar", "gmail"] },
|
|
23
23
|
{ "name": "posthog", "displayName": "PostHog", "icon": "posthog.svg", "description": "Access analytics, feature flags, and user insights from PostHog", "auth": { "type": "api-key", "requiredApis": [{ "name": "PostHog API", "enableUrl": "https://app.posthog.com/project/settings" }], "keyName": "POSTHOG_API_KEY", "headerName": "Authorization", "headerPrefix": "Bearer" }, "envVars": [{ "name": "POSTHOG_API_KEY", "description": "PostHog Personal API Key", "required": true, "sensitive": true, "docsUrl": "https://posthog.com/docs/api/overview" }, { "name": "POSTHOG_HOST", "description": "PostHog API host (defaults to https://app.posthog.com)", "required": false, "sensitive": false, "docsUrl": "https://posthog.com/docs/self-host" }], "tools": [{ "id": "get_trends", "name": "Get Trends", "description": "Retrieve event trends and analytics data", "requiresWrite": false }, { "id": "list_feature_flags", "name": "List Feature Flags", "description": "List all feature flags in your PostHog project", "requiresWrite": false }, { "id": "list_persons", "name": "List Persons", "description": "List persons/users tracked in PostHog", "requiresWrite": false }, { "id": "capture_event", "name": "Capture Event", "description": "Track a custom event in PostHog", "requiresWrite": true }], "prompts": [{ "id": "trend_analysis", "title": "Trend analysis", "prompt": "Show me the trends for key events in my PostHog project over the last 7 days.", "category": "analytics", "icon": "chart" }, { "id": "feature_flag_status", "title": "Feature flag status", "prompt": "List all active feature flags and their current rollout status.", "category": "analytics", "icon": "flag" }, { "id": "user_insights", "title": "User insights", "prompt": "Give me insights about recent user activity and top users in my PostHog project.", "category": "analytics", "icon": "users" }], "suggestedWith": ["slack", "analytics", "monitoring"] },
|
|
24
24
|
{ "name": "salesforce", "displayName": "Salesforce", "icon": "salesforce.svg", "description": "Manage accounts, contacts, opportunities, and leads in your Salesforce CRM", "auth": { "type": "oauth2", "provider": "salesforce", "authorizationUrl": "https://login.salesforce.com/services/oauth2/authorize", "tokenUrl": "https://login.salesforce.com/services/oauth2/token", "scopes": ["api", "refresh_token", "offline_access"], "tokenAuthMethod": "request_body", "requiredApis": [{ "name": "Salesforce Connected App", "enableUrl": "https://login.salesforce.com/" }] }, "envVars": [{ "name": "SALESFORCE_CLIENT_ID", "description": "Salesforce OAuth Consumer Key (from your Connected App)", "required": true, "sensitive": false, "docsUrl": "https://help.salesforce.com/s/articleView?id=sf.connected_app_create.htm" }, { "name": "SALESFORCE_CLIENT_SECRET", "description": "Salesforce OAuth Consumer Secret", "required": true, "sensitive": true, "docsUrl": "https://help.salesforce.com/s/articleView?id=sf.connected_app_create.htm" }], "tools": [{ "id": "list_accounts", "name": "List Accounts", "description": "List accounts from your Salesforce CRM", "requiresWrite": false, "endpoint": { "method": "GET", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/query", "params": { "q": { "type": "string", "in": "query", "description": "SOQL query for accounts", "default": "SELECT Id, Name, Type, Industry, Phone, Website FROM Account ORDER BY LastModifiedDate DESC LIMIT 50" } }, "response": { "transform": "records" } } }, { "id": "get_account", "name": "Get Account", "description": "Get detailed information about a specific account", "requiresWrite": false, "endpoint": { "method": "GET", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/sobjects/Account/{accountId}", "params": { "accountId": { "type": "string", "in": "path", "description": "Salesforce Account ID", "required": true } } } }, { "id": "list_contacts", "name": "List Contacts", "description": "List contacts from your Salesforce CRM", "requiresWrite": false, "endpoint": { "method": "GET", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/query", "params": { "q": { "type": "string", "in": "query", "description": "SOQL query for contacts", "default": "SELECT Id, FirstName, LastName, Email, Phone, AccountId FROM Contact ORDER BY LastModifiedDate DESC LIMIT 50" } }, "response": { "transform": "records" } } }, { "id": "list_opportunities", "name": "List Opportunities", "description": "List sales opportunities from your Salesforce CRM", "requiresWrite": false, "endpoint": { "method": "GET", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/query", "params": { "q": { "type": "string", "in": "query", "description": "SOQL query for opportunities", "default": "SELECT Id, Name, StageName, Amount, CloseDate, AccountId FROM Opportunity ORDER BY CloseDate DESC LIMIT 50" } }, "response": { "transform": "records" } } }, { "id": "create_lead", "name": "Create Lead", "description": "Create a new lead in Salesforce CRM", "requiresWrite": true, "endpoint": { "method": "POST", "url": "{{oauth.raw.instance_url}}/services/data/v61.0/sobjects/Lead", "body": { "LastName": { "type": "string", "description": "Lead last name", "required": true }, "Company": { "type": "string", "description": "Lead company", "required": true }, "FirstName": { "type": "string", "description": "Lead first name" }, "Email": { "type": "string", "description": "Lead email address" }, "Phone": { "type": "string", "description": "Lead phone number" }, "Status": { "type": "string", "description": "Lead status" } } } }], "prompts": [{ "id": "find_accounts", "title": "Find accounts", "prompt": "Search for accounts in my Salesforce CRM and show me their key information.", "category": "crm", "icon": "search" }, { "id": "create_lead", "title": "Create a lead", "prompt": "Create a new lead in Salesforce CRM with the information I provide.", "category": "crm", "icon": "plus" }, { "id": "pipeline_summary", "title": "Pipeline summary", "prompt": "Show me a summary of my current sales opportunities and pipeline status.", "category": "crm", "icon": "chart" }, { "id": "contact_lookup", "title": "Contact lookup", "prompt": "Find and display information about specific contacts in my Salesforce CRM.", "category": "crm", "icon": "user" }], "suggestedWith": ["gmail", "slack", "calendar"] },
|
|
25
25
|
{ "name": "sentry", "displayName": "Sentry", "icon": "sentry.svg", "description": "Monitor errors, track issues, and manage Sentry projects", "auth": { "type": "oauth2", "provider": "sentry", "authorizationUrl": "https://sentry.io/oauth/authorize/", "tokenUrl": "https://sentry.io/oauth/token/", "scopes": ["org:read", "project:read", "event:read", "event:write"], "tokenAuthMethod": "none", "pkce": true, "supportsRefreshToken": true, "requiredApis": [{ "name": "Sentry OAuth Application", "enableUrl": "https://sentry.io/settings/account/api/applications/" }] }, "envVars": [{ "name": "SENTRY_CLIENT_ID", "description": "Sentry OAuth Client ID from your public OAuth application", "required": true, "sensitive": false, "docsUrl": "https://docs.sentry.io/api/auth/" }, { "name": "SENTRY_ORG", "description": "Default Sentry organization slug for prompts that do not specify one", "required": false, "sensitive": false, "docsUrl": "https://docs.sentry.io/api/organizations/" }], "tools": [{ "id": "list_organizations", "name": "List Organizations", "description": "List Sentry organizations available to the authenticated user so agents can discover organization slugs before project or issue calls", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sentry.io/api/0/organizations/", "params": { "owner": { "type": "boolean", "in": "query", "description": "Restrict results to organizations where the authenticated user is an owner" }, "query": { "type": "string", "in": "query", "description": "Filter organizations by name, slug, status, id, email, or member id" }, "cursor": { "type": "string", "in": "query", "description": "Pagination cursor" } } } }, { "id": "list_projects", "name": "List Projects", "description": "List Sentry projects for an organization", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sentry.io/api/0/organizations/{organizationSlug}/projects/", "params": { "organizationSlug": { "type": "string", "in": "path", "description": "Sentry organization slug", "required": true }, "cursor": { "type": "string", "in": "query", "description": "Pagination cursor" } } } }, { "id": "list_issues", "name": "List Issues", "description": "List Sentry issues for a project", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sentry.io/api/0/projects/{organizationSlug}/{projectSlug}/issues/", "params": { "organizationSlug": { "type": "string", "in": "path", "description": "Sentry organization slug", "required": true }, "projectSlug": { "type": "string", "in": "path", "description": "Sentry project slug", "required": true }, "query": { "type": "string", "in": "query", "description": "Sentry issue search query, for example is:unresolved" }, "statsPeriod": { "type": "string", "in": "query", "description": "Stats period, for example 24h, 14d, or 30d" }, "limit": { "type": "number", "in": "query", "description": "Maximum number of issues to return" }, "cursor": { "type": "string", "in": "query", "description": "Pagination cursor" } } } }, { "id": "get_issue", "name": "Get Issue", "description": "Get details for a Sentry issue", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sentry.io/api/0/organizations/{organizationSlug}/issues/{issueId}/", "params": { "organizationSlug": { "type": "string", "in": "path", "description": "Sentry organization slug", "required": true }, "issueId": { "type": "string", "in": "path", "description": "Sentry issue ID", "required": true }, "collapse": { "type": "string[]", "in": "query", "description": "Optional response sections to collapse" } } } }, { "id": "resolve_issue", "name": "Resolve Issue", "description": "Resolve a Sentry issue", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://sentry.io/api/0/organizations/{organizationSlug}/issues/{issueId}/", "params": { "organizationSlug": { "type": "string", "in": "path", "description": "Sentry organization slug", "required": true }, "issueId": { "type": "string", "in": "path", "description": "Sentry issue ID", "required": true } }, "body": { "status": { "type": "string", "description": "New issue status", "default": "resolved" }, "statusDetails": { "type": "object", "description": "Optional Sentry status details" } } } }], "prompts": [{ "id": "check_errors", "title": "Check recent errors", "prompt": "Show me recent errors and issues in my Sentry projects and help me prioritize which ones to fix.", "category": "development", "icon": "alert-triangle" }, { "id": "analyze_issue", "title": "Analyze an issue", "prompt": "Help me analyze a specific Sentry issue, understand its root cause, and suggest a fix.", "category": "development", "icon": "bug" }, { "id": "project_health", "title": "Project health check", "prompt": "Give me an overview of the health of my Sentry projects, including error rates and trending issues.", "category": "analytics", "icon": "activity" }], "suggestedWith": ["github", "slack", "linear"], "category": "development" },
|
|
@@ -27,7 +27,7 @@ export const connectors = [
|
|
|
27
27
|
{ "name": "sharepoint", "displayName": "SharePoint", "icon": "sharepoint.svg", "description": "Access and manage SharePoint sites, document libraries, and files", "auth": { "type": "oauth2", "provider": "microsoft", "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize", "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token", "scopes": ["Sites.Read.All", "Sites.ReadWrite.All", "Files.Read.All", "Files.ReadWrite.All", "offline_access"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "Microsoft Graph API", "enableUrl": "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }] }, "envVars": [{ "name": "MICROSOFT_CLIENT_ID", "description": "Microsoft Azure App Client ID (shared with Outlook/Teams)", "required": true, "sensitive": false, "docsUrl": "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }, { "name": "MICROSOFT_CLIENT_SECRET", "description": "Microsoft Azure App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade" }], "tools": [{ "id": "list_sites", "name": "List SharePoint Sites", "description": "List all SharePoint sites the user has access to", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/sites", "params": { "search": { "type": "string", "in": "query", "description": "Search term for SharePoint sites", "default": "*" }, "$top": { "type": "number", "in": "query", "description": "Maximum number of sites to return", "default": 200 } }, "response": { "transform": "value" } } }, { "id": "get_site", "name": "Get Site Details", "description": "Get detailed information about a specific SharePoint site", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/sites/{siteId}", "params": { "siteId": { "type": "string", "in": "path", "description": "SharePoint site ID", "required": true } } } }, { "id": "list_files", "name": "List Files", "description": "List files and folders in a SharePoint document library", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/sites/{siteId}/drive/root/children", "params": { "siteId": { "type": "string", "in": "path", "description": "SharePoint site ID", "required": true }, "$top": { "type": "number", "in": "query", "description": "Maximum number of items to return", "default": 200 } } } }, { "id": "get_file", "name": "Get File", "description": "Get file metadata and content from SharePoint", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://graph.microsoft.com/v1.0/sites/{siteId}/drive/items/{itemId}", "params": { "siteId": { "type": "string", "in": "path", "description": "SharePoint site ID", "required": true }, "itemId": { "type": "string", "in": "path", "description": "Drive item ID", "required": true } } } }, { "id": "upload_file", "name": "Upload File", "description": "Upload a file to a SharePoint document library", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://graph.microsoft.com/v1.0/sites/{siteId}/drive/items/{parentFolderId}:/{fileName}:/content", "params": { "siteId": { "type": "string", "in": "path", "description": "SharePoint site ID", "required": true }, "parentFolderId": { "type": "string", "in": "path", "description": "Parent folder item ID, or root", "default": "root" }, "fileName": { "type": "string", "in": "path", "description": "Name of the file to upload", "required": true } }, "body": { "content": { "type": "string", "description": "File content to upload", "required": true } }, "contentType": "application/octet-stream" } }], "prompts": [{ "id": "search_documents", "title": "Search documents", "prompt": "Search for documents in SharePoint sites and summarize their content.", "category": "productivity", "icon": "search" }, { "id": "list_recent_files", "title": "List recent files", "prompt": "Show me the most recently modified files across all SharePoint sites I have access to.", "category": "productivity", "icon": "document" }, { "id": "organize_documents", "title": "Organize documents", "prompt": "Help me organize and categorize documents in a SharePoint library.", "category": "productivity", "icon": "folder" }], "suggestedWith": ["outlook", "teams", "onedrive"] },
|
|
28
28
|
{ "name": "sheets", "displayName": "Google Sheets", "icon": "sheets.svg", "description": "Read, write, and manage Google Sheets spreadsheets", "auth": { "type": "oauth2", "provider": "google", "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", "tokenUrl": "https://oauth2.googleapis.com/token", "scopes": ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive.readonly", "https://www.googleapis.com/auth/drive.file"], "requiredApis": [{ "name": "Google Sheets API", "enableUrl": "https://console.cloud.google.com/apis/library/sheets.googleapis.com" }, { "name": "Google Drive API", "enableUrl": "https://console.cloud.google.com/apis/library/drive.googleapis.com" }] }, "envVars": [{ "name": "GOOGLE_CLIENT_ID", "description": "Google OAuth Client ID", "required": true, "sensitive": false, "docsUrl": "https://console.cloud.google.com/apis/credentials" }, { "name": "GOOGLE_CLIENT_SECRET", "description": "Google OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://console.cloud.google.com/apis/credentials" }], "tools": [{ "id": "list_spreadsheets", "name": "List Spreadsheets", "description": "List recent Google Sheets spreadsheets from Drive", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://www.googleapis.com/drive/v3/files", "params": { "q": { "type": "string", "in": "query", "description": "Drive query limited to Google Sheets spreadsheets", "default": "mimeType='application/vnd.google-apps.spreadsheet' and trashed=false" }, "pageSize": { "type": "number", "in": "query", "description": "Maximum number of spreadsheets to return", "default": 100 }, "pageToken": { "type": "string", "in": "query", "description": "Pagination token" }, "fields": { "type": "string", "in": "query", "description": "Partial response field selector", "default": "nextPageToken, files(id, name, webViewLink, modifiedTime)" } }, "response": { "transform": "files" } } }, { "id": "get_spreadsheet", "name": "Get Spreadsheet", "description": "Get spreadsheet metadata including sheet names and properties", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "includeGridData": { "type": "boolean", "in": "query", "description": "Whether to include grid data", "default": false }, "ranges": { "type": "string[]", "in": "query", "description": "Ranges to include when includeGridData is true" } } } }, { "id": "read_range", "name": "Read Range", "description": "Read cell data from a spreadsheet range", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "range": { "type": "string", "in": "path", "description": "A1 notation range to read", "required": true }, "majorDimension": { "type": "string", "in": "query", "description": "Major dimension for returned values" }, "valueRenderOption": { "type": "string", "in": "query", "description": "How values should be rendered" } } } }, { "id": "write_range", "name": "Write Range", "description": "Write data to a spreadsheet range", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "range": { "type": "string", "in": "path", "description": "A1 notation range to write", "required": true }, "valueInputOption": { "type": "string", "in": "query", "description": "How input values should be interpreted", "default": "USER_ENTERED" }, "includeValuesInResponse": { "type": "boolean", "in": "query", "description": "Whether the response should include written values", "default": false } }, "body": { "values": { "type": "array", "description": "2D array of row values to write", "required": true }, "majorDimension": { "type": "string", "description": "Major dimension of provided values", "default": "ROWS" } } } }, { "id": "create_spreadsheet", "name": "Create Spreadsheet", "description": "Create a new spreadsheet with optional initial data", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets", "body": { "properties": { "type": "object", "description": "Spreadsheet properties such as title", "required": true }, "sheets": { "type": "array", "description": "Optional initial sheet definitions" } } } }, { "id": "append_rows", "name": "Append Rows", "description": "Append rows to a spreadsheet range", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}:append", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "range": { "type": "string", "in": "path", "description": "A1 notation range/table to append to", "required": true }, "valueInputOption": { "type": "string", "in": "query", "description": "How input values should be interpreted", "default": "USER_ENTERED" }, "insertDataOption": { "type": "string", "in": "query", "description": "How inserted data should be handled", "default": "INSERT_ROWS" }, "includeValuesInResponse": { "type": "boolean", "in": "query", "description": "Whether the response should include appended values", "default": false } }, "body": { "values": { "type": "array", "description": "2D array of row values to append", "required": true }, "majorDimension": { "type": "string", "description": "Major dimension of provided values", "default": "ROWS" } } } }, { "id": "clear_range", "name": "Clear Range", "description": "Clear values from a spreadsheet range", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}:clear", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true }, "range": { "type": "string", "in": "path", "description": "A1 notation range to clear", "required": true } }, "body": {} } }, { "id": "batch_update", "name": "Batch Update", "description": "Run raw Google Sheets batchUpdate requests for formatting and structural changes", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "Google Sheets API batchUpdate request objects", "required": true }, "includeSpreadsheetInResponse": { "type": "boolean", "description": "Whether to include the updated spreadsheet in the response" } } } }, { "id": "add_sheet", "name": "Add Sheet", "description": "Add a new sheet/tab to a spreadsheet", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing an addSheet request", "required": true } } } }, { "id": "delete_sheet", "name": "Delete Sheet", "description": "Delete a sheet/tab from a spreadsheet by sheet ID", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing a deleteSheet request", "required": true } } } }, { "id": "rename_sheet", "name": "Rename Sheet", "description": "Rename a sheet/tab by sheet ID", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing an updateSheetProperties request", "required": true } } } }, { "id": "delete_spreadsheet", "name": "Delete Spreadsheet", "description": "Move an app-accessible spreadsheet file to trash", "requiresWrite": true, "endpoint": { "method": "PATCH", "url": "https://www.googleapis.com/drive/v3/files/{spreadsheetId}", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID / Drive file ID", "required": true } }, "body": { "trashed": { "type": "boolean", "description": "Whether to move the spreadsheet file to trash", "default": true } } } }, { "id": "find_replace", "name": "Find and Replace", "description": "Find and replace text in a spreadsheet or sheet", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing a findReplace request", "required": true } } } }, { "id": "copy_sheet", "name": "Copy Sheet", "description": "Copy a sheet/tab to another spreadsheet", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Source spreadsheet ID", "required": true }, "sheetId": { "type": "number", "in": "path", "description": "Source sheet ID", "required": true } }, "body": { "destinationSpreadsheetId": { "type": "string", "description": "Destination spreadsheet ID", "required": true } } } }, { "id": "create_chart", "name": "Create Chart", "description": "Create an embedded chart using a Sheets API chart specification", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing an addChart request", "required": true } } } }, { "id": "set_data_validation", "name": "Set Data Validation", "description": "Set data validation rules on a sheet range", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate", "params": { "spreadsheetId": { "type": "string", "in": "path", "description": "Google Sheets spreadsheet ID", "required": true } }, "body": { "requests": { "type": "array", "description": "A batchUpdate requests array containing a setDataValidation request", "required": true } } } }], "prompts": [{ "id": "analyze_data", "title": "Analyze spreadsheet data", "prompt": "Read and analyze data from a Google Sheets spreadsheet. Provide insights, trends, and statistics.", "category": "productivity", "icon": "chart" }, { "id": "create_report", "title": "Create a report spreadsheet", "prompt": "Create a new Google Sheets spreadsheet with formatted data, headers, and calculations.", "category": "productivity", "icon": "plus" }, { "id": "update_tracker", "title": "Update a tracker", "prompt": "Update a tracking spreadsheet with new data. Add rows, update values, or calculate totals.", "category": "productivity", "icon": "edit" }], "suggestedWith": ["gmail", "calendar", "notion"] },
|
|
29
29
|
{ "name": "shopify", "displayName": "Shopify", "icon": "shopify.svg", "description": "Manage products, orders, and customers in your Shopify store", "auth": { "type": "oauth2", "provider": "shopify", "authorizationUrl": "https://shop.myshopify.com/admin/oauth/authorize", "tokenUrl": "https://shop.myshopify.com/admin/oauth/access_token", "scopes": ["read_products", "write_products", "read_orders"], "requiredApis": [{ "name": "Shopify Admin API", "enableUrl": "https://partners.shopify.com" }] }, "envVars": [{ "name": "SHOPIFY_CLIENT_ID", "description": "Shopify OAuth Client ID (API Key)", "required": true, "sensitive": false, "docsUrl": "https://shopify.dev/docs/apps/auth/oauth" }, { "name": "SHOPIFY_CLIENT_SECRET", "description": "Shopify OAuth Client Secret (API Secret Key)", "required": true, "sensitive": true, "docsUrl": "https://shopify.dev/docs/apps/auth/oauth" }, { "name": "SHOPIFY_SHOP_DOMAIN", "description": "Your Shopify store domain (e.g., mystore.myshopify.com)", "required": true, "sensitive": false, "docsUrl": "https://shopify.dev/docs/apps/auth/oauth" }], "tools": [{ "id": "list_products", "name": "List Products", "description": "List products in your Shopify store", "requiresWrite": false }, { "id": "get_product", "name": "Get Product", "description": "Get details of a specific product", "requiresWrite": false }, { "id": "list_orders", "name": "List Orders", "description": "List orders from your Shopify store", "requiresWrite": false }, { "id": "get_order", "name": "Get Order", "description": "Get details of a specific order", "requiresWrite": false }, { "id": "list_customers", "name": "List Customers", "description": "List customers in your Shopify store", "requiresWrite": false }], "prompts": [{ "id": "list_products", "title": "Show my products", "prompt": "List all products in my Shopify store with their prices and inventory levels.", "category": "ecommerce", "icon": "shopping-bag" }, { "id": "recent_orders", "title": "Show recent orders", "prompt": "Show me the most recent orders from my Shopify store with customer details and order totals.", "category": "ecommerce", "icon": "receipt" }, { "id": "customer_list", "title": "Show my customers", "prompt": "List all customers in my Shopify store with their contact information and order history.", "category": "ecommerce", "icon": "users" }], "suggestedWith": ["stripe", "analytics"] },
|
|
30
|
-
{ "name": "slack", "displayName": "Slack", "icon": "slack.svg", "description": "Send messages, read channels, and manage Slack workspace", "auth": { "type": "oauth2", "provider": "slack", "authorizationUrl": "https://slack.com/oauth/v2/authorize", "tokenUrl": "https://slack.com/api/oauth.v2.access", "scopes": ["channels:history", "channels:read", "chat:write", "groups:history", "groups:read", "im:history", "im:read", "mpim:history", "mpim:read", "users:read"] }, "envVars": [{ "name": "SLACK_CLIENT_ID", "description": "Slack App Client ID", "required": true, "sensitive": false, "docsUrl": "https://api.slack.com/apps" }, { "name": "SLACK_CLIENT_SECRET", "description": "Slack App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://api.slack.com/apps" }], "tools": [{ "id": "list_channels", "name": "List Channels", "description": "Get list of Slack channels", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://slack.com/api/conversations.list", "body": { "limit": { "type": "number", "description": "Max channels (1-1000)", "default": 100 }, "exclude_archived": { "type": "boolean", "description": "Exclude archived channels", "default": true }, "types": { "type": "string", "description": "Channel types: public_channel, private_channel, mpim, im", "default": "public_channel" } }, "response": { "transform": "channels" } } }, { "id": "send_message", "name": "Send Message", "description": "Send a message to a Slack channel", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://slack.com/api/chat.postMessage", "body": { "channel": { "type": "string", "description": "Channel ID to send to", "required": true }, "text": { "type": "string", "description": "Message text (supports mrkdwn)", "required": true }, "thread_ts": { "type": "string", "description": "Thread timestamp to reply to" }, "unfurl_links": { "type": "boolean", "description": "Unfurl URLs" } } } }, { "id": "get_messages", "name": "Get Messages", "description": "Get recent messages from a channel", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://slack.com/api/conversations.history", "body": { "channel": { "type": "string", "description": "Channel ID", "required": true }, "limit": { "type": "number", "description": "Max messages (1-1000)", "default": 20 }, "oldest": { "type": "string", "description": "Only messages after this timestamp" } }, "response": { "transform": "messages" } } }, { "id": "get_thread", "name": "Get Thread", "description": "Get all replies in a Slack message thread", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://slack.com/api/conversations.replies", "body": { "channel": { "type": "string", "description": "Channel ID containing the thread", "required": true }, "ts": { "type": "string", "description": "Timestamp (ts) of the parent message", "required": true }, "limit": { "type": "number", "description": "Max replies (1-1000)", "default": 20 } }, "response": { "transform": "messages" } } }, { "id": "list_users", "name": "List Users", "description": "List members of the Slack workspace", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://slack.com/api/users.list", "body": { "limit": { "type": "number", "description": "Max users (1-1000)", "default": 100 } }, "response": { "transform": "members" } } }], "prompts": [{ "id": "catch_up_slack", "title": "Catch up on Slack", "prompt": "Summarize the important messages from my Slack channels from today. Highlight any mentions or urgent items.", "category": "productivity", "icon": "slack" }, { "id": "post_update", "title": "Post team update", "prompt": "Help me write and post a team update to Slack about my current work progress.", "category": "productivity", "icon": "message" }], "suggestedWith": ["gmail", "calendar", "jira"] },
|
|
30
|
+
{ "name": "slack", "displayName": "Slack", "icon": "slack.svg", "description": "Send messages, read channels, and manage Slack workspace", "auth": { "type": "oauth2", "provider": "slack", "authorizationUrl": "https://slack.com/oauth/v2/authorize", "tokenUrl": "https://slack.com/api/oauth.v2.access", "scopes": ["channels:history", "channels:read", "chat:write", "groups:history", "groups:read", "im:history", "im:read", "mpim:history", "mpim:read", "users:read"] }, "envVars": [{ "name": "SLACK_CLIENT_ID", "description": "Slack App Client ID", "required": true, "sensitive": false, "docsUrl": "https://api.slack.com/apps" }, { "name": "SLACK_CLIENT_SECRET", "description": "Slack App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://api.slack.com/apps" }], "tools": [{ "id": "list_channels", "name": "List Channels", "description": "Get list of Slack channels", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://slack.com/api/conversations.list", "body": { "limit": { "type": "number", "description": "Max channels (1-1000)", "default": 100 }, "exclude_archived": { "type": "boolean", "description": "Exclude archived channels", "default": true }, "types": { "type": "string", "description": "Channel types: public_channel, private_channel, mpim, im", "default": "public_channel" } }, "response": { "transform": "channels", "historicalSummary": { "collectionKeys": ["channels", "data"], "collectionName": "channels", "itemFields": [{ "name": "id" }, { "name": "name" }, { "name": "is_channel" }, { "name": "is_group" }, { "name": "is_im" }, { "name": "is_private" }, { "name": "is_archived" }, { "name": "num_members" }], "outputFields": [{ "name": "response_metadata", "kind": "object" }], "omitted": "channel topics, purposes, and provider-specific payload fields" } } } }, { "id": "send_message", "name": "Send Message", "description": "Send a message to a Slack channel", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://slack.com/api/chat.postMessage", "body": { "channel": { "type": "string", "description": "Channel ID to send to", "required": true }, "text": { "type": "string", "description": "Message text (supports mrkdwn)", "required": true }, "thread_ts": { "type": "string", "description": "Thread timestamp to reply to" }, "unfurl_links": { "type": "boolean", "description": "Unfurl URLs" } } } }, { "id": "get_messages", "name": "Get Messages", "description": "Get recent messages from a channel", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://slack.com/api/conversations.history", "body": { "channel": { "type": "string", "description": "Channel ID", "required": true }, "limit": { "type": "number", "description": "Max messages (1-1000)", "default": 20 }, "oldest": { "type": "string", "description": "Only messages after this timestamp" } }, "response": { "transform": "messages" } } }, { "id": "get_thread", "name": "Get Thread", "description": "Get all replies in a Slack message thread", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://slack.com/api/conversations.replies", "body": { "channel": { "type": "string", "description": "Channel ID containing the thread", "required": true }, "ts": { "type": "string", "description": "Timestamp (ts) of the parent message", "required": true }, "limit": { "type": "number", "description": "Max replies (1-1000)", "default": 20 } }, "response": { "transform": "messages" } } }, { "id": "list_users", "name": "List Users", "description": "List members of the Slack workspace", "requiresWrite": false, "endpoint": { "method": "POST", "url": "https://slack.com/api/users.list", "body": { "limit": { "type": "number", "description": "Max users (1-1000)", "default": 100 } }, "response": { "transform": "members", "historicalSummary": { "collectionKeys": ["members", "users", "data"], "collectionName": "users", "itemFields": [{ "name": "id" }, { "name": "name" }, { "name": "real_name" }, { "name": "team_id" }, { "name": "is_bot" }, { "name": "deleted" }], "outputFields": [{ "name": "response_metadata", "kind": "object" }], "omitted": "user profiles, avatars, and provider-specific payload fields" } } } }], "prompts": [{ "id": "catch_up_slack", "title": "Catch up on Slack", "prompt": "Summarize the important messages from my Slack channels from today. Highlight any mentions or urgent items.", "category": "productivity", "icon": "slack" }, { "id": "post_update", "title": "Post team update", "prompt": "Help me write and post a team update to Slack about my current work progress.", "category": "productivity", "icon": "message" }], "suggestedWith": ["gmail", "calendar", "jira"] },
|
|
31
31
|
{ "name": "snowflake", "displayName": "Snowflake", "icon": "snowflake.svg", "description": "Query and manage your Snowflake data warehouse with SQL operations across databases, schemas, and tables", "auth": { "type": "api-key", "requiredApis": [{ "name": "Snowflake Account", "enableUrl": "https://app.snowflake.com/" }] }, "envVars": [{ "name": "SNOWFLAKE_ACCOUNT", "description": "Your Snowflake account identifier (e.g., xy12345.us-east-1)", "required": true, "sensitive": false, "docsUrl": "https://docs.snowflake.com/en/user-guide/admin-account-identifier" }, { "name": "SNOWFLAKE_USERNAME", "description": "Snowflake username for authentication", "required": true, "sensitive": false, "docsUrl": "https://docs.snowflake.com/en/user-guide/admin-user-management" }, { "name": "SNOWFLAKE_PASSWORD", "description": "Snowflake password for authentication", "required": true, "sensitive": true, "docsUrl": "https://docs.snowflake.com/en/user-guide/admin-user-management" }, { "name": "SNOWFLAKE_WAREHOUSE", "description": "Default warehouse to use for queries (e.g., COMPUTE_WH)", "required": true, "sensitive": false, "docsUrl": "https://docs.snowflake.com/en/user-guide/warehouses" }, { "name": "SNOWFLAKE_DATABASE", "description": "Default database to use for queries", "required": false, "sensitive": false, "docsUrl": "https://docs.snowflake.com/en/user-guide/databases" }, { "name": "SNOWFLAKE_SCHEMA", "description": "Default schema to use for queries (defaults to PUBLIC)", "required": false, "sensitive": false, "docsUrl": "https://docs.snowflake.com/en/user-guide/schemas" }], "tools": [{ "id": "run_query", "name": "Run Query", "description": "Execute a SQL query against your Snowflake data warehouse", "requiresWrite": false }, { "id": "list_databases", "name": "List Databases", "description": "List all databases in your Snowflake account", "requiresWrite": false }, { "id": "list_schemas", "name": "List Schemas", "description": "List all schemas in a Snowflake database", "requiresWrite": false }, { "id": "list_tables", "name": "List Tables", "description": "List all tables in a Snowflake database schema", "requiresWrite": false }, { "id": "describe_table", "name": "Describe Table", "description": "Get detailed column information for a specific table", "requiresWrite": false }], "prompts": [{ "id": "query_data", "title": "Query my data warehouse", "prompt": "Help me query data from my Snowflake data warehouse. Show me specific records or analyze patterns.", "category": "data", "icon": "search" }, { "id": "analyze_tables", "title": "Analyze table structure", "prompt": "Show me the structure of tables in my Snowflake database and help me understand the schema.", "category": "data", "icon": "database" }, { "id": "data_insights", "title": "Generate insights", "prompt": "Analyze my Snowflake data and generate insights about trends, patterns, and anomalies.", "category": "analytics", "icon": "chart" }, { "id": "optimize_queries", "title": "Optimize queries", "prompt": "Help me optimize my SQL queries for better performance in Snowflake.", "category": "analytics", "icon": "lightning" }], "suggestedWith": ["github", "slack", "notion"] },
|
|
32
32
|
{ "name": "stripe", "displayName": "Stripe", "icon": "stripe.svg", "description": "Access Stripe payment data, customers, subscriptions, and balance information", "auth": { "type": "api-key", "requiredApis": [{ "name": "Stripe API", "enableUrl": "https://dashboard.stripe.com/apikeys" }], "keyName": "STRIPE_SECRET_KEY", "headerName": "Authorization", "headerPrefix": "Bearer" }, "envVars": [{ "name": "STRIPE_SECRET_KEY", "description": "Stripe Secret Key (starts with sk_)", "required": true, "sensitive": true, "docsUrl": "https://dashboard.stripe.com/apikeys" }, { "name": "STRIPE_WEBHOOK_SECRET", "description": "Stripe Webhook Secret (optional, for webhook verification)", "required": false, "sensitive": true, "docsUrl": "https://dashboard.stripe.com/webhooks" }], "tools": [{ "id": "list_customers", "name": "List Customers", "description": "List Stripe customers with optional filtering", "requiresWrite": false }, { "id": "get_customer", "name": "Get Customer", "description": "Retrieve detailed information about a specific customer", "requiresWrite": false }, { "id": "list_payments", "name": "List Payments", "description": "List payment intents with optional status filtering", "requiresWrite": false }, { "id": "get_balance", "name": "Get Balance", "description": "Retrieve the current account balance", "requiresWrite": false }, { "id": "list_subscriptions", "name": "List Subscriptions", "description": "List subscriptions with optional status filtering", "requiresWrite": false }], "prompts": [{ "id": "check_balance", "title": "Check account balance", "prompt": "Check my Stripe account balance and provide a summary of available and pending funds.", "category": "finance", "icon": "currency" }, { "id": "recent_payments", "title": "Recent payments", "prompt": "Show me the most recent successful payments in my Stripe account.", "category": "finance", "icon": "payment" }, { "id": "customer_overview", "title": "Customer overview", "prompt": "Give me an overview of my Stripe customers including total count and recent additions.", "category": "analytics", "icon": "users" }, { "id": "subscription_status", "title": "Subscription status", "prompt": "Show me the status of all active subscriptions and any that are expiring soon.", "category": "analytics", "icon": "repeat" }], "suggestedWith": ["slack", "email", "analytics"] },
|
|
33
33
|
{ "name": "supabase", "displayName": "Supabase", "icon": "supabase.svg", "description": "Query and manage your Supabase database with full CRUD operations", "auth": { "type": "api-key", "requiredApis": [{ "name": "Supabase Project", "enableUrl": "https://supabase.com/dashboard/projects" }] }, "envVars": [{ "name": "SUPABASE_URL", "description": "Your Supabase project URL (e.g., https://xxxxx.supabase.co)", "required": true, "sensitive": false, "docsUrl": "https://supabase.com/docs/guides/api#api-url-and-keys" }, { "name": "SUPABASE_ANON_KEY", "description": "Supabase anonymous/public API key for client-side operations", "required": true, "sensitive": true, "docsUrl": "https://supabase.com/docs/guides/api#api-url-and-keys" }, { "name": "SUPABASE_SERVICE_KEY", "description": "Supabase service role key for server-side operations (bypasses RLS)", "required": true, "sensitive": true, "docsUrl": "https://supabase.com/docs/guides/api#api-url-and-keys" }], "tools": [{ "id": "list_tables", "name": "List Tables", "description": "List all tables in your Supabase database", "requiresWrite": false }, { "id": "query_table", "name": "Query Table", "description": "Select rows from a table with optional filters and sorting", "requiresWrite": false }, { "id": "insert_row", "name": "Insert Row", "description": "Insert a new row into a table", "requiresWrite": true }, { "id": "update_row", "name": "Update Row", "description": "Update an existing row in a table", "requiresWrite": true }, { "id": "delete_row", "name": "Delete Row", "description": "Delete a row from a table", "requiresWrite": true }], "prompts": [{ "id": "query_data", "title": "Query my database", "prompt": "Help me query data from my Supabase database. Show me specific records or analyze patterns.", "category": "data", "icon": "search" }, { "id": "create_record", "title": "Create a record", "prompt": "Create a new record in my Supabase database with the information I provide.", "category": "data", "icon": "plus" }, { "id": "update_records", "title": "Update records", "prompt": "Find and update records in my Supabase database based on specific criteria.", "category": "data", "icon": "edit" }, { "id": "database_stats", "title": "Database statistics", "prompt": "Show me statistics and insights about my Supabase database tables and data.", "category": "analytics", "icon": "chart" }], "suggestedWith": ["github", "slack", "linear"] },
|