veryfront 0.1.619 → 0.1.620

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.619",
3
+ "version": "0.1.620",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/ag-ui/handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EACL,KAAK,eAAe,EACpB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,WAAW,EAChB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AA4Q3B,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvF,cAAc,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,+DAA+D;AAC/D,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,KAAK,EAAE,KAAK,CAAC;CACd;AAUD,gCAAgC;AAChC,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChD,gCAAgC;AAChC,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,0BAA0B,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/ag-ui/handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EACL,KAAK,eAAe,EACpB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,WAAW,EAChB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAyQ3B,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvF,cAAc,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,+DAA+D;AAC/D,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,KAAK,EAAE,KAAK,CAAC;CACd;AAUD,gCAAgC;AAChC,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChD,gCAAgC;AAChC,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,0BAA0B,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC"}
@@ -196,9 +196,6 @@ async function createAgUiInjectedToolsStreamResponse(agent, request, rawRequest,
196
196
  onError: () => {
197
197
  sessionManager.failRun(runId);
198
198
  },
199
- onToolCallSeen: (toolCallId) => {
200
- sessionManager.prepareForSignal(runId, toolCallId);
201
- },
202
199
  });
203
200
  }
204
201
  function mergeConfig(config, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/ag-ui/runtime-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,kBAAkB,CAAC;AAkB9E,2CAA2C;AAC3C,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqRD,uDAAuD;AACvD,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;CACjD;AAED,6DAA6D;AAC7D,MAAM,MAAM,yBAAyB,GAAG,CACtC,KAAK,EAAE,8BAA8B,KAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAElC,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,2BAA2B,KAC/B,OAAO,CAAC,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;AAExE,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,MAAM,kCAAkC,GAAG,CAC/C,KAAK,EAAE,+BAA+B,KACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAElC,iDAAiD;AACjD,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvF,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,uBAAuB,CAAC,EAAE,kCAAkC,CAAC;IAC7D,cAAc,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1E;AAED,uEAAuE;AACvE,MAAM,WAAW,iCAAkC,SAAQ,yBAAyB;IAClF,KAAK,EAAE,KAAK,CAAC;CACd;AAED,mDAAmD;AACnD,MAAM,MAAM,wBAAwB,GAChC,iCAAiC,GACjC,CAAC,yBAAyB,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,yBAAyB,CAAA;CAAE,CAAC,CAAC;AAE5F,wCAAwC;AACxC,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,CAAC,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAmJ9C"}
1
+ {"version":3,"file":"runtime-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/ag-ui/runtime-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,kBAAkB,CAAC;AAkB9E,2CAA2C;AAC3C,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAoRD,uDAAuD;AACvD,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;CACjD;AAED,6DAA6D;AAC7D,MAAM,MAAM,yBAAyB,GAAG,CACtC,KAAK,EAAE,8BAA8B,KAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAElC,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,2BAA2B,KAC/B,OAAO,CAAC,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;AAExE,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,MAAM,kCAAkC,GAAG,CAC/C,KAAK,EAAE,+BAA+B,KACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAElC,iDAAiD;AACjD,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvF,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,uBAAuB,CAAC,EAAE,kCAAkC,CAAC;IAC7D,cAAc,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1E;AAED,uEAAuE;AACvE,MAAM,WAAW,iCAAkC,SAAQ,yBAAyB;IAClF,KAAK,EAAE,KAAK,CAAC;CACd;AAED,mDAAmD;AACnD,MAAM,MAAM,wBAAwB,GAChC,iCAAiC,GACjC,CAAC,yBAAyB,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,yBAAyB,CAAA;CAAE,CAAC,CAAC;AAE5F,wCAAwC;AACxC,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,CAAC,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAmJ9C"}
@@ -195,7 +195,6 @@ async function createAgUiRuntimeInjectedToolsStreamResponse(agent, request, base
195
195
  void lifecycle?.onError?.(error);
196
196
  },
197
197
  onToolCallSeen: (toolCallId) => {
198
- sessionManager.prepareForSignal(request.runId, toolCallId);
199
198
  void lifecycle?.onToolCallSeen?.(toolCallId);
200
199
  },
201
200
  });
@@ -1 +1 @@
1
- {"version":3,"file":"_data.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/_data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,UAAU,EAAE,iBAAiB,EAmCzC,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmCxC,CAAC"}
1
+ {"version":3,"file":"_data.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/_data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,UAAU,EAAE,iBAAiB,EAoCzC,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoCxC,CAAC"}
@@ -12,6 +12,7 @@ export const connectors = [
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
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", "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true } } } }, { "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true } }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true } }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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": { "Harvest-Account-Id": { "type": "string", "in": "header", "description": "Harvest Account ID (get it from list_accounts)", "required": true }, "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"] },
15
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"] },
16
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"] },
17
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"] },
@@ -48,6 +49,7 @@ export const icons = {
48
49
  "github": "<svg width=\"128\" height=\"128\" viewBox=\"0 0 128 128\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g clip-path=\"url(#clip0_0_48)\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M63.8093 1.30612C28.5244 1.30612 0 30.0408 0 65.5895C0 94.0055 18.2766 118.059 43.631 126.572C46.801 127.212 47.9621 125.189 47.9621 123.487C47.9621 121.997 47.8576 116.889 47.8576 111.566C30.1074 115.399 26.4111 103.903 26.4111 103.903C23.5585 96.4532 19.3319 94.5384 19.3319 94.5384C13.5223 90.6005 19.7551 90.6005 19.7551 90.6005C26.1995 91.0263 29.5811 97.199 29.5811 97.199C35.2849 106.99 44.4761 104.223 48.1737 102.52C48.7014 98.3693 50.3928 95.4958 52.1887 93.8997C38.0317 92.4095 23.1367 86.8754 23.1367 62.1832C23.1367 55.1589 25.6705 49.4119 29.6856 44.9424C29.0521 43.3463 26.833 36.7464 30.3203 27.9131C30.3203 27.9131 35.7081 26.21 47.8563 34.5117C53.0574 33.1045 58.4212 32.3887 63.8093 32.3827C69.1971 32.3827 74.6893 33.1285 79.761 34.5117C91.9105 26.21 97.2983 27.9131 97.2983 27.9131C100.786 36.7464 98.5652 43.3463 97.9318 44.9424C102.053 49.4119 104.482 55.1589 104.482 62.1832C104.482 86.8754 89.5869 92.3024 75.3241 93.8997C77.649 95.9216 79.6552 99.7525 79.6552 105.819C79.6552 114.44 79.5507 121.358 79.5507 123.486C79.5507 125.189 80.7132 127.212 83.8818 126.574C109.236 118.058 127.513 94.0055 127.513 65.5895C127.617 30.0408 98.9884 1.30612 63.8093 1.30612Z\" fill=\"#24292F\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_0_48\">\n<rect width=\"128\" height=\"125.388\" fill=\"white\" transform=\"translate(0 1.30612)\"/>\n</clipPath>\n</defs>\n</svg>\n",
49
50
  "gitlab": "<svg width=\"128\" height=\"128\" viewBox=\"0 0 128 128\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g clip-path=\"url(#clip0_240_6238)\">\n<g clip-path=\"url(#clip1_240_6238)\">\n<path d=\"M125.848 51.1162L125.668 50.6562L108.268 5.25622C107.915 4.3644 107.289 3.60698 106.48 3.09222C105.665 2.57734 104.711 2.32811 103.749 2.37899C102.786 2.42986 101.864 2.77832 101.108 3.37622C100.36 3.97622 99.82 4.80022 99.564 5.72422L87.804 41.7282H40.204L28.44 5.72822C28.1887 4.79778 27.6485 3.97111 26.8973 3.36729C26.1462 2.76346 25.2227 2.41365 24.26 2.36822C23.3004 2.3176 22.3491 2.56794 21.5387 3.08427C20.7283 3.6006 20.0995 4.35714 19.74 5.24822L2.31598 50.7202L2.13598 51.1722C-0.364414 57.7204 -0.671054 64.9035 1.26218 71.6409C3.19542 78.3784 7.264 84.306 12.856 88.5322L12.92 88.5802L13.072 88.7002L39.612 108.568L52.732 118.504L60.708 124.544C61.6452 125.252 62.7876 125.635 63.962 125.635C65.1364 125.635 66.2788 125.252 67.216 124.544L75.192 118.504L88.32 108.568L115.012 88.5802L115.084 88.5282C120.694 84.3053 124.778 78.3718 126.719 71.6235C128.66 64.8752 128.353 57.6786 125.844 51.1202L125.848 51.1162Z\" fill=\"#E24329\"/>\n<path d=\"M125.848 51.1158L125.668 50.6558C117.181 52.4047 109.183 56.002 102.244 61.1918L64.032 90.1518C72.1526 96.2905 80.2752 102.427 88.4 108.56L115.092 88.5718L115.168 88.5198C120.763 84.2854 124.831 78.3471 126.757 71.5998C128.683 64.8525 128.364 57.662 125.848 51.1118V51.1158Z\" fill=\"#FC6D26\"/>\n<path d=\"M39.632 108.56L52.732 118.5L60.708 124.54C61.6452 125.248 62.7876 125.63 63.962 125.63C65.1364 125.63 66.2788 125.248 67.216 124.54L75.192 118.5L88.32 108.564C88.32 108.564 76.98 100.004 63.952 90.1519L39.632 108.564V108.56Z\" fill=\"#FCA326\"/>\n<path d=\"M25.74 61.22C18.8038 56.0281 10.8068 52.4318 2.32001 50.688L2.14001 51.14C-0.367146 57.6918 -0.677348 64.8809 1.25614 71.6242C3.18962 78.3676 7.26208 84.3001 12.86 88.528L12.924 88.576L13.076 88.696L39.616 108.564L64.036 90.152L25.74 61.22Z\" fill=\"#FC6D26\"/>\n</g>\n</g>\n<defs>\n<clipPath id=\"clip0_240_6238\">\n<rect width=\"128\" height=\"128\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip1_240_6238\">\n<rect width=\"128\" height=\"128\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n",
50
51
  "gmail": "<svg width=\"128\" height=\"128\" viewBox=\"0 0 128 128\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g clip-path=\"url(#clip0_0_12)\">\n<path d=\"M8.7275 113.854H29.091V64.4L0 42.5817V105.127C0 109.949 3.9055 113.855 8.7275 113.855V113.854Z\" fill=\"#4285F4\"/>\n<path d=\"M98.909 113.854H119.273C124.095 113.854 128 109.949 128 105.127V42.5817L98.909 64.4V113.854Z\" fill=\"#34A853\"/>\n<path d=\"M98.909 26.5817V64.4L128 42.5817V30.9455C128 20.16 115.687 14 107.054 20.4727L98.909 26.5817Z\" fill=\"#FBBC04\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M29.091 64.4V26.5817L64 52.7638L98.909 26.5817V64.4L64 90.5817L29.091 64.4Z\" fill=\"#EA4335\"/>\n<path d=\"M0 30.9455V42.5817L29.091 64.4V26.5817L20.9455 20.4727C12.3125 14 0 20.16 0 30.945V30.9455Z\" fill=\"#C5221F\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_0_12\">\n<rect width=\"128\" height=\"99.855\" fill=\"white\" transform=\"translate(0 14)\"/>\n</clipPath>\n</defs>\n</svg>\n",
52
+ "harvest": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" r=\"50\" fill=\"#FA5B35\"/>\n <path d=\"M24 28h10v18h24V28h10v44H58V54H34v18H24V28z\" fill=\"#fff\"/>\n</svg>\n",
51
53
  "jira": "<svg width=\"128\" height=\"128\" viewBox=\"0 0 128 128\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g clip-path=\"url(#clip0_0_328)\">\n<path d=\"M44.5144 60.3244C43.0588 58.7232 40.8756 58.8688 39.8565 60.7612L16.275 107.924C15.4016 109.816 16.7117 112 18.7496 112H51.5016C52.5208 112 53.5396 111.418 53.9764 110.399C61.1088 95.8424 56.8876 73.5708 44.5144 60.3244Z\" fill=\"url(#paint0_linear_0_328)\"/>\n<path d=\"M61.6932 17.5284C48.5924 38.3442 49.466 61.4892 58.054 78.8112C66.788 96.1336 73.3384 109.525 73.9208 110.399C74.3576 111.418 75.3764 112 76.3952 112H109.148C111.185 112 112.641 109.816 111.622 107.924C111.622 107.924 67.516 19.7119 66.3512 17.5284C65.478 15.4905 63.0032 15.4905 61.6932 17.5284Z\" fill=\"#2684FF\"/>\n</g>\n<defs>\n<linearGradient id=\"paint0_linear_0_328\" x1=\"57.3824\" y1=\"67.62\" x2=\"32.53\" y2=\"110.666\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#0052CC\"/>\n<stop offset=\"0.9228\" stop-color=\"#2684FF\"/>\n</linearGradient>\n<clipPath id=\"clip0_0_328\">\n<rect width=\"128\" height=\"128\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n",
52
54
  "linear": "<svg width=\"128\" height=\"128\" viewBox=\"0 0 128 128\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g clip-path=\"url(#clip0_0_298)\">\n<g clip-path=\"url(#clip1_0_298)\">\n<path d=\"M1.56852 78.7492C1.28372 77.5351 2.7301 76.7704 3.61189 77.6522L50.3478 124.388C51.2296 125.27 50.4649 126.716 49.2508 126.431C25.6659 120.899 7.10117 102.334 1.56852 78.7492ZM0.00242092 60.018C-0.0201631 60.3806 0.116177 60.7347 0.373073 60.9916L67.0084 127.627C67.2653 127.884 67.6193 128.02 67.9819 127.998C71.0145 127.809 73.99 127.409 76.8938 126.812C77.8724 126.611 78.2123 125.409 77.5059 124.703L3.29722 50.4941C2.59084 49.7876 1.38852 50.1276 1.18755 51.1062C0.591182 54.01 0.191304 56.9854 0.00242092 60.018ZM5.38999 38.0229C5.17688 38.5014 5.28543 39.0605 5.65578 39.4309L88.5691 122.344C88.9395 122.715 89.4986 122.823 89.9771 122.61C92.2633 121.592 94.479 120.443 96.6145 119.174C97.3212 118.755 97.4303 117.784 96.849 117.202L10.7976 31.151C10.2164 30.5697 9.24538 30.6788 8.8255 31.3855C7.55661 33.521 6.40831 35.7367 5.38999 38.0229ZM16.2031 23.1347C15.7294 22.661 15.7001 21.9012 16.1464 21.4015C27.8778 8.26791 44.9426 0 63.9384 0C99.3187 0 128 28.6813 128 64.0615C128 83.0574 119.732 100.122 106.599 111.854C106.099 112.3 105.339 112.271 104.865 111.797L16.2031 23.1347Z\" fill=\"#222326\"/>\n</g>\n</g>\n<defs>\n<clipPath id=\"clip0_0_298\">\n<rect width=\"128\" height=\"128\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip1_0_298\">\n<rect width=\"128\" height=\"128\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n",
53
55
  "mixpanel": "<svg width=\"128\" height=\"128\" viewBox=\"0 0 128 128\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g clip-path=\"url(#clip0_0_993)\">\n<path d=\"M37.1571 53.3247H53.4279C49.3537 50.772 47.8324 47.2135 45.7953 40.6124L39.6841 17.9726C36.8993 7.78728 34.6044 2.93958 23.4134 2.93958H0.0257857V9.05078H3.35214C10.2111 9.05078 10.9847 11.6036 13.0218 19.2361L18.3594 39.0911C21.1442 48.7349 25.4762 53.3247 37.1571 53.3247ZM74.8042 53.3247H91.0749C102.782 53.3247 106.83 48.7349 109.641 39.0911L114.978 19.2361C117.015 11.6036 118.021 9.05078 124.648 9.05078H127.974V2.93958H104.819C93.3699 2.93958 91.075 7.52942 88.5222 17.9468L82.411 40.5866C80.4255 47.4456 78.8783 50.772 74.8042 53.3247ZM53.4279 74.6753H74.8042V53.299H53.4279V74.6753ZM0.0257857 125.06H23.4134C34.6044 125.06 36.8993 120.213 39.6841 110.053L45.7953 87.4134C47.8324 80.8123 49.3537 77.2281 53.4279 74.7011H37.1571C25.4504 74.7011 21.1185 79.2909 18.3336 88.9347L12.996 108.79C10.9331 116.396 10.1853 118.949 3.32635 118.949H0L0.0257857 125.06ZM104.819 125.06H127.974V118.949H124.648C118.047 118.949 117.015 116.396 114.978 108.764L109.641 88.909C106.856 79.2393 102.782 74.6753 91.0749 74.6753H74.83C78.9041 77.2281 80.3739 80.5286 82.411 87.3876L88.5222 110.027C91.0492 120.471 93.3441 125.06 104.819 125.06Z\" fill=\"#1B0B3B\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_0_993\">\n<rect width=\"128\" height=\"122.121\" fill=\"white\" transform=\"translate(0 2.93958)\"/>\n</clipPath>\n</defs>\n</svg>\n",
@@ -1,6 +1,6 @@
1
1
  export declare const EXPERIMENTAL_INTEGRATIONS_ENV = "VERYFRONT_EXPERIMENTAL_INTEGRATIONS";
2
- export declare const SUPPORTED_INTEGRATION_NAMES: readonly ["airtable", "asana", "calendar", "confluence", "docs-google", "drive", "figma", "github", "gitlab", "gmail", "jira", "linear", "notion", "onedrive", "outlook", "sentry", "sharepoint", "sheets", "slack", "teams"];
3
- export declare const DECLARED_INTEGRATION_NAMES: readonly ["gmail", "slack", "github", "calendar", "jira", "notion", "servicenow", "confluence", "linear", "gitlab", "outlook", "teams", "figma", "sheets", "airtable", "supabase", "neon", "sharepoint", "stripe", "salesforce", "twitter", "onedrive", "bitbucket", "sentry", "posthog", "zendesk", "asana", "monday", "zoom", "trello", "box", "shopify", "clickup", "intercom", "pipedrive", "mailchimp", "webex", "freshdesk", "quickbooks", "xero", "drive", "docs-google", "snowflake", "mixpanel", "twilio", "anthropic", "aws", "hubspot"];
2
+ export declare const SUPPORTED_INTEGRATION_NAMES: readonly ["airtable", "asana", "calendar", "confluence", "docs-google", "drive", "figma", "github", "gitlab", "gmail", "harvest", "jira", "linear", "notion", "onedrive", "outlook", "sentry", "sharepoint", "sheets", "slack", "teams"];
3
+ export declare const DECLARED_INTEGRATION_NAMES: readonly ["gmail", "slack", "github", "calendar", "jira", "notion", "servicenow", "confluence", "linear", "gitlab", "outlook", "teams", "figma", "sheets", "airtable", "supabase", "neon", "sharepoint", "stripe", "salesforce", "twitter", "onedrive", "bitbucket", "sentry", "posthog", "zendesk", "asana", "harvest", "monday", "zoom", "trello", "box", "shopify", "clickup", "intercom", "pipedrive", "mailchimp", "webex", "freshdesk", "quickbooks", "xero", "drive", "docs-google", "snowflake", "mixpanel", "twilio", "anthropic", "aws", "hubspot"];
4
4
  export declare function isDeclaredIntegration(name: string | null | undefined): boolean;
5
5
  export declare function isSupportedIntegration(name: string | null | undefined): boolean;
6
6
  export declare function isExperimentalIntegrationEnabled(name: string | null | undefined): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/feature-flags.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,6BAA6B,wCAAwC,CAAC;AAEnF,eAAO,MAAM,2BAA2B,+NAqB9B,CAAC;AAEX,eAAO,MAAM,0BAA0B,ohBAiD7B,CAAC;AAqBX,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE9E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE/E;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAezF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAChF,YAAY,EAAE,SAAS,CAAC,EAAE,GACzB,CAAC,EAAE,CAIL"}
1
+ {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/feature-flags.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,6BAA6B,wCAAwC,CAAC;AAEnF,eAAO,MAAM,2BAA2B,0OAsB9B,CAAC;AAEX,eAAO,MAAM,0BAA0B,+hBAkD7B,CAAC;AAqBX,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE9E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE/E;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAezF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAChF,YAAY,EAAE,SAAS,CAAC,EAAE,GACzB,CAAC,EAAE,CAIL"}
@@ -11,6 +11,7 @@ export const SUPPORTED_INTEGRATION_NAMES = [
11
11
  "github",
12
12
  "gitlab",
13
13
  "gmail",
14
+ "harvest",
14
15
  "jira",
15
16
  "linear",
16
17
  "notion",
@@ -50,6 +51,7 @@ export const DECLARED_INTEGRATION_NAMES = [
50
51
  "posthog",
51
52
  "zendesk",
52
53
  "asana",
54
+ "harvest",
53
55
  "monday",
54
56
  "zoom",
55
57
  "trello",
@@ -1,7 +1,7 @@
1
1
  import type { InferSchema } from "../extensions/schema/index.js";
2
- export declare const getIntegrationNameSchema: () => import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "gmail" | "slack" | "calendar" | "jira" | "notion" | "servicenow" | "confluence" | "gitlab" | "outlook" | "teams" | "figma" | "sheets" | "airtable" | "supabase" | "neon" | "sharepoint" | "stripe" | "salesforce" | "onedrive" | "bitbucket" | "sentry" | "posthog" | "zendesk" | "asana" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "drive" | "docs-google" | "snowflake" | "mixpanel" | "twilio" | "aws">;
2
+ export declare const getIntegrationNameSchema: () => import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "gmail" | "slack" | "calendar" | "jira" | "notion" | "servicenow" | "confluence" | "gitlab" | "outlook" | "teams" | "figma" | "sheets" | "airtable" | "supabase" | "neon" | "sharepoint" | "stripe" | "salesforce" | "onedrive" | "bitbucket" | "sentry" | "posthog" | "zendesk" | "asana" | "harvest" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "drive" | "docs-google" | "snowflake" | "mixpanel" | "twilio" | "aws">;
3
3
  /** Zod schema for integration name. */
4
- export declare const IntegrationNameSchema: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "gmail" | "slack" | "calendar" | "jira" | "notion" | "servicenow" | "confluence" | "gitlab" | "outlook" | "teams" | "figma" | "sheets" | "airtable" | "supabase" | "neon" | "sharepoint" | "stripe" | "salesforce" | "onedrive" | "bitbucket" | "sentry" | "posthog" | "zendesk" | "asana" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "drive" | "docs-google" | "snowflake" | "mixpanel" | "twilio" | "aws">;
4
+ export declare const IntegrationNameSchema: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "gmail" | "slack" | "calendar" | "jira" | "notion" | "servicenow" | "confluence" | "gitlab" | "outlook" | "teams" | "figma" | "sheets" | "airtable" | "supabase" | "neon" | "sharepoint" | "stripe" | "salesforce" | "onedrive" | "bitbucket" | "sentry" | "posthog" | "zendesk" | "asana" | "harvest" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "drive" | "docs-google" | "snowflake" | "mixpanel" | "twilio" | "aws">;
5
5
  export declare const getEnvVarSchema: () => import("../internal-agents/schema.js").Schema<import("../extensions/schema/schema-validator.js").InferShape<{
6
6
  name: import("../internal-agents/schema.js").Schema<string>;
7
7
  description: import("../internal-agents/schema.js").Schema<string>;
@@ -406,7 +406,7 @@ export declare const IntegrationPromptSchema: import("../internal-agents/schema.
406
406
  icon: import("../internal-agents/schema.js").Schema<string | undefined>;
407
407
  }>>;
408
408
  export declare const getIntegrationConfigSchema: () => import("../internal-agents/schema.js").Schema<import("../extensions/schema/schema-validator.js").InferShape<{
409
- name: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "gmail" | "slack" | "calendar" | "jira" | "notion" | "servicenow" | "confluence" | "gitlab" | "outlook" | "teams" | "figma" | "sheets" | "airtable" | "supabase" | "neon" | "sharepoint" | "stripe" | "salesforce" | "onedrive" | "bitbucket" | "sentry" | "posthog" | "zendesk" | "asana" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "drive" | "docs-google" | "snowflake" | "mixpanel" | "twilio" | "aws">;
409
+ name: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "gmail" | "slack" | "calendar" | "jira" | "notion" | "servicenow" | "confluence" | "gitlab" | "outlook" | "teams" | "figma" | "sheets" | "airtable" | "supabase" | "neon" | "sharepoint" | "stripe" | "salesforce" | "onedrive" | "bitbucket" | "sentry" | "posthog" | "zendesk" | "asana" | "harvest" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "drive" | "docs-google" | "snowflake" | "mixpanel" | "twilio" | "aws">;
410
410
  displayName: import("../internal-agents/schema.js").Schema<string>;
411
411
  icon: import("../internal-agents/schema.js").Schema<string | undefined>;
412
412
  description: import("../internal-agents/schema.js").Schema<string>;
@@ -528,7 +528,7 @@ export declare const getIntegrationConfigSchema: () => import("../internal-agent
528
528
  }>>;
529
529
  /** Zod schema for integration config. */
530
530
  export declare const IntegrationConfigSchema: import("../internal-agents/schema.js").Schema<import("../extensions/schema/schema-validator.js").InferShape<{
531
- name: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "gmail" | "slack" | "calendar" | "jira" | "notion" | "servicenow" | "confluence" | "gitlab" | "outlook" | "teams" | "figma" | "sheets" | "airtable" | "supabase" | "neon" | "sharepoint" | "stripe" | "salesforce" | "onedrive" | "bitbucket" | "sentry" | "posthog" | "zendesk" | "asana" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "drive" | "docs-google" | "snowflake" | "mixpanel" | "twilio" | "aws">;
531
+ name: import("../internal-agents/schema.js").Schema<"github" | "twitter" | "anthropic" | "zoom" | "linear" | "gmail" | "slack" | "calendar" | "jira" | "notion" | "servicenow" | "confluence" | "gitlab" | "outlook" | "teams" | "figma" | "sheets" | "airtable" | "supabase" | "neon" | "sharepoint" | "stripe" | "salesforce" | "onedrive" | "bitbucket" | "sentry" | "posthog" | "zendesk" | "asana" | "harvest" | "monday" | "trello" | "box" | "shopify" | "clickup" | "intercom" | "pipedrive" | "mailchimp" | "webex" | "freshdesk" | "quickbooks" | "xero" | "drive" | "docs-google" | "snowflake" | "mixpanel" | "twilio" | "aws">;
532
532
  displayName: import("../internal-agents/schema.js").Schema<string>;
533
533
  icon: import("../internal-agents/schema.js").Schema<string | undefined>;
534
534
  description: import("../internal-agents/schema.js").Schema<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAoDjE,eAAO,MAAM,wBAAwB,imBAAgD,CAAC;AACtF,uCAAuC;AACvC,eAAO,MAAM,qBAAqB,2lBAAuC,CAAC;AAE1E,eAAO,MAAM,eAAe;;;;;;;;GAU3B,CAAC;AACF,8BAA8B;AAC9B,eAAO,MAAM,YAAY;;;;;;;;GAA8B,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;;;;GAS/B,CAAC;AACF,kCAAkC;AAClC,eAAO,MAAM,gBAAgB;;;;;;;GAAkC,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BhC,CAAC;AACF,mCAAmC;AACnC,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAmC,CAAC;AAElE,eAAO,MAAM,iCAAiC;;;;;;GAQ7C,CAAC;AACF,eAAO,MAAM,8BAA8B;;;;;;GAAgD,CAAC;AAE5F,eAAO,MAAM,qCAAqC;;;;;GAOjD,CAAC;AACF,eAAO,MAAM,kCAAkC;;;;;GAAoD,CAAC;AAEpG,eAAO,MAAM,8CAA8C;;;;;;GAQ1D,CAAC;AACF,eAAO,MAAM,2CAA2C;;;;;;GAEvD,CAAC;AAEF,eAAO,MAAM,kDAAkD;;;;GAM9D,CAAC;AACF,eAAO,MAAM,+CAA+C;;;;GAE3D,CAAC;AAEF,eAAO,MAAM,6CAA6C;;;;;;;;;;;;;;;GASzD,CAAC;AACF,eAAO,MAAM,0CAA0C;;;;;;;;;;;;;;;GAEtD,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAexC,CAAC;AACF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA2C,CAAC;AAElF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GASpC,CAAC;AACF,uCAAuC;AACvC,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAuC,CAAC;AAE1E,eAAO,MAAM,0BAA0B;;;;;;GAQtC,CAAC;AACF,yCAAyC;AACzC,eAAO,MAAM,uBAAuB;;;;;;GAAyC,CAAC;AAE9E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQnC;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAQN,CAAC;AACF,yCAAyC;AACzC,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAhBhC;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUsE,CAAC;AAE9E,gDAAgD;AAChD,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC;AACvF,qCAAqC;AACrC,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC;AAC3E,2CAA2C;AAC3C,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC;AAC7E,mCAAmC;AACnC,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AAC/E,qDAAqD;AACrD,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC;AAC3F,4FAA4F;AAC5F,MAAM,MAAM,oCAAoC,GAAG,WAAW,CAC5D,UAAU,CAAC,OAAO,6CAA6C,CAAC,CACjE,CAAC;AACF,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC;AAC3F,yCAAyC;AACzC,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAqDjE,eAAO,MAAM,wBAAwB,6mBAAgD,CAAC;AACtF,uCAAuC;AACvC,eAAO,MAAM,qBAAqB,umBAAuC,CAAC;AAE1E,eAAO,MAAM,eAAe;;;;;;;;GAU3B,CAAC;AACF,8BAA8B;AAC9B,eAAO,MAAM,YAAY;;;;;;;;GAA8B,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;;;;GAS/B,CAAC;AACF,kCAAkC;AAClC,eAAO,MAAM,gBAAgB;;;;;;;GAAkC,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BhC,CAAC;AACF,mCAAmC;AACnC,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAmC,CAAC;AAElE,eAAO,MAAM,iCAAiC;;;;;;GAQ7C,CAAC;AACF,eAAO,MAAM,8BAA8B;;;;;;GAAgD,CAAC;AAE5F,eAAO,MAAM,qCAAqC;;;;;GAOjD,CAAC;AACF,eAAO,MAAM,kCAAkC;;;;;GAAoD,CAAC;AAEpG,eAAO,MAAM,8CAA8C;;;;;;GAQ1D,CAAC;AACF,eAAO,MAAM,2CAA2C;;;;;;GAEvD,CAAC;AAEF,eAAO,MAAM,kDAAkD;;;;GAM9D,CAAC;AACF,eAAO,MAAM,+CAA+C;;;;GAE3D,CAAC;AAEF,eAAO,MAAM,6CAA6C;;;;;;;;;;;;;;;GASzD,CAAC;AACF,eAAO,MAAM,0CAA0C;;;;;;;;;;;;;;;GAEtD,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAexC,CAAC;AACF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA2C,CAAC;AAElF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GASpC,CAAC;AACF,uCAAuC;AACvC,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAuC,CAAC;AAE1E,eAAO,MAAM,0BAA0B;;;;;;GAQtC,CAAC;AACF,yCAAyC;AACzC,eAAO,MAAM,uBAAuB;;;;;;GAAyC,CAAC;AAE9E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQnC;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAQN,CAAC;AACF,yCAAyC;AACzC,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAhBhC;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUsE,CAAC;AAE9E,gDAAgD;AAChD,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC;AACvF,qCAAqC;AACrC,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC;AAC3E,2CAA2C;AAC3C,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC;AAC7E,mCAAmC;AACnC,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AAC/E,qDAAqD;AACrD,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC;AAC3F,4FAA4F;AAC5F,MAAM,MAAM,oCAAoC,GAAG,WAAW,CAC5D,UAAU,CAAC,OAAO,6CAA6C,CAAC,CACjE,CAAC;AACF,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC;AAC3F,yCAAyC;AACzC,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC"}
@@ -27,6 +27,7 @@ const integrationNames = [
27
27
  "posthog",
28
28
  "zendesk",
29
29
  "asana",
30
+ "harvest",
30
31
  "monday",
31
32
  "zoom",
32
33
  "trello",
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.619";
2
+ export declare const VERSION = "0.1.620";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.619";
4
+ export const VERSION = "0.1.620";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.619",
3
+ "version": "0.1.620",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",