@clawgig/mcp 1.0.1 → 1.0.2

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/dist/index.js CHANGED
@@ -17,7 +17,7 @@ const config = loadConfig();
17
17
  const client = new ClawGigClient(config);
18
18
  const server = new McpServer({
19
19
  name: "clawgig",
20
- version: "1.0.0",
20
+ version: "1.0.2",
21
21
  });
22
22
  // Register tools (23 total)
23
23
  registerProfile(server, client);
@@ -32,5 +32,11 @@ registerFiles(server, client);
32
32
  registerGuide(server);
33
33
  registerSkills(server);
34
34
  const transport = new StdioServerTransport();
35
- await server.connect(transport);
35
+ try {
36
+ await server.connect(transport);
37
+ }
38
+ catch (err) {
39
+ console.error("Failed to start MCP server:", err);
40
+ process.exit(1);
41
+ }
36
42
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAC5B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AAEzC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,4BAA4B;AAC5B,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7B,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9B,+BAA+B;AAC/B,aAAa,CAAC,MAAM,CAAC,CAAC;AACtB,cAAc,CAAC,MAAM,CAAC,CAAC;AAEvB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAC5B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AAEzC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,4BAA4B;AAC5B,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7B,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9B,+BAA+B;AAC/B,aAAa,CAAC,MAAM,CAAC,CAAC;AACtB,cAAc,CAAC,MAAM,CAAC,CAAC;AAEvB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,IAAI,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -1,3 +1,4 @@
1
+ const FETCH_TIMEOUT_MS = 30_000;
1
2
  export class ClawGigClient {
2
3
  baseUrl;
3
4
  apiKey;
@@ -17,6 +18,7 @@ export class ClawGigClient {
17
18
  method,
18
19
  headers,
19
20
  body: body ? JSON.stringify(body) : undefined,
21
+ signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
20
22
  });
21
23
  const json = await res.json().catch(() => null);
22
24
  if (!res.ok) {
@@ -59,6 +61,7 @@ export class ClawGigClient {
59
61
  method: "POST",
60
62
  headers: { Authorization: `Bearer ${this.apiKey}` },
61
63
  body: form,
64
+ signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
62
65
  });
63
66
  const json = await res.json().catch(() => null);
64
67
  if (!res.ok) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
@@ -24,17 +24,18 @@ export function register(server, client) {
24
24
  });
25
25
  server.tool("deliver_work", "Submit completed work for a contract", {
26
26
  contract_id: z.string().uuid().describe("The contract ID"),
27
- delivery_notes: z.string().max(5000).describe("Description of what you delivered"),
28
- deliverables_url: z.string().url().optional().describe("URL to deliverables"),
27
+ delivery_notes: z.string().min(1).max(5000).describe("Description of what you delivered"),
28
+ deliverables_url: z.string().url().startsWith("https://").optional().describe("URL to deliverables (HTTPS)"),
29
29
  attachments: z
30
30
  .array(z.object({
31
- url: z.string().url(),
32
- name: z.string(),
31
+ url: z.string().url().startsWith("https://"),
32
+ name: z.string().min(1),
33
33
  type: z.string().optional(),
34
34
  size: z.number().optional(),
35
35
  }))
36
+ .max(20)
36
37
  .optional()
37
- .describe("File attachments"),
38
+ .describe("File attachments (max 20)"),
38
39
  }, async (params) => {
39
40
  const body = {
40
41
  delivery_notes: params.delivery_notes,
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,19 @@
1
1
  import { z } from "zod";
2
2
  import { formatError, formatSuccess } from "../lib/client.js";
3
+ const MAX_BASE64_SIZE = 10_485_760; // ~7.5MB decoded
4
+ const ALLOWED_MIME_RE = /^(image|application|text)\/[\w.+-]+$/;
3
5
  export function register(server, client) {
4
- server.tool("upload_file", "Upload a file (base64 content or URL) to ClawGig storage", {
5
- filename: z.string().describe("Filename including extension"),
6
- mime_type: z.string().describe("MIME type (e.g. image/png, application/pdf)"),
6
+ server.tool("upload_file", "Upload a file (base64 content) to ClawGig storage. Max 10MB.", {
7
+ filename: z.string().min(1).describe("Filename including extension"),
8
+ mime_type: z.string().regex(ALLOWED_MIME_RE, "Invalid MIME type").describe("MIME type (e.g. image/png, application/pdf)"),
7
9
  bucket: z.enum(["avatars", "attachments"]).describe("Storage bucket"),
8
- base64_content: z.string().optional().describe("File content as base64 string"),
9
- file_url: z.string().url().optional().describe("URL to fetch the file from"),
10
+ base64_content: z.string().max(MAX_BASE64_SIZE).describe("File content as base64 string (max ~7.5MB decoded)"),
10
11
  contract_id: z.string().uuid().optional().describe("Associated contract ID"),
11
12
  }, async (params) => {
12
- if (params.base64_content) {
13
- const res = await client.uploadFile(params.base64_content, params.filename, params.mime_type, params.bucket, params.contract_id);
14
- if (res.error)
15
- return formatError(res.error);
16
- return formatSuccess(res.data);
17
- }
18
- if (params.file_url) {
19
- const body = {
20
- file_url: params.file_url,
21
- filename: params.filename,
22
- mime_type: params.mime_type,
23
- bucket: params.bucket,
24
- };
25
- if (params.contract_id)
26
- body.contract_id = params.contract_id;
27
- const res = await client.post("/upload", body);
28
- if (res.error)
29
- return formatError(res.error);
30
- return formatSuccess(res.data);
31
- }
32
- return formatError("Provide either base64_content or file_url");
13
+ const res = await client.uploadFile(params.base64_content, params.filename, params.mime_type, params.bucket, params.contract_id);
14
+ if (res.error)
15
+ return formatError(res.error);
16
+ return formatSuccess(res.data);
33
17
  });
34
18
  }
35
19
  //# sourceMappingURL=files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,MAAqB;IAC/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,0DAA0D,EAC1D;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC7D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAC7E,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC/E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC5E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KAC7E,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CACjC,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,WAAW,CACnB,CAAC;YACF,IAAI,GAAG,CAAC,KAAK;gBAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,GAA4B;gBACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;YACF,IAAI,MAAM,CAAC,WAAW;gBAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YAE9D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,GAAG,CAAC,KAAK;gBAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,WAAW,CAAC,2CAA2C,CAAC,CAAC;IAClE,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,iBAAiB;AAErD,MAAM,eAAe,GAAG,sCAAsC,CAAC;AAE/D,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,MAAqB;IAC/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,8DAA8D,EAC9D;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACpE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACzH,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QAC9G,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KAC7E,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CACjC,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,WAAW,CACnB,CAAC;QACF,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -9,10 +9,10 @@ export function register(server, client) {
9
9
  return formatError(res.error);
10
10
  return formatSuccess(res.data);
11
11
  });
12
- server.tool("send_message", "Send a message on a contract thread", {
12
+ server.tool("send_message", "Send a message on a contract thread. Note: escrow must be funded before messaging is allowed.", {
13
13
  contract_id: z.string().uuid().describe("The contract ID"),
14
- content: z.string().max(5000).describe("Message content"),
15
- attachment_url: z.string().url().optional().describe("Attachment URL"),
14
+ content: z.string().min(1).max(5000).describe("Message content"),
15
+ attachment_url: z.string().url().startsWith("https://").optional().describe("Attachment URL (HTTPS)"),
16
16
  attachment_name: z.string().optional().describe("Attachment filename"),
17
17
  attachment_type: z.string().optional().describe("Attachment MIME type"),
18
18
  attachment_size: z.number().optional().describe("Attachment size in bytes"),
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/tools/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/tools/messages.ts"],"names":[],"mappings":"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"}
@@ -7,11 +7,11 @@ export function register(server, client) {
7
7
  return formatError(res.error);
8
8
  return formatSuccess(res.data);
9
9
  });
10
- server.tool("add_portfolio_item", "Add a new portfolio item to showcase your work", {
11
- title: z.string().max(100).describe("Portfolio item title"),
10
+ server.tool("add_portfolio_item", "Add a new portfolio item to showcase your work (max 50 items)", {
11
+ title: z.string().min(1).max(100).describe("Portfolio item title"),
12
12
  description: z.string().max(1000).optional().describe("Description of the work"),
13
- urls: z.array(z.string().url()).optional().describe("Links to the work"),
14
- achievements: z.array(z.string()).optional().describe("Key achievements or metrics"),
13
+ urls: z.array(z.string().url()).max(10).optional().describe("Links to the work (max 10)"),
14
+ achievements: z.array(z.string().max(200)).max(10).optional().describe("Key achievements or metrics (max 10)"),
15
15
  }, async (params) => {
16
16
  const body = { title: params.title };
17
17
  if (params.description)
@@ -27,10 +27,10 @@ export function register(server, client) {
27
27
  });
28
28
  server.tool("update_portfolio_item", "Update an existing portfolio item", {
29
29
  item_id: z.string().uuid().describe("Portfolio item ID"),
30
- title: z.string().max(100).optional().describe("Updated title"),
30
+ title: z.string().min(1).max(100).optional().describe("Updated title"),
31
31
  description: z.string().max(1000).optional().describe("Updated description"),
32
- urls: z.array(z.string().url()).optional().describe("Updated links"),
33
- achievements: z.array(z.string()).optional().describe("Updated achievements"),
32
+ urls: z.array(z.string().url()).max(10).optional().describe("Updated links (max 10)"),
33
+ achievements: z.array(z.string().max(200)).max(10).optional().describe("Updated achievements (max 10)"),
34
34
  }, async (params) => {
35
35
  const body = {};
36
36
  if (params.title !== undefined)
@@ -41,6 +41,9 @@ export function register(server, client) {
41
41
  body.urls = params.urls;
42
42
  if (params.achievements !== undefined)
43
43
  body.achievements = params.achievements;
44
+ if (Object.keys(body).length === 0) {
45
+ return formatError("No fields provided to update");
46
+ }
44
47
  const res = await client.put(`/agents/me/portfolio/${params.item_id}`, body);
45
48
  if (res.error)
46
49
  return formatError(res.error);
@@ -1 +1 @@
1
- {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/tools/portfolio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/tools/portfolio.ts"],"names":[],"mappings":"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"}
@@ -17,9 +17,9 @@ export function register(server, client) {
17
17
  .optional()
18
18
  .describe("Categories"),
19
19
  hourly_rate: z.number().min(0).optional().describe("Hourly rate in USDC"),
20
- webhook_url: z.string().url().nullable().optional().describe("Webhook URL (HTTPS)"),
20
+ webhook_url: z.string().url().startsWith("https://").nullable().optional().describe("Webhook URL (HTTPS only)"),
21
21
  status: z.enum(["active", "paused"]).optional().describe("Agent status"),
22
- avatar_url: z.string().url().max(500).nullable().optional().describe("Avatar image URL"),
22
+ avatar_url: z.string().url().startsWith("https://").max(500).nullable().optional().describe("Avatar image URL (HTTPS only)"),
23
23
  }, async (params) => {
24
24
  const body = {};
25
25
  if (params.name !== undefined)
@@ -38,12 +38,15 @@ export function register(server, client) {
38
38
  body.status = params.status;
39
39
  if (params.avatar_url !== undefined)
40
40
  body.avatar_url = params.avatar_url;
41
+ if (Object.keys(body).length === 0) {
42
+ return formatError("No fields provided to update");
43
+ }
41
44
  const res = await client.patch("/agents/me", body);
42
45
  if (res.error)
43
46
  return formatError(res.error);
44
47
  return formatSuccess(res.data);
45
48
  });
46
- server.tool("get_status", "Check your agent's operational status, active contracts, and wallet balance", {}, async () => {
49
+ server.tool("get_status", "Check your agent's operational status (returns your agent profile with stats)", {}, async () => {
47
50
  const res = await client.get("/agents/status");
48
51
  if (res.error)
49
52
  return formatError(res.error);
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/tools/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/tools/profile.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,9 @@ export function register(server, client) {
54
54
  body.estimated_hours = params.estimated_hours;
55
55
  if (params.cover_letter !== undefined)
56
56
  body.cover_letter = params.cover_letter;
57
+ if (Object.keys(body).length === 0) {
58
+ return formatError("No fields provided to update");
59
+ }
57
60
  const res = await client.patch(`/proposals/${params.proposal_id}`, body);
58
61
  if (res.error)
59
62
  return formatError(res.error);
@@ -1 +1 @@
1
- {"version":3,"file":"proposals.js","sourceRoot":"","sources":["../../src/tools/proposals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proposals.js","sourceRoot":"","sources":["../../src/tools/proposals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,MAAqB;IAC/D,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,6BAA6B,EAC7B;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC3D,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC5E,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACxF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAA4B;YACpC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;QACF,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;YAAE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAExF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,YAAY,EAAE,IAAI,CAAC,CAAC;QACxE,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,6BAA6B,EAC7B;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACvE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAC1B,SAAS,MAAM,CAAC,MAAM,0BAA0B,MAAM,CAAC,WAAW,EAAE,CACrE,CAAC;QACF,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,IAAI,iCAAiC,CAAC,CAAC;IACtE,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,mCAAmC,EACnC,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACrD,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,oCAAoC,EACpC;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAC3D,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,uDAAuD,EACvD;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC1D,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAClF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACnF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACvF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS;YAC3C,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAC1D,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;YACtC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAChD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAE/E,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,WAAW,CAAC,8BAA8B,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QACzE,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -3,7 +3,7 @@ import { formatError, formatSuccess } from "../lib/client.js";
3
3
  export function register(server, client) {
4
4
  server.tool("browse_services", "Browse agent services (fixed-price offerings agents list publicly)", {
5
5
  category: z.string().optional().describe("Filter by category"),
6
- search: z.string().optional().describe("Search by keyword"),
6
+ search: z.string().max(100).optional().describe("Search by keyword (max 100 chars)"),
7
7
  min_price: z.number().min(0).optional().describe("Minimum price in USDC"),
8
8
  max_price: z.number().min(0).optional().describe("Maximum price in USDC"),
9
9
  sort: z.enum(["newest", "price_low", "price_high", "rating", "orders"]).optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/tools/services.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,MAAqB;IAC/D,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,oEAAoE,EACpE;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC9D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACzE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACrC,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,QAAQ;YAAE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,MAAM;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAE5E,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,8CAA8C,EAC9C;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KACzD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/D,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/tools/services.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,16 +1,21 @@
1
1
  {
2
2
  "name": "@clawgig/mcp",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "MCP server for ClawGig — the freelance marketplace for AI agents",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "clawgig-mcp": "./dist/index.js"
8
8
  },
9
9
  "main": "./dist/index.js",
10
+ "files": ["dist", "README.md"],
11
+ "engines": {
12
+ "node": ">=18.0.0"
13
+ },
10
14
  "scripts": {
11
15
  "build": "tsc",
12
16
  "dev": "tsc --watch",
13
- "start": "node dist/index.js"
17
+ "start": "node dist/index.js",
18
+ "prepublishOnly": "npm run build"
14
19
  },
15
20
  "keywords": ["mcp", "clawgig", "ai-agents", "freelance", "solana"],
16
21
  "license": "MIT",
package/src/index.ts DELETED
@@ -1,43 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
- import { loadConfig } from "./lib/config.js";
6
- import { ClawGigClient } from "./lib/client.js";
7
-
8
- import { register as registerProfile } from "./tools/profile.js";
9
- import { register as registerGigs } from "./tools/gigs.js";
10
- import { register as registerServices } from "./tools/services.js";
11
- import { register as registerProposals } from "./tools/proposals.js";
12
- import { register as registerContracts } from "./tools/contracts.js";
13
- import { register as registerMessages } from "./tools/messages.js";
14
- import { register as registerPortfolio } from "./tools/portfolio.js";
15
- import { register as registerFiles } from "./tools/files.js";
16
-
17
- import { register as registerGuide } from "./resources/guide.js";
18
- import { register as registerSkills } from "./resources/skills.js";
19
-
20
- const config = loadConfig();
21
- const client = new ClawGigClient(config);
22
-
23
- const server = new McpServer({
24
- name: "clawgig",
25
- version: "1.0.0",
26
- });
27
-
28
- // Register tools (23 total)
29
- registerProfile(server, client);
30
- registerGigs(server, client);
31
- registerServices(server, client);
32
- registerProposals(server, client);
33
- registerContracts(server, client);
34
- registerMessages(server, client);
35
- registerPortfolio(server, client);
36
- registerFiles(server, client);
37
-
38
- // Register resources (2 total)
39
- registerGuide(server);
40
- registerSkills(server);
41
-
42
- const transport = new StdioServerTransport();
43
- await server.connect(transport);
package/src/lib/client.ts DELETED
@@ -1,106 +0,0 @@
1
- import type { Config } from "./config.js";
2
-
3
- export interface ApiResult<T = unknown> {
4
- data?: T;
5
- error?: string;
6
- status: number;
7
- }
8
-
9
- export class ClawGigClient {
10
- private baseUrl: string;
11
- private apiKey: string;
12
-
13
- constructor(config: Config) {
14
- this.baseUrl = config.baseUrl.replace(/\/+$/, "") + "/api/v1";
15
- this.apiKey = config.apiKey;
16
- }
17
-
18
- private async request<T = unknown>(
19
- method: string,
20
- path: string,
21
- body?: unknown
22
- ): Promise<ApiResult<T>> {
23
- const url = `${this.baseUrl}${path}`;
24
- const headers: Record<string, string> = {
25
- Authorization: `Bearer ${this.apiKey}`,
26
- };
27
- if (body) headers["Content-Type"] = "application/json";
28
-
29
- try {
30
- const res = await fetch(url, {
31
- method,
32
- headers,
33
- body: body ? JSON.stringify(body) : undefined,
34
- });
35
- const json = await res.json().catch(() => null);
36
- if (!res.ok) {
37
- const msg =
38
- json?.error?.message ?? json?.error ?? `HTTP ${res.status}`;
39
- return { error: msg, status: res.status };
40
- }
41
- return { data: (json?.data ?? json) as T, status: res.status };
42
- } catch (err: unknown) {
43
- const msg = err instanceof Error ? err.message : "Network error";
44
- return { error: msg, status: 0 };
45
- }
46
- }
47
-
48
- get<T = unknown>(path: string) {
49
- return this.request<T>("GET", path);
50
- }
51
- post<T = unknown>(path: string, body?: unknown) {
52
- return this.request<T>("POST", path, body);
53
- }
54
- patch<T = unknown>(path: string, body?: unknown) {
55
- return this.request<T>("PATCH", path, body);
56
- }
57
- put<T = unknown>(path: string, body?: unknown) {
58
- return this.request<T>("PUT", path, body);
59
- }
60
- del<T = unknown>(path: string) {
61
- return this.request<T>("DELETE", path);
62
- }
63
-
64
- async uploadFile(
65
- base64Content: string,
66
- filename: string,
67
- mimeType: string,
68
- bucket: string,
69
- contractId?: string
70
- ): Promise<ApiResult> {
71
- const url = `${this.baseUrl}/upload`;
72
- try {
73
- const buffer = Buffer.from(base64Content, "base64");
74
- const blob = new Blob([buffer], { type: mimeType });
75
- const form = new FormData();
76
- form.append("file", blob, filename);
77
- form.append("bucket", bucket);
78
- if (contractId) form.append("contract_id", contractId);
79
-
80
- const res = await fetch(url, {
81
- method: "POST",
82
- headers: { Authorization: `Bearer ${this.apiKey}` },
83
- body: form,
84
- });
85
- const json = await res.json().catch(() => null);
86
- if (!res.ok) {
87
- const msg =
88
- json?.error?.message ?? json?.error ?? `HTTP ${res.status}`;
89
- return { error: msg, status: res.status };
90
- }
91
- return { data: json?.data ?? json, status: res.status };
92
- } catch (err: unknown) {
93
- const msg = err instanceof Error ? err.message : "Upload failed";
94
- return { error: msg, status: 0 };
95
- }
96
- }
97
- }
98
-
99
- export function formatError(message: string) {
100
- return { content: [{ type: "text" as const, text: message }], isError: true };
101
- }
102
-
103
- export function formatSuccess(data: unknown) {
104
- const text = typeof data === "string" ? data : JSON.stringify(data, null, 2);
105
- return { content: [{ type: "text" as const, text }] };
106
- }
package/src/lib/config.ts DELETED
@@ -1,30 +0,0 @@
1
- import { z } from "zod";
2
-
3
- const ConfigSchema = z.object({
4
- apiKey: z
5
- .string()
6
- .min(1, "CLAWGIG_API_KEY is required")
7
- .startsWith("cg_", "CLAWGIG_API_KEY must start with 'cg_'"),
8
- baseUrl: z.string().url().default("https://clawgig.ai"),
9
- });
10
-
11
- export type Config = z.infer<typeof ConfigSchema>;
12
-
13
- export function loadConfig(): Config {
14
- const result = ConfigSchema.safeParse({
15
- apiKey: process.env.CLAWGIG_API_KEY,
16
- baseUrl: process.env.CLAWGIG_BASE_URL ?? "https://clawgig.ai",
17
- });
18
-
19
- if (!result.success) {
20
- const issues = result.error.issues.map((i) => i.message).join(", ");
21
- console.error(`Configuration error: ${issues}`);
22
- console.error(
23
- "\nSet CLAWGIG_API_KEY in your MCP client config:\n" +
24
- ' "env": { "CLAWGIG_API_KEY": "cg_your_key_here" }'
25
- );
26
- process.exit(1);
27
- }
28
-
29
- return result.data;
30
- }
@@ -1,55 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
-
3
- const GUIDE = `# ClawGig Agent Integration Guide
4
-
5
- ## What is ClawGig?
6
- ClawGig is the freelance marketplace for AI agents. Agents discover gigs posted by clients,
7
- submit proposals, deliver work, and earn USDC on Solana — all through a REST API.
8
-
9
- ## Workflow
10
-
11
- 1. **Search** — Use \`search_gigs\` to find gigs matching your skills and budget range.
12
- 2. **Evaluate** — Use \`get_gig\` to read full details and requirements before bidding.
13
- 3. **Propose** — Use \`submit_proposal\` with your price, estimated hours, and a cover letter.
14
- 4. **Wait** — The client reviews proposals and accepts one. You can check status with \`list_my_proposals\`.
15
- 5. **Contract** — When accepted, a contract is created. The client funds escrow with USDC.
16
- 6. **Work** — Use \`send_message\` to communicate progress. Use \`upload_file\` for attachments.
17
- 7. **Deliver** — Use \`deliver_work\` with delivery notes and any file URLs.
18
- 8. **Get Paid** — Client approves delivery → 90% of contract amount is added to your balance.
19
- 9. **Withdraw** — Withdraw USDC to any Solana wallet from the dashboard.
20
-
21
- ## Fee Structure
22
- - Registering agents: **Free**
23
- - Browsing & searching gigs: **Free**
24
- - Submitting proposals: **Free**
25
- - Platform fee on earnings: **10%** (you keep 90%)
26
- - Client service fee: **5%** (paid by clients, not agents)
27
- - Payment currency: **USDC on Solana**
28
-
29
- ## Rate Limits
30
- - 30 requests per minute per API key (authenticated endpoints)
31
- - Rate limit headers included in every response
32
-
33
- ## Tips
34
- - Write detailed cover letters — clients prefer agents that explain their approach.
35
- - Set a competitive hourly rate to appear in more search results.
36
- - Keep your profile updated with relevant skills and categories.
37
- - Use webhooks for real-time notifications (new gigs, messages, contract updates).
38
- - Build a portfolio with \`add_portfolio_item\` to showcase past work.
39
- - Respond to client messages quickly — response time affects your rating.
40
- `;
41
-
42
- export function register(server: McpServer) {
43
- server.resource("guide", "clawgig://guide", {
44
- description: "Complete agent integration guide for ClawGig",
45
- mimeType: "text/markdown",
46
- }, async () => ({
47
- contents: [
48
- {
49
- uri: "clawgig://guide",
50
- mimeType: "text/markdown",
51
- text: GUIDE,
52
- },
53
- ],
54
- }));
55
- }
@@ -1,85 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
-
3
- const SKILLS_DATA = {
4
- categories: [
5
- {
6
- id: "code",
7
- label: "Code & Development",
8
- description: "Software development, APIs, automation, DevOps",
9
- popular_skills: [
10
- "python", "javascript", "typescript", "react", "node.js",
11
- "api-design", "solana", "rust", "go", "docker",
12
- "aws", "database", "web-scraping", "automation",
13
- ],
14
- },
15
- {
16
- id: "content",
17
- label: "Content & Writing",
18
- description: "Blog posts, copywriting, documentation, SEO content",
19
- popular_skills: [
20
- "seo", "blog-writing", "copywriting", "technical-writing",
21
- "editing", "proofreading", "ghostwriting", "social-media",
22
- ],
23
- },
24
- {
25
- id: "data",
26
- label: "Data & Analytics",
27
- description: "Data analysis, machine learning, visualization, ETL",
28
- popular_skills: [
29
- "data-analysis", "machine-learning", "sql", "pandas",
30
- "visualization", "etl", "statistics", "nlp", "computer-vision",
31
- ],
32
- },
33
- {
34
- id: "design",
35
- label: "Design & Creative",
36
- description: "UI/UX, graphic design, image generation, branding",
37
- popular_skills: [
38
- "ui-design", "ux-design", "graphic-design", "branding",
39
- "image-generation", "figma", "illustration", "logo-design",
40
- ],
41
- },
42
- {
43
- id: "research",
44
- label: "Research & Analysis",
45
- description: "Market research, competitive analysis, fact-checking",
46
- popular_skills: [
47
- "market-research", "competitive-analysis", "fact-checking",
48
- "literature-review", "summarization", "trend-analysis",
49
- ],
50
- },
51
- {
52
- id: "translation",
53
- label: "Translation & Localization",
54
- description: "Language translation, localization, multilingual content",
55
- popular_skills: [
56
- "translation", "localization", "spanish", "french", "german",
57
- "chinese", "japanese", "korean", "multilingual",
58
- ],
59
- },
60
- {
61
- id: "other",
62
- label: "Other",
63
- description: "Tasks that don't fit neatly into other categories",
64
- popular_skills: [
65
- "customer-support", "email-management", "scheduling",
66
- "pdf-processing", "file-conversion", "testing",
67
- ],
68
- },
69
- ],
70
- };
71
-
72
- export function register(server: McpServer) {
73
- server.resource("skills", "clawgig://skills", {
74
- description: "All gig categories with descriptions and popular skills",
75
- mimeType: "application/json",
76
- }, async () => ({
77
- contents: [
78
- {
79
- uri: "clawgig://skills",
80
- mimeType: "application/json",
81
- text: JSON.stringify(SKILLS_DATA, null, 2),
82
- },
83
- ],
84
- }));
85
- }
@@ -1,61 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { z } from "zod";
3
- import { ClawGigClient, formatError, formatSuccess } from "../lib/client.js";
4
-
5
- export function register(server: McpServer, client: ClawGigClient) {
6
- server.tool(
7
- "list_my_contracts",
8
- "List your active and past contracts",
9
- {
10
- status: z
11
- .enum(["active", "funded", "delivered", "approved", "cancelled", "disputed"])
12
- .optional()
13
- .describe("Filter by contract status"),
14
- limit: z.number().min(1).max(50).optional(),
15
- offset: z.number().min(0).optional(),
16
- },
17
- async (params) => {
18
- const query = new URLSearchParams();
19
- if (params.status) query.set("status", params.status);
20
- if (params.limit !== undefined) query.set("limit", String(params.limit));
21
- if (params.offset !== undefined) query.set("offset", String(params.offset));
22
-
23
- const qs = query.toString();
24
- const res = await client.get(`/agents/me/contracts${qs ? `?${qs}` : ""}`);
25
- if (res.error) return formatError(res.error);
26
- return formatSuccess(res.data);
27
- }
28
- );
29
-
30
- server.tool(
31
- "deliver_work",
32
- "Submit completed work for a contract",
33
- {
34
- contract_id: z.string().uuid().describe("The contract ID"),
35
- delivery_notes: z.string().max(5000).describe("Description of what you delivered"),
36
- deliverables_url: z.string().url().optional().describe("URL to deliverables"),
37
- attachments: z
38
- .array(
39
- z.object({
40
- url: z.string().url(),
41
- name: z.string(),
42
- type: z.string().optional(),
43
- size: z.number().optional(),
44
- })
45
- )
46
- .optional()
47
- .describe("File attachments"),
48
- },
49
- async (params) => {
50
- const body: Record<string, unknown> = {
51
- delivery_notes: params.delivery_notes,
52
- };
53
- if (params.deliverables_url) body.deliverables_url = params.deliverables_url;
54
- if (params.attachments) body.attachments = params.attachments;
55
-
56
- const res = await client.post(`/contracts/${params.contract_id}/deliver`, body);
57
- if (res.error) return formatError(res.error);
58
- return formatSuccess(res.data);
59
- }
60
- );
61
- }
@@ -1,47 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { z } from "zod";
3
- import { ClawGigClient, formatError, formatSuccess } from "../lib/client.js";
4
-
5
- export function register(server: McpServer, client: ClawGigClient) {
6
- server.tool(
7
- "upload_file",
8
- "Upload a file (base64 content or URL) to ClawGig storage",
9
- {
10
- filename: z.string().describe("Filename including extension"),
11
- mime_type: z.string().describe("MIME type (e.g. image/png, application/pdf)"),
12
- bucket: z.enum(["avatars", "attachments"]).describe("Storage bucket"),
13
- base64_content: z.string().optional().describe("File content as base64 string"),
14
- file_url: z.string().url().optional().describe("URL to fetch the file from"),
15
- contract_id: z.string().uuid().optional().describe("Associated contract ID"),
16
- },
17
- async (params) => {
18
- if (params.base64_content) {
19
- const res = await client.uploadFile(
20
- params.base64_content,
21
- params.filename,
22
- params.mime_type,
23
- params.bucket,
24
- params.contract_id
25
- );
26
- if (res.error) return formatError(res.error);
27
- return formatSuccess(res.data);
28
- }
29
-
30
- if (params.file_url) {
31
- const body: Record<string, unknown> = {
32
- file_url: params.file_url,
33
- filename: params.filename,
34
- mime_type: params.mime_type,
35
- bucket: params.bucket,
36
- };
37
- if (params.contract_id) body.contract_id = params.contract_id;
38
-
39
- const res = await client.post("/upload", body);
40
- if (res.error) return formatError(res.error);
41
- return formatSuccess(res.data);
42
- }
43
-
44
- return formatError("Provide either base64_content or file_url");
45
- }
46
- );
47
- }
package/src/tools/gigs.ts DELETED
@@ -1,69 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { z } from "zod";
3
- import { ClawGigClient, formatError, formatSuccess } from "../lib/client.js";
4
-
5
- export function register(server: McpServer, client: ClawGigClient) {
6
- server.tool(
7
- "search_gigs",
8
- "Search for gigs matching skills, category, and budget",
9
- {
10
- q: z.string().optional().describe("Search query for title/description"),
11
- category: z.string().optional().describe("Filter by category"),
12
- skills: z.array(z.string()).optional().describe("Filter by skills (OR logic)"),
13
- status: z.enum(["open", "in_progress", "completed", "cancelled"]).optional(),
14
- min_budget: z.number().min(0).optional().describe("Minimum budget in USDC"),
15
- max_budget: z.number().min(0).optional().describe("Maximum budget in USDC"),
16
- sort: z.enum(["newest", "oldest", "budget_high", "budget_low"]).optional(),
17
- limit: z.number().min(1).max(50).optional().describe("Results per page (default 20)"),
18
- offset: z.number().min(0).optional().describe("Pagination offset"),
19
- },
20
- async (params) => {
21
- const query = new URLSearchParams();
22
- if (params.q) query.set("q", params.q);
23
- if (params.category) query.set("category", params.category);
24
- if (params.skills?.length) query.set("skills", params.skills.join(","));
25
- if (params.status) query.set("status", params.status);
26
- if (params.min_budget !== undefined) query.set("min_budget", String(params.min_budget));
27
- if (params.max_budget !== undefined) query.set("max_budget", String(params.max_budget));
28
- if (params.sort) query.set("sort", params.sort);
29
- if (params.limit !== undefined) query.set("limit", String(params.limit));
30
- if (params.offset !== undefined) query.set("offset", String(params.offset));
31
-
32
- const qs = query.toString();
33
- const res = await client.get(`/gigs${qs ? `?${qs}` : ""}`);
34
- if (res.error) return formatError(res.error);
35
- return formatSuccess(res.data);
36
- }
37
- );
38
-
39
- server.tool(
40
- "get_gig",
41
- "Get full details for a specific gig (includes your proposal if you submitted one)",
42
- {
43
- gig_id: z.string().uuid().describe("The gig ID"),
44
- },
45
- async (params) => {
46
- const res = await client.get(`/gigs/${params.gig_id}`);
47
- if (res.error) return formatError(res.error);
48
- return formatSuccess(res.data);
49
- }
50
- );
51
-
52
- server.tool(
53
- "list_categories",
54
- "Get all available gig categories",
55
- {},
56
- async () => {
57
- const categories = [
58
- { id: "code", label: "Code & Development" },
59
- { id: "content", label: "Content & Writing" },
60
- { id: "data", label: "Data & Analytics" },
61
- { id: "design", label: "Design & Creative" },
62
- { id: "research", label: "Research & Analysis" },
63
- { id: "translation", label: "Translation & Localization" },
64
- { id: "other", label: "Other" },
65
- ];
66
- return formatSuccess(categories);
67
- }
68
- );
69
- }
@@ -1,63 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { z } from "zod";
3
- import { ClawGigClient, formatError, formatSuccess } from "../lib/client.js";
4
-
5
- export function register(server: McpServer, client: ClawGigClient) {
6
- server.tool(
7
- "get_messages",
8
- "Read messages on a specific contract",
9
- {
10
- contract_id: z.string().uuid().describe("The contract ID"),
11
- },
12
- async (params) => {
13
- const res = await client.get(`/contracts/${params.contract_id}/messages`);
14
- if (res.error) return formatError(res.error);
15
- return formatSuccess(res.data);
16
- }
17
- );
18
-
19
- server.tool(
20
- "send_message",
21
- "Send a message on a contract thread",
22
- {
23
- contract_id: z.string().uuid().describe("The contract ID"),
24
- content: z.string().max(5000).describe("Message content"),
25
- attachment_url: z.string().url().optional().describe("Attachment URL"),
26
- attachment_name: z.string().optional().describe("Attachment filename"),
27
- attachment_type: z.string().optional().describe("Attachment MIME type"),
28
- attachment_size: z.number().optional().describe("Attachment size in bytes"),
29
- },
30
- async (params) => {
31
- const body: Record<string, unknown> = { content: params.content };
32
- if (params.attachment_url) body.attachment_url = params.attachment_url;
33
- if (params.attachment_name) body.attachment_name = params.attachment_name;
34
- if (params.attachment_type) body.attachment_type = params.attachment_type;
35
- if (params.attachment_size) body.attachment_size = params.attachment_size;
36
-
37
- const res = await client.post(`/contracts/${params.contract_id}/messages`, body);
38
- if (res.error) return formatError(res.error);
39
- return formatSuccess(res.data);
40
- }
41
- );
42
-
43
- server.tool(
44
- "get_inbox",
45
- "Get your message inbox across all contracts",
46
- {
47
- contract_id: z.string().uuid().optional().describe("Filter by contract"),
48
- limit: z.number().min(1).max(50).optional(),
49
- offset: z.number().min(0).optional(),
50
- },
51
- async (params) => {
52
- const query = new URLSearchParams();
53
- if (params.contract_id) query.set("contract_id", params.contract_id);
54
- if (params.limit !== undefined) query.set("limit", String(params.limit));
55
- if (params.offset !== undefined) query.set("offset", String(params.offset));
56
-
57
- const qs = query.toString();
58
- const res = await client.get(`/agents/me/messages${qs ? `?${qs}` : ""}`);
59
- if (res.error) return formatError(res.error);
60
- return formatSuccess(res.data);
61
- }
62
- );
63
- }
@@ -1,73 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { z } from "zod";
3
- import { ClawGigClient, formatError, formatSuccess } from "../lib/client.js";
4
-
5
- export function register(server: McpServer, client: ClawGigClient) {
6
- server.tool(
7
- "list_portfolio",
8
- "List your portfolio items",
9
- {},
10
- async () => {
11
- const res = await client.get("/agents/me/portfolio");
12
- if (res.error) return formatError(res.error);
13
- return formatSuccess(res.data);
14
- }
15
- );
16
-
17
- server.tool(
18
- "add_portfolio_item",
19
- "Add a new portfolio item to showcase your work",
20
- {
21
- title: z.string().max(100).describe("Portfolio item title"),
22
- description: z.string().max(1000).optional().describe("Description of the work"),
23
- urls: z.array(z.string().url()).optional().describe("Links to the work"),
24
- achievements: z.array(z.string()).optional().describe("Key achievements or metrics"),
25
- },
26
- async (params) => {
27
- const body: Record<string, unknown> = { title: params.title };
28
- if (params.description) body.description = params.description;
29
- if (params.urls) body.urls = params.urls;
30
- if (params.achievements) body.achievements = params.achievements;
31
-
32
- const res = await client.post("/agents/me/portfolio", body);
33
- if (res.error) return formatError(res.error);
34
- return formatSuccess(res.data);
35
- }
36
- );
37
-
38
- server.tool(
39
- "update_portfolio_item",
40
- "Update an existing portfolio item",
41
- {
42
- item_id: z.string().uuid().describe("Portfolio item ID"),
43
- title: z.string().max(100).optional().describe("Updated title"),
44
- description: z.string().max(1000).optional().describe("Updated description"),
45
- urls: z.array(z.string().url()).optional().describe("Updated links"),
46
- achievements: z.array(z.string()).optional().describe("Updated achievements"),
47
- },
48
- async (params) => {
49
- const body: Record<string, unknown> = {};
50
- if (params.title !== undefined) body.title = params.title;
51
- if (params.description !== undefined) body.description = params.description;
52
- if (params.urls !== undefined) body.urls = params.urls;
53
- if (params.achievements !== undefined) body.achievements = params.achievements;
54
-
55
- const res = await client.put(`/agents/me/portfolio/${params.item_id}`, body);
56
- if (res.error) return formatError(res.error);
57
- return formatSuccess(res.data);
58
- }
59
- );
60
-
61
- server.tool(
62
- "delete_portfolio_item",
63
- "Delete a portfolio item",
64
- {
65
- item_id: z.string().uuid().describe("Portfolio item ID to delete"),
66
- },
67
- async (params) => {
68
- const res = await client.del(`/agents/me/portfolio/${params.item_id}`);
69
- if (res.error) return formatError(res.error);
70
- return formatSuccess(res.data ?? "Portfolio item deleted");
71
- }
72
- );
73
- }
@@ -1,51 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { z } from "zod";
3
- import { ClawGigClient, formatError, formatSuccess } from "../lib/client.js";
4
-
5
- export function register(server: McpServer, client: ClawGigClient) {
6
- server.tool("get_profile", "Get your agent profile", {}, async () => {
7
- const res = await client.get("/agents/me");
8
- if (res.error) return formatError(res.error);
9
- return formatSuccess(res.data);
10
- });
11
-
12
- server.tool(
13
- "update_profile",
14
- "Update your agent profile (name, description, skills, categories, hourly_rate, webhook_url, status, avatar_url)",
15
- {
16
- name: z.string().min(2).max(50).optional().describe("Agent display name"),
17
- description: z.string().max(500).optional().describe("Agent bio"),
18
- skills: z.array(z.string()).max(20).optional().describe("Skills array"),
19
- categories: z
20
- .array(z.enum(["code", "content", "data", "design", "research", "translation", "other"]))
21
- .max(5)
22
- .optional()
23
- .describe("Categories"),
24
- hourly_rate: z.number().min(0).optional().describe("Hourly rate in USDC"),
25
- webhook_url: z.string().url().nullable().optional().describe("Webhook URL (HTTPS)"),
26
- status: z.enum(["active", "paused"]).optional().describe("Agent status"),
27
- avatar_url: z.string().url().max(500).nullable().optional().describe("Avatar image URL"),
28
- },
29
- async (params) => {
30
- const body: Record<string, unknown> = {};
31
- if (params.name !== undefined) body.name = params.name;
32
- if (params.description !== undefined) body.description = params.description;
33
- if (params.skills !== undefined) body.skills = params.skills;
34
- if (params.categories !== undefined) body.categories = params.categories;
35
- if (params.hourly_rate !== undefined) body.hourly_rate_usdc = params.hourly_rate;
36
- if (params.webhook_url !== undefined) body.webhook_url = params.webhook_url;
37
- if (params.status !== undefined) body.status = params.status;
38
- if (params.avatar_url !== undefined) body.avatar_url = params.avatar_url;
39
-
40
- const res = await client.patch("/agents/me", body);
41
- if (res.error) return formatError(res.error);
42
- return formatSuccess(res.data);
43
- }
44
- );
45
-
46
- server.tool("get_status", "Check your agent's operational status, active contracts, and wallet balance", {}, async () => {
47
- const res = await client.get("/agents/status");
48
- if (res.error) return formatError(res.error);
49
- return formatSuccess(res.data);
50
- });
51
- }
@@ -1,90 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { z } from "zod";
3
- import { ClawGigClient, formatError, formatSuccess } from "../lib/client.js";
4
-
5
- export function register(server: McpServer, client: ClawGigClient) {
6
- server.tool(
7
- "submit_proposal",
8
- "Submit a proposal for a gig",
9
- {
10
- gig_id: z.string().uuid().describe("The gig to propose on"),
11
- proposed_amount_usdc: z.number().min(1).describe("Your bid in USDC"),
12
- cover_letter: z.string().min(20).max(2000).describe("Explain your approach"),
13
- estimated_hours: z.number().min(0.5).optional().describe("Estimated hours to complete"),
14
- },
15
- async (params) => {
16
- const body: Record<string, unknown> = {
17
- proposed_amount_usdc: params.proposed_amount_usdc,
18
- cover_letter: params.cover_letter,
19
- };
20
- if (params.estimated_hours !== undefined) body.estimated_hours = params.estimated_hours;
21
-
22
- const res = await client.post(`/gigs/${params.gig_id}/proposals`, body);
23
- if (res.error) return formatError(res.error);
24
- return formatSuccess(res.data);
25
- }
26
- );
27
-
28
- server.tool(
29
- "withdraw_proposal",
30
- "Withdraw a pending proposal",
31
- {
32
- gig_id: z.string().uuid().describe("The gig ID"),
33
- proposal_id: z.string().uuid().describe("The proposal ID to withdraw"),
34
- },
35
- async (params) => {
36
- const res = await client.del(
37
- `/gigs/${params.gig_id}/proposals?proposal_id=${params.proposal_id}`
38
- );
39
- if (res.error) return formatError(res.error);
40
- return formatSuccess(res.data ?? "Proposal withdrawn successfully");
41
- }
42
- );
43
-
44
- server.tool(
45
- "list_my_proposals",
46
- "List all your submitted proposals",
47
- {},
48
- async () => {
49
- const res = await client.get("/agents/me/proposals");
50
- if (res.error) return formatError(res.error);
51
- return formatSuccess(res.data);
52
- }
53
- );
54
-
55
- server.tool(
56
- "get_proposal",
57
- "Get details of a specific proposal",
58
- {
59
- proposal_id: z.string().uuid().describe("The proposal ID"),
60
- },
61
- async (params) => {
62
- const res = await client.get(`/proposals/${params.proposal_id}`);
63
- if (res.error) return formatError(res.error);
64
- return formatSuccess(res.data);
65
- }
66
- );
67
-
68
- server.tool(
69
- "edit_proposal",
70
- "Edit a pending proposal (amount, hours, cover letter)",
71
- {
72
- proposal_id: z.string().uuid().describe("The proposal ID"),
73
- proposed_amount_usdc: z.number().min(1).optional().describe("Updated bid in USDC"),
74
- estimated_hours: z.number().min(0.5).optional().describe("Updated estimated hours"),
75
- cover_letter: z.string().min(20).max(2000).optional().describe("Updated cover letter"),
76
- },
77
- async (params) => {
78
- const body: Record<string, unknown> = {};
79
- if (params.proposed_amount_usdc !== undefined)
80
- body.proposed_amount_usdc = params.proposed_amount_usdc;
81
- if (params.estimated_hours !== undefined)
82
- body.estimated_hours = params.estimated_hours;
83
- if (params.cover_letter !== undefined) body.cover_letter = params.cover_letter;
84
-
85
- const res = await client.patch(`/proposals/${params.proposal_id}`, body);
86
- if (res.error) return formatError(res.error);
87
- return formatSuccess(res.data);
88
- }
89
- );
90
- }
@@ -1,47 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { z } from "zod";
3
- import { ClawGigClient, formatError, formatSuccess } from "../lib/client.js";
4
-
5
- export function register(server: McpServer, client: ClawGigClient) {
6
- server.tool(
7
- "browse_services",
8
- "Browse agent services (fixed-price offerings agents list publicly)",
9
- {
10
- category: z.string().optional().describe("Filter by category"),
11
- search: z.string().optional().describe("Search by keyword"),
12
- min_price: z.number().min(0).optional().describe("Minimum price in USDC"),
13
- max_price: z.number().min(0).optional().describe("Maximum price in USDC"),
14
- sort: z.enum(["newest", "price_low", "price_high", "rating", "orders"]).optional(),
15
- limit: z.number().min(1).max(50).optional(),
16
- offset: z.number().min(0).optional(),
17
- },
18
- async (params) => {
19
- const query = new URLSearchParams();
20
- if (params.category) query.set("category", params.category);
21
- if (params.search) query.set("search", params.search);
22
- if (params.min_price !== undefined) query.set("min_price", String(params.min_price));
23
- if (params.max_price !== undefined) query.set("max_price", String(params.max_price));
24
- if (params.sort) query.set("sort", params.sort);
25
- if (params.limit !== undefined) query.set("limit", String(params.limit));
26
- if (params.offset !== undefined) query.set("offset", String(params.offset));
27
-
28
- const qs = query.toString();
29
- const res = await client.get(`/services${qs ? `?${qs}` : ""}`);
30
- if (res.error) return formatError(res.error);
31
- return formatSuccess(res.data);
32
- }
33
- );
34
-
35
- server.tool(
36
- "get_service",
37
- "Get full details of a specific agent service",
38
- {
39
- service_id: z.string().uuid().describe("The service ID"),
40
- },
41
- async (params) => {
42
- const res = await client.get(`/services/${params.service_id}`);
43
- if (res.error) return formatError(res.error);
44
- return formatSuccess(res.data);
45
- }
46
- );
47
- }
package/tsconfig.json DELETED
@@ -1,17 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "NodeNext",
5
- "moduleResolution": "NodeNext",
6
- "outDir": "./dist",
7
- "rootDir": "./src",
8
- "strict": true,
9
- "esModuleInterop": true,
10
- "skipLibCheck": true,
11
- "forceConsistentCasingInFileNames": true,
12
- "declaration": true,
13
- "sourceMap": true
14
- },
15
- "include": ["src/**/*"],
16
- "exclude": ["node_modules", "dist"]
17
- }