paperclip-mcp 1.0.0

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.
Files changed (78) hide show
  1. package/README.md +703 -0
  2. package/dist/auth.d.ts +9 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +17 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/client.d.ts +17 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +94 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/errors.d.ts +7 -0
  11. package/dist/errors.d.ts.map +1 -0
  12. package/dist/errors.js +13 -0
  13. package/dist/errors.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +23 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/tools/activity.d.ts +3 -0
  19. package/dist/tools/activity.d.ts.map +1 -0
  20. package/dist/tools/activity.js +106 -0
  21. package/dist/tools/activity.js.map +1 -0
  22. package/dist/tools/agents.d.ts +3 -0
  23. package/dist/tools/agents.d.ts.map +1 -0
  24. package/dist/tools/agents.js +373 -0
  25. package/dist/tools/agents.js.map +1 -0
  26. package/dist/tools/approvals.d.ts +3 -0
  27. package/dist/tools/approvals.d.ts.map +1 -0
  28. package/dist/tools/approvals.js +306 -0
  29. package/dist/tools/approvals.js.map +1 -0
  30. package/dist/tools/attachments.d.ts +3 -0
  31. package/dist/tools/attachments.d.ts.map +1 -0
  32. package/dist/tools/attachments.js +125 -0
  33. package/dist/tools/attachments.js.map +1 -0
  34. package/dist/tools/comments.d.ts +3 -0
  35. package/dist/tools/comments.d.ts.map +1 -0
  36. package/dist/tools/comments.js +75 -0
  37. package/dist/tools/comments.js.map +1 -0
  38. package/dist/tools/dashboard.d.ts +3 -0
  39. package/dist/tools/dashboard.d.ts.map +1 -0
  40. package/dist/tools/dashboard.js +24 -0
  41. package/dist/tools/dashboard.js.map +1 -0
  42. package/dist/tools/documents.d.ts +3 -0
  43. package/dist/tools/documents.d.ts.map +1 -0
  44. package/dist/tools/documents.js +150 -0
  45. package/dist/tools/documents.js.map +1 -0
  46. package/dist/tools/goals.d.ts +3 -0
  47. package/dist/tools/goals.d.ts.map +1 -0
  48. package/dist/tools/goals.js +128 -0
  49. package/dist/tools/goals.js.map +1 -0
  50. package/dist/tools/identity.d.ts +3 -0
  51. package/dist/tools/identity.d.ts.map +1 -0
  52. package/dist/tools/identity.js +44 -0
  53. package/dist/tools/identity.js.map +1 -0
  54. package/dist/tools/index.d.ts +25 -0
  55. package/dist/tools/index.d.ts.map +1 -0
  56. package/dist/tools/index.js +49 -0
  57. package/dist/tools/index.js.map +1 -0
  58. package/dist/tools/issues.d.ts +3 -0
  59. package/dist/tools/issues.d.ts.map +1 -0
  60. package/dist/tools/issues.js +297 -0
  61. package/dist/tools/issues.js.map +1 -0
  62. package/dist/tools/projects.d.ts +3 -0
  63. package/dist/tools/projects.d.ts.map +1 -0
  64. package/dist/tools/projects.js +233 -0
  65. package/dist/tools/projects.js.map +1 -0
  66. package/dist/tools/routines.d.ts +3 -0
  67. package/dist/tools/routines.d.ts.map +1 -0
  68. package/dist/tools/routines.js +305 -0
  69. package/dist/tools/routines.js.map +1 -0
  70. package/dist/tools/validation.d.ts +24 -0
  71. package/dist/tools/validation.d.ts.map +1 -0
  72. package/dist/tools/validation.js +33 -0
  73. package/dist/tools/validation.js.map +1 -0
  74. package/dist/types.d.ts +36 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +3 -0
  77. package/dist/types.js.map +1 -0
  78. package/package.json +61 -0
package/dist/auth.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export interface PaperclipAuth {
2
+ apiKey: string;
3
+ apiUrl: string;
4
+ agentId: string;
5
+ companyId: string;
6
+ runId?: string;
7
+ }
8
+ export declare function getAuthConfig(): PaperclipAuth;
9
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,IAAI,aAAa,CAa7C"}
package/dist/auth.js ADDED
@@ -0,0 +1,17 @@
1
+ export function getAuthConfig() {
2
+ const apiKey = process.env["PAPERCLIP_API_KEY"];
3
+ const apiUrl = process.env["PAPERCLIP_API_URL"];
4
+ const agentId = process.env["PAPERCLIP_AGENT_ID"];
5
+ const companyId = process.env["PAPERCLIP_COMPANY_ID"];
6
+ const runId = process.env["PAPERCLIP_RUN_ID"];
7
+ if (!apiKey)
8
+ throw new Error("PAPERCLIP_API_KEY is required");
9
+ if (!apiUrl)
10
+ throw new Error("PAPERCLIP_API_URL is required");
11
+ if (!agentId)
12
+ throw new Error("PAPERCLIP_AGENT_ID is required");
13
+ if (!companyId)
14
+ throw new Error("PAPERCLIP_COMPANY_ID is required");
15
+ return { apiKey, apiUrl, agentId, companyId, runId };
16
+ }
17
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAChE,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAEpE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type PaperclipAuth } from "./auth.js";
2
+ export type FetchFn = (url: string, init: RequestInit) => Promise<Response>;
3
+ export declare class PaperclipClient {
4
+ private auth;
5
+ private fetchFn;
6
+ constructor(auth?: PaperclipAuth, fetchFn?: FetchFn);
7
+ get companyId(): string;
8
+ buildHeaders(runId?: string): Record<string, string>;
9
+ get<T>(path: string): Promise<T>;
10
+ post<T>(path: string, body?: unknown, runId?: string): Promise<T>;
11
+ patch<T>(path: string, body: unknown, runId?: string): Promise<T>;
12
+ put<T>(path: string, body: unknown, runId?: string): Promise<T>;
13
+ postForm<T>(path: string, form: FormData, runId?: string): Promise<T>;
14
+ delete<T>(path: string, runId?: string): Promise<T>;
15
+ private handleResponse;
16
+ }
17
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAG9D,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5E,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,OAAO,CAAU;gBAEb,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO;IAKnD,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAY9C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAQhC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASjE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASjE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAS/D,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBrE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAQ3C,cAAc;CAe7B"}
package/dist/client.js ADDED
@@ -0,0 +1,94 @@
1
+ import { getAuthConfig } from "./auth.js";
2
+ import { PaperclipApiError } from "./errors.js";
3
+ export class PaperclipClient {
4
+ auth;
5
+ fetchFn;
6
+ constructor(auth, fetchFn) {
7
+ this.auth = auth ?? getAuthConfig();
8
+ this.fetchFn = fetchFn ?? ((url, init) => fetch(url, init));
9
+ }
10
+ get companyId() {
11
+ return this.auth.companyId;
12
+ }
13
+ buildHeaders(runId) {
14
+ const headers = {
15
+ Authorization: `Bearer ${this.auth.apiKey}`,
16
+ "Content-Type": "application/json",
17
+ };
18
+ const effectiveRunId = runId ?? this.auth.runId;
19
+ if (effectiveRunId) {
20
+ headers["X-Paperclip-Run-Id"] = effectiveRunId;
21
+ }
22
+ return headers;
23
+ }
24
+ async get(path) {
25
+ const response = await this.fetchFn(`${this.auth.apiUrl}${path}`, {
26
+ method: "GET",
27
+ headers: this.buildHeaders(),
28
+ });
29
+ return this.handleResponse(response);
30
+ }
31
+ async post(path, body, runId) {
32
+ const response = await this.fetchFn(`${this.auth.apiUrl}${path}`, {
33
+ method: "POST",
34
+ headers: this.buildHeaders(runId),
35
+ body: body !== undefined ? JSON.stringify(body) : undefined,
36
+ });
37
+ return this.handleResponse(response);
38
+ }
39
+ async patch(path, body, runId) {
40
+ const response = await this.fetchFn(`${this.auth.apiUrl}${path}`, {
41
+ method: "PATCH",
42
+ headers: this.buildHeaders(runId),
43
+ body: JSON.stringify(body),
44
+ });
45
+ return this.handleResponse(response);
46
+ }
47
+ async put(path, body, runId) {
48
+ const response = await this.fetchFn(`${this.auth.apiUrl}${path}`, {
49
+ method: "PUT",
50
+ headers: this.buildHeaders(runId),
51
+ body: JSON.stringify(body),
52
+ });
53
+ return this.handleResponse(response);
54
+ }
55
+ async postForm(path, form, runId) {
56
+ const headers = {
57
+ Authorization: `Bearer ${this.auth.apiKey}`,
58
+ };
59
+ const effectiveRunId = runId ?? this.auth.runId;
60
+ if (effectiveRunId) {
61
+ headers["X-Paperclip-Run-Id"] = effectiveRunId;
62
+ }
63
+ const response = await this.fetchFn(`${this.auth.apiUrl}${path}`, {
64
+ method: "POST",
65
+ headers,
66
+ body: form,
67
+ });
68
+ return this.handleResponse(response);
69
+ }
70
+ async delete(path, runId) {
71
+ const response = await this.fetchFn(`${this.auth.apiUrl}${path}`, {
72
+ method: "DELETE",
73
+ headers: this.buildHeaders(runId),
74
+ });
75
+ return this.handleResponse(response);
76
+ }
77
+ async handleResponse(response) {
78
+ if (!response.ok) {
79
+ let body;
80
+ try {
81
+ body = await response.json();
82
+ }
83
+ catch {
84
+ body = await response.text();
85
+ }
86
+ throw new PaperclipApiError(response.status, response.statusText, body);
87
+ }
88
+ if (response.status === 204 || response.headers.get("content-length") === "0") {
89
+ return undefined;
90
+ }
91
+ return response.json();
92
+ }
93
+ }
94
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare class PaperclipApiError extends Error {
2
+ readonly status: number;
3
+ readonly statusText: string;
4
+ readonly body: unknown;
5
+ constructor(status: number, statusText: string, body: unknown, message?: string);
6
+ }
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;aAExB,MAAM,EAAE,MAAM;aACd,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,OAAO;gBAFb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EAC7B,OAAO,CAAC,EAAE,MAAM;CAKnB"}
package/dist/errors.js ADDED
@@ -0,0 +1,13 @@
1
+ export class PaperclipApiError extends Error {
2
+ status;
3
+ statusText;
4
+ body;
5
+ constructor(status, statusText, body, message) {
6
+ super(message ?? `Paperclip API error ${status}: ${statusText}`);
7
+ this.status = status;
8
+ this.statusText = statusText;
9
+ this.body = body;
10
+ this.name = "PaperclipApiError";
11
+ }
12
+ }
13
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAExB;IACA;IACA;IAHlB,YACkB,MAAc,EACd,UAAkB,EAClB,IAAa,EAC7B,OAAgB;QAEhB,KAAK,CAAC,OAAO,IAAI,uBAAuB,MAAM,KAAK,UAAU,EAAE,CAAC,CAAC;QALjD,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAS;QAI7B,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { registerAllTools } from "./tools/index.js";
5
+ const server = new Server({
6
+ name: "paperclip-mcp",
7
+ version: "0.1.0",
8
+ }, {
9
+ capabilities: {
10
+ tools: {},
11
+ },
12
+ });
13
+ registerAllTools(server);
14
+ async function main() {
15
+ const transport = new StdioServerTransport();
16
+ await server.connect(transport);
17
+ console.error("Paperclip MCP server running on stdio");
18
+ }
19
+ main().catch((error) => {
20
+ console.error("Fatal error in main():", error);
21
+ process.exit(1);
22
+ });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEzB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACzD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from "./index.js";
2
+ export declare const activityTools: ToolDefinition[];
3
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AASjD,eAAO,MAAM,aAAa,EAAE,cAAc,EA6FzC,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { z } from "zod";
2
+ import { validate, NoInput, handleApiError } from "./validation.js";
3
+ const GetActivityInput = z.object({
4
+ agentId: z.string().optional().describe("Filter by agent ID"),
5
+ entityType: z.string().optional().describe("Filter by entity type (e.g. issue, approval)"),
6
+ entityId: z.string().optional().describe("Filter by entity ID"),
7
+ });
8
+ export const activityTools = [
9
+ {
10
+ name: "paperclip_get_activity",
11
+ description: "Get audit trail activity for the current company. Optionally filter by agentId, entityType, or entityId.",
12
+ inputSchema: {
13
+ type: "object",
14
+ properties: {
15
+ agentId: { type: "string", description: "Filter by agent ID" },
16
+ entityType: {
17
+ type: "string",
18
+ description: "Filter by entity type (e.g. issue, approval)",
19
+ },
20
+ entityId: { type: "string", description: "Filter by entity ID" },
21
+ },
22
+ required: [],
23
+ },
24
+ annotations: { readOnlyHint: true, openWorldHint: false },
25
+ async handler(args, client) {
26
+ try {
27
+ const input = validate(GetActivityInput, args);
28
+ const params = new URLSearchParams();
29
+ if (input.agentId)
30
+ params.set("agentId", input.agentId);
31
+ if (input.entityType)
32
+ params.set("entityType", input.entityType);
33
+ if (input.entityId)
34
+ params.set("entityId", input.entityId);
35
+ const qs = params.toString();
36
+ const path = `/api/companies/${client.companyId}/activity${qs ? `?${qs}` : ""}`;
37
+ const data = await client.get(path);
38
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
39
+ }
40
+ catch (err) {
41
+ return handleApiError(err);
42
+ }
43
+ },
44
+ },
45
+ {
46
+ name: "paperclip_get_cost_summary",
47
+ description: "Get a cost summary for the current company across all agents and projects.",
48
+ inputSchema: {
49
+ type: "object",
50
+ properties: {},
51
+ required: [],
52
+ },
53
+ annotations: { readOnlyHint: true, openWorldHint: false },
54
+ async handler(args, client) {
55
+ try {
56
+ validate(NoInput, args);
57
+ const data = await client.get(`/api/companies/${client.companyId}/costs/summary`);
58
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
59
+ }
60
+ catch (err) {
61
+ return handleApiError(err);
62
+ }
63
+ },
64
+ },
65
+ {
66
+ name: "paperclip_get_costs_by_agent",
67
+ description: "Get costs broken down by agent for the current company.",
68
+ inputSchema: {
69
+ type: "object",
70
+ properties: {},
71
+ required: [],
72
+ },
73
+ annotations: { readOnlyHint: true, openWorldHint: false },
74
+ async handler(args, client) {
75
+ try {
76
+ validate(NoInput, args);
77
+ const data = await client.get(`/api/companies/${client.companyId}/costs/by-agent`);
78
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
79
+ }
80
+ catch (err) {
81
+ return handleApiError(err);
82
+ }
83
+ },
84
+ },
85
+ {
86
+ name: "paperclip_get_costs_by_project",
87
+ description: "Get costs broken down by project for the current company.",
88
+ inputSchema: {
89
+ type: "object",
90
+ properties: {},
91
+ required: [],
92
+ },
93
+ annotations: { readOnlyHint: true, openWorldHint: false },
94
+ async handler(args, client) {
95
+ try {
96
+ validate(NoInput, args);
97
+ const data = await client.get(`/api/companies/${client.companyId}/costs/by-project`);
98
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
99
+ }
100
+ catch (err) {
101
+ return handleApiError(err);
102
+ }
103
+ },
104
+ },
105
+ ];
106
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from "./index.js";
2
+ export declare const agentTools: ToolDefinition[];
3
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/tools/agents.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwCjD,eAAO,MAAM,UAAU,EAAE,cAAc,EAyUtC,CAAC"}