@lemmaoracle/mcp 0.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.
Files changed (71) hide show
  1. package/README.ja.md +64 -0
  2. package/README.md +72 -0
  3. package/dist/client.d.ts +7 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +9 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/client.test.d.ts +2 -0
  8. package/dist/client.test.d.ts.map +1 -0
  9. package/dist/client.test.js +10 -0
  10. package/dist/client.test.js.map +1 -0
  11. package/dist/errors.d.ts +21 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +19 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/errors.test.d.ts +2 -0
  16. package/dist/errors.test.d.ts.map +1 -0
  17. package/dist/errors.test.js +34 -0
  18. package/dist/errors.test.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +13 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/isVerified.d.ts +2 -0
  24. package/dist/isVerified.d.ts.map +1 -0
  25. package/dist/isVerified.js +2 -0
  26. package/dist/isVerified.js.map +1 -0
  27. package/dist/isVerified.test.d.ts +2 -0
  28. package/dist/isVerified.test.d.ts.map +1 -0
  29. package/dist/isVerified.test.js +27 -0
  30. package/dist/isVerified.test.js.map +1 -0
  31. package/dist/server.d.ts +8 -0
  32. package/dist/server.d.ts.map +1 -0
  33. package/dist/server.js +31 -0
  34. package/dist/server.js.map +1 -0
  35. package/dist/tools/get-circuit.d.ts +9 -0
  36. package/dist/tools/get-circuit.d.ts.map +1 -0
  37. package/dist/tools/get-circuit.js +9 -0
  38. package/dist/tools/get-circuit.js.map +1 -0
  39. package/dist/tools/get-generator.d.ts +9 -0
  40. package/dist/tools/get-generator.d.ts.map +1 -0
  41. package/dist/tools/get-generator.js +9 -0
  42. package/dist/tools/get-generator.js.map +1 -0
  43. package/dist/tools/get-proof-status.d.ts +22 -0
  44. package/dist/tools/get-proof-status.d.ts.map +1 -0
  45. package/dist/tools/get-proof-status.js +30 -0
  46. package/dist/tools/get-proof-status.js.map +1 -0
  47. package/dist/tools/get-proof-status.test.d.ts +2 -0
  48. package/dist/tools/get-proof-status.test.d.ts.map +1 -0
  49. package/dist/tools/get-proof-status.test.js +9 -0
  50. package/dist/tools/get-proof-status.test.js.map +1 -0
  51. package/dist/tools/get-schema.d.ts +9 -0
  52. package/dist/tools/get-schema.d.ts.map +1 -0
  53. package/dist/tools/get-schema.js +9 -0
  54. package/dist/tools/get-schema.js.map +1 -0
  55. package/dist/tools/query-verified-attributes.d.ts +34 -0
  56. package/dist/tools/query-verified-attributes.d.ts.map +1 -0
  57. package/dist/tools/query-verified-attributes.js +44 -0
  58. package/dist/tools/query-verified-attributes.js.map +1 -0
  59. package/dist/tools/register-document.d.ts +1 -0
  60. package/dist/tools/register-document.d.ts.map +1 -0
  61. package/dist/tools/register-document.js +6 -0
  62. package/dist/tools/register-document.js.map +1 -0
  63. package/dist/tools/submit-proof.d.ts +1 -0
  64. package/dist/tools/submit-proof.d.ts.map +1 -0
  65. package/dist/tools/submit-proof.js +6 -0
  66. package/dist/tools/submit-proof.js.map +1 -0
  67. package/dist/worker/index.d.ts +9 -0
  68. package/dist/worker/index.d.ts.map +1 -0
  69. package/dist/worker/index.js +20 -0
  70. package/dist/worker/index.js.map +1 -0
  71. package/package.json +50 -0
package/README.ja.md ADDED
@@ -0,0 +1,64 @@
1
+ # `@lemmaoracle/mcp`
2
+
3
+ `@lemmaoracle/mcp` は Lemma の検証済み属性 (verified attributes) にアクセスするための MCP (Model Context Protocol) サーバーです。
4
+
5
+ ## Claude Desktop 設定例
6
+
7
+ ```json
8
+ {
9
+ "mcpServers": {
10
+ "lemma": {
11
+ "command": "npx",
12
+ "args": ["-y", "@lemmaoracle/mcp"],
13
+ "env": {
14
+ "LEMMA_API_KEY": "YOUR_API_KEY"
15
+ }
16
+ }
17
+ }
18
+ }
19
+ ```
20
+
21
+ 補足: `LEMMA_API_BASE` は省略可能です(省略時は本番エンドポイント)。
22
+
23
+ ## ツール一覧
24
+
25
+ | ツール | フェーズ | 説明 |
26
+ |---|---|---|
27
+ | `lemma_query_verified_attributes` | MVP | Lemma Oracle から暗号学的に検証された属性を問い合わせる |
28
+ | `lemma_get_schema` | MVP | ID からスキーマのメタデータを取得する |
29
+ | `lemma_get_circuit` | MVP | ID から ZK 回路のメタデータを取得する |
30
+ | `lemma_get_generator` | MVP | ID からドキュメントジェネレータのメタデータを取得する |
31
+ | `lemma_get_proof_status` | MVP | `verificationId` から proof の検証状態を取得する |
32
+ | `lemma_register_document` | Phase 2 | Lemma に新しいドキュメントを登録する |
33
+ | `lemma_submit_proof` | Phase 2 | 検証用の ZK proof を送信する |
34
+
35
+ 書き込み系ツール(`register_document`, `submit_proof`)は Phase 2 です。
36
+
37
+ ## ローカル開発
38
+
39
+ npm に公開されるまでは、このモノレポからローカルビルドで動かしてください。
40
+
41
+ ```bash
42
+ git clone https://github.com/lemmaoracle/lemma.git
43
+ cd lemma
44
+ pnpm install
45
+ pnpm -F @lemmaoracle/mcp build
46
+ ```
47
+
48
+ `bin` エントリは `packages/mcp/dist/index.js` を出力します。Claude Desktop からは絶対パスで指定してください:
49
+
50
+ ```json
51
+ {
52
+ "mcpServers": {
53
+ "lemma": {
54
+ "command": "node",
55
+ "args": ["/absolute/path/to/lemma/packages/mcp/dist/index.js"],
56
+ "env": {
57
+ "LEMMA_API_KEY": "YOUR_API_KEY"
58
+ }
59
+ }
60
+ }
61
+ }
62
+ ```
63
+
64
+ 変更したあとは `pnpm -F @lemmaoracle/mcp build` で再ビルドし、Claude Desktop を再起動して接続し直してください。本番以外のエンドポイントに向ける場合は `env` に `"LEMMA_API_BASE": "https://..."` を追加してください。
package/README.md ADDED
@@ -0,0 +1,72 @@
1
+ # `@lemmaoracle/mcp`
2
+
3
+ `@lemmaoracle/mcp` is the MCP access layer for Lemma verified attributes.
4
+
5
+ ## Claude Desktop config example
6
+
7
+ ```json
8
+ {
9
+ "mcpServers": {
10
+ "lemma": {
11
+ "command": "npx",
12
+ "args": ["-y", "@lemmaoracle/mcp"],
13
+ "env": {
14
+ "LEMMA_API_KEY": "YOUR_API_KEY"
15
+ }
16
+ }
17
+ }
18
+ }
19
+ ```
20
+
21
+ Note: `LEMMA_API_BASE` can be omitted (defaults to production endpoint).
22
+
23
+ ## Tool list
24
+
25
+ | Tool | Phase | Description |
26
+ |---|---|---|
27
+ | `lemma_query_verified_attributes` | MVP | Query cryptographically verified attributes from Lemma Oracle |
28
+ | `lemma_get_schema` | MVP | Retrieve schema metadata by ID |
29
+ | `lemma_get_circuit` | MVP | Retrieve ZK circuit metadata by ID |
30
+ | `lemma_get_generator` | MVP | Retrieve document generator metadata by ID |
31
+ | `lemma_get_proof_status` | MVP | Get the verification status of a proof by its verificationId |
32
+ | `lemma_register_document` | Phase 2 | Register a new document on Lemma |
33
+ | `lemma_submit_proof` | Phase 2 | Submit a ZK proof for verification |
34
+
35
+ Note that write tools (`register_document`, `submit_proof`) are Phase 2.
36
+
37
+ ## Local development
38
+
39
+ Until this package is published to npm, run it from a local build of this
40
+ monorepo.
41
+
42
+ ```bash
43
+ git clone https://github.com/lemmaoracle/lemma.git
44
+ cd lemma
45
+ pnpm install
46
+ pnpm -F @lemmaoracle/mcp build
47
+ ```
48
+
49
+ The `bin` entry produces `packages/mcp/dist/index.js`. Point Claude Desktop
50
+ at the absolute path:
51
+
52
+ ```json
53
+ {
54
+ "mcpServers": {
55
+ "lemma": {
56
+ "command": "node",
57
+ "args": ["/absolute/path/to/lemma/packages/mcp/dist/index.js"],
58
+ "env": {
59
+ "LEMMA_API_KEY": "YOUR_API_KEY"
60
+ }
61
+ }
62
+ }
63
+ }
64
+ ```
65
+
66
+ Rebuild after changes with `pnpm -F @lemmaoracle/mcp build` and restart
67
+ Claude Desktop to reconnect. To point at a non-production API, add
68
+ `"LEMMA_API_BASE": "https://..."` to `env`.
69
+
70
+ ---
71
+
72
+ 🇯🇵 [日本語版はこちら / Japanese README](./README.ja.md)
@@ -0,0 +1,7 @@
1
+ export declare const buildClient: (_void?: undefined) => Readonly<{
2
+ apiBase: string;
3
+ apiKey?: string;
4
+ defaultChainId?: number;
5
+ fetcher?: typeof fetch;
6
+ }>;
7
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,GAAI,QAAQ,SAAS;;;;;EAOzC,CAAC"}
package/dist/client.js ADDED
@@ -0,0 +1,9 @@
1
+ import { create } from "@lemmaoracle/sdk/client";
2
+ export const buildClient = (_void) => create({
3
+ ...(process.env.LEMMA_API_BASE ? { apiBase: process.env.LEMMA_API_BASE } : {}),
4
+ ...(process.env.LEMMA_API_KEY ? { apiKey: process.env.LEMMA_API_KEY } : {}),
5
+ ...(process.env.LEMMA_DEFAULT_CHAIN_ID
6
+ ? { defaultChainId: Number(process.env.LEMMA_DEFAULT_CHAIN_ID) }
7
+ : {}),
8
+ });
9
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,EAAE,CAC/C,MAAM,CAAC;IACL,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB;QACpC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE;QAChE,CAAC,CAAC,EAAE,CAAC;CACR,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../src/client.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { describe, it } from "vitest";
2
+ // Note: Integration tests that require SDK imports are skipped due to ramda resolution issues
3
+ // in pnpm workspace with Vite.
4
+ describe("buildClient", () => {
5
+ it.todo("returns client with default apiBase when no env vars are set");
6
+ it.todo("uses LEMMA_API_BASE when provided");
7
+ it.todo("uses LEMMA_API_KEY when provided");
8
+ it.todo("parses LEMMA_DEFAULT_CHAIN_ID as number");
9
+ });
10
+ //# sourceMappingURL=client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../src/client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEtC,8FAA8F;AAC9F,+BAA+B;AAE/B,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IACxE,EAAE,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC7C,EAAE,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC5C,EAAE,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type LemmaMcpError = {
2
+ readonly code: "invalid_input";
3
+ readonly message: string;
4
+ } | {
5
+ readonly code: "auth_error";
6
+ readonly message: string;
7
+ } | {
8
+ readonly code: "rate_limited";
9
+ readonly message: string;
10
+ } | {
11
+ readonly code: "upstream_error";
12
+ readonly message: string;
13
+ };
14
+ export declare const normalizeError: (error: unknown) => LemmaMcpError;
15
+ export declare const runTool: <T>(promise: Promise<T>) => Promise<{
16
+ content: Array<{
17
+ type: "text";
18
+ text: string;
19
+ }>;
20
+ }>;
21
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAgBlE,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,aAM/C,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAIxG,CAAC"}
package/dist/errors.js ADDED
@@ -0,0 +1,19 @@
1
+ const parseStatusFromMessage = (message) => {
2
+ const match = message.match(/HTTP (\d{3}):/);
3
+ return match ? Number(match[1]) : undefined;
4
+ };
5
+ const statusToCode = (status) => status === 400 || status === 422
6
+ ? "invalid_input"
7
+ : status === 401 || status === 403
8
+ ? "auth_error"
9
+ : status === 429
10
+ ? "rate_limited"
11
+ : "upstream_error";
12
+ export const normalizeError = (error) => {
13
+ const message = error instanceof Error ? error.message : String(error);
14
+ const status = parseStatusFromMessage(message);
15
+ const code = status !== undefined ? statusToCode(status) : "upstream_error";
16
+ return { code, message };
17
+ };
18
+ export const runTool = (promise) => promise.then((result) => ({ content: [{ type: "text", text: JSON.stringify(result ?? null, null, 2) }] }), (error) => ({ content: [{ type: "text", text: JSON.stringify({ error: normalizeError(error) }, null, 2) }] }));
19
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAMA,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAsB,EAAE;IACrE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAc,EAAyB,EAAE,CAC7D,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;IAC9B,CAAC,CAAC,eAAe;IACjB,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;QAChC,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,MAAM,KAAK,GAAG;YACd,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,gBAAgB,CAAC;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAc,EAAiB,EAAE;IAC9D,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAE5E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,OAAmB,EAA+D,EAAE,CAC7G,OAAO,CAAC,IAAI,CACV,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5F,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACvH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=errors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../src/errors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { normalizeError } from "./errors.js";
3
+ describe("normalizeError", () => {
4
+ it('maps HTTP 400 to "invalid_input"', () => {
5
+ const result = normalizeError(new Error("HTTP 400: bad request"));
6
+ expect(result.code).toBe("invalid_input");
7
+ });
8
+ it('maps HTTP 422 to "invalid_input"', () => {
9
+ const result = normalizeError(new Error("HTTP 422: validation failed"));
10
+ expect(result.code).toBe("invalid_input");
11
+ });
12
+ it('maps HTTP 401 to "auth_error"', () => {
13
+ const result = normalizeError(new Error("HTTP 401: unauthorized"));
14
+ expect(result.code).toBe("auth_error");
15
+ });
16
+ it('maps HTTP 403 to "auth_error"', () => {
17
+ const result = normalizeError(new Error("HTTP 403: forbidden"));
18
+ expect(result.code).toBe("auth_error");
19
+ });
20
+ it('maps HTTP 429 to "rate_limited"', () => {
21
+ const result = normalizeError(new Error("HTTP 429: too many requests"));
22
+ expect(result.code).toBe("rate_limited");
23
+ });
24
+ it('maps unknown HTTP status to "upstream_error"', () => {
25
+ const result = normalizeError(new Error("HTTP 500: server error"));
26
+ expect(result.code).toBe("upstream_error");
27
+ });
28
+ it('maps non-Error values to "upstream_error"', () => {
29
+ const result = normalizeError("something went wrong");
30
+ expect(result.code).toBe("upstream_error");
31
+ expect(result.message).toBe("something went wrong");
32
+ });
33
+ });
34
+ //# sourceMappingURL=errors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../src/errors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,cAAc,CAAC,sBAAsB,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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,13 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { createLemmaMcpServer } from "./server.js";
4
+ const server = createLemmaMcpServer({
5
+ apiBase: process.env.LEMMA_API_BASE,
6
+ apiKey: process.env.LEMMA_API_KEY,
7
+ defaultChainId: process.env.LEMMA_DEFAULT_CHAIN_ID
8
+ ? Number(process.env.LEMMA_DEFAULT_CHAIN_ID)
9
+ : undefined,
10
+ });
11
+ const transport = new StdioServerTransport();
12
+ server.connect(transport).catch((_error) => process.exit(1));
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,GAAG,oBAAoB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;IACnC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;IACjC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;QAChD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;QAC5C,CAAC,CAAC,SAAS;CACd,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,MAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const isVerified: (status?: string) => boolean;
2
+ //# sourceMappingURL=isVerified.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isVerified.d.ts","sourceRoot":"","sources":["../src/isVerified.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,KAAG,OACW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const isVerified = (status) => status === "verified" || status === "onchain-verified";
2
+ //# sourceMappingURL=isVerified.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isVerified.js","sourceRoot":"","sources":["../src/isVerified.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAe,EAAW,EAAE,CACrD,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=isVerified.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isVerified.test.d.ts","sourceRoot":"","sources":["../src/isVerified.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { isVerified } from "./isVerified.js";
3
+ describe("isVerified", () => {
4
+ it("returns true for 'verified' status", () => {
5
+ expect(isVerified("verified")).toBe(true);
6
+ });
7
+ it("returns true for 'onchain-verified' status", () => {
8
+ expect(isVerified("onchain-verified")).toBe(true);
9
+ });
10
+ it("returns false for 'rejected' status", () => {
11
+ expect(isVerified("rejected")).toBe(false);
12
+ });
13
+ it("returns false for 'received' status", () => {
14
+ expect(isVerified("received")).toBe(false);
15
+ });
16
+ it("returns false for undefined", () => {
17
+ expect(isVerified(undefined)).toBe(false);
18
+ });
19
+ it("returns false for empty string", () => {
20
+ expect(isVerified("")).toBe(false);
21
+ });
22
+ it("returns false for any other string", () => {
23
+ expect(isVerified("pending")).toBe(false);
24
+ expect(isVerified("verifying")).toBe(false);
25
+ });
26
+ });
27
+ //# sourceMappingURL=isVerified.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isVerified.test.js","sourceRoot":"","sources":["../src/isVerified.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export type LemmaMcpServerConfig = Readonly<{
3
+ apiBase?: string;
4
+ apiKey?: string;
5
+ defaultChainId?: number;
6
+ }>;
7
+ export declare const createLemmaMcpServer: (config: LemmaMcpServerConfig) => McpServer;
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,oBAAoB,KAAG,SAyBnE,CAAC"}
package/dist/server.js ADDED
@@ -0,0 +1,31 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { create } from "@lemmaoracle/sdk/client";
3
+ import { queryVerifiedAttributesTool } from "./tools/query-verified-attributes.js";
4
+ import { getSchemaTool } from "./tools/get-schema.js";
5
+ import { getCircuitTool } from "./tools/get-circuit.js";
6
+ import { getGeneratorTool } from "./tools/get-generator.js";
7
+ import { getProofStatusTool } from "./tools/get-proof-status.js";
8
+ export const createLemmaMcpServer = (config) => {
9
+ const client = create({
10
+ ...(config.apiBase !== undefined ? { apiBase: config.apiBase } : {}),
11
+ ...(config.apiKey !== undefined ? { apiKey: config.apiKey } : {}),
12
+ ...(config.defaultChainId !== undefined ? { defaultChainId: config.defaultChainId } : {}),
13
+ });
14
+ const server = new McpServer({
15
+ name: "@lemmaoracle/mcp",
16
+ version: "0.0.1",
17
+ });
18
+ // Tool registration is inherently side-effecting; disable FP lint for this boundary.
19
+ // eslint-disable-next-line functional/no-expression-statements
20
+ queryVerifiedAttributesTool(server, client);
21
+ // eslint-disable-next-line functional/no-expression-statements
22
+ getSchemaTool(server, client);
23
+ // eslint-disable-next-line functional/no-expression-statements
24
+ getCircuitTool(server, client);
25
+ // eslint-disable-next-line functional/no-expression-statements
26
+ getGeneratorTool(server, client);
27
+ // eslint-disable-next-line functional/no-expression-statements
28
+ getProofStatusTool(server, client);
29
+ return server;
30
+ };
31
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAQjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAA4B,EAAa,EAAE;IAC9E,MAAM,MAAM,GAAgB,MAAM,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1F,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,qFAAqF;IACrF,+DAA+D;IAC/D,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,+DAA+D;IAC/D,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,+DAA+D;IAC/D,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,+DAA+D;IAC/D,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+DAA+D;IAC/D,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import type { LemmaClient, CircuitMeta } from "@lemmaoracle/spec";
4
+ export type GetCircuitInput = Readonly<{
5
+ id: string;
6
+ }>;
7
+ export declare const getCircuit: (client: LemmaClient, input: GetCircuitInput) => Promise<CircuitMeta>;
8
+ export declare const getCircuitTool: (server: McpServer, client: LemmaClient) => RegisteredTool;
9
+ //# sourceMappingURL=get-circuit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-circuit.d.ts","sourceRoot":"","sources":["../../src/tools/get-circuit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGlE,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEvD,eAAO,MAAM,UAAU,GAAI,QAAQ,WAAW,EAAE,OAAO,eAAe,KAAG,OAAO,CAAC,WAAW,CACxD,CAAC;AAErC,eAAO,MAAM,cAAc,GAAI,QAAQ,SAAS,EAAE,QAAQ,WAAW,KAAG,cAQrE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ import * as circuits from "@lemmaoracle/sdk/circuits";
3
+ import { runTool } from "../errors.js";
4
+ export const getCircuit = (client, input) => circuits.getById(client, input.id);
5
+ export const getCircuitTool = (server, client) => server.registerTool("lemma_get_circuit", {
6
+ description: "Retrieve ZK circuit metadata by ID.",
7
+ inputSchema: { id: z.string() },
8
+ }, (input) => runTool(getCircuit(client, input)));
9
+ //# sourceMappingURL=get-circuit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-circuit.js","sourceRoot":"","sources":["../../src/tools/get-circuit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,QAAQ,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAmB,EAAE,KAAsB,EAAwB,EAAE,CAC9F,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAiB,EAAE,MAAmB,EAAkB,EAAE,CACvF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;IACE,WAAW,EAAE,qCAAqC;IAClD,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;CAChC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAC9C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import type { LemmaClient, GeneratorMeta } from "@lemmaoracle/spec";
4
+ export type GetGeneratorInput = Readonly<{
5
+ id: string;
6
+ }>;
7
+ export declare const getGenerator: (client: LemmaClient, input: GetGeneratorInput) => Promise<GeneratorMeta>;
8
+ export declare const getGeneratorTool: (server: McpServer, client: LemmaClient) => RegisteredTool;
9
+ //# sourceMappingURL=get-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-generator.d.ts","sourceRoot":"","sources":["../../src/tools/get-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGpE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEzD,eAAO,MAAM,YAAY,GAAI,QAAQ,WAAW,EAAE,OAAO,iBAAiB,KAAG,OAAO,CAAC,aAAa,CAC5D,CAAC;AAEvC,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,EAAE,QAAQ,WAAW,KAAG,cAQvE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ import * as generators from "@lemmaoracle/sdk/generators";
3
+ import { runTool } from "../errors.js";
4
+ export const getGenerator = (client, input) => generators.getById(client, input.id);
5
+ export const getGeneratorTool = (server, client) => server.registerTool("lemma_get_generator", {
6
+ description: "Retrieve document generator metadata by ID.",
7
+ inputSchema: { id: z.string() },
8
+ }, (input) => runTool(getGenerator(client, input)));
9
+ //# sourceMappingURL=get-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-generator.js","sourceRoot":"","sources":["../../src/tools/get-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAE,KAAwB,EAA0B,EAAE,CACpG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAiB,EAAE,MAAmB,EAAkB,EAAE,CACzF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;IACE,WAAW,EAAE,6CAA6C;IAC1D,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;CAChC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAChD,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import type { LemmaClient } from "@lemmaoracle/spec";
4
+ export type GetProofStatusInput = Readonly<{
5
+ verificationId: string;
6
+ }>;
7
+ export type ProofStatusResult = Readonly<{
8
+ status?: string;
9
+ circuitId?: string;
10
+ chainId?: number;
11
+ docHash?: string;
12
+ }>;
13
+ /**
14
+ * Get the verification status of a proof by its verificationId.
15
+ *
16
+ * The SDK `proofs` namespace only exposes `submit`; there is no dedicated status endpoint.
17
+ * Fallback: query `attributes.query` filtered by docHash and extract `proof.status`.
18
+ * Since the verificationId is returned by proofs.submit, we treat it as a docHash filter.
19
+ */
20
+ export declare const getProofStatus: (client: LemmaClient, input: GetProofStatusInput) => Promise<ProofStatusResult | undefined>;
21
+ export declare const getProofStatusTool: (server: McpServer, client: LemmaClient) => RegisteredTool;
22
+ //# sourceMappingURL=get-proof-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-proof-status.d.ts","sourceRoot":"","sources":["../../src/tools/get-proof-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,WAAW,EACnB,OAAO,mBAAmB,KACzB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAgBvC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,SAAS,EAAE,QAAQ,WAAW,KAAG,cAQzE,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import * as attributes from "@lemmaoracle/sdk/attributes";
3
+ import { runTool } from "../errors.js";
4
+ /**
5
+ * Get the verification status of a proof by its verificationId.
6
+ *
7
+ * The SDK `proofs` namespace only exposes `submit`; there is no dedicated status endpoint.
8
+ * Fallback: query `attributes.query` filtered by docHash and extract `proof.status`.
9
+ * Since the verificationId is returned by proofs.submit, we treat it as a docHash filter.
10
+ */
11
+ export const getProofStatus = async (client, input) => {
12
+ const response = await attributes.query(client, {
13
+ attributes: [],
14
+ docHash: input.verificationId,
15
+ });
16
+ const first = response.results[0];
17
+ return first
18
+ ? {
19
+ status: first.proof?.status,
20
+ circuitId: first.proof?.circuitId,
21
+ chainId: first.proof?.chainId ?? first.chainId,
22
+ docHash: first.docHash,
23
+ }
24
+ : undefined;
25
+ };
26
+ export const getProofStatusTool = (server, client) => server.registerTool("lemma_get_proof_status", {
27
+ description: "Get the verification status of a proof by its verificationId. Proof states: received → verifying → verified → onchain-verifying → onchain-verified | rejected",
28
+ inputSchema: { verificationId: z.string() },
29
+ }, (input) => runTool(getProofStatus(client, input)));
30
+ //# sourceMappingURL=get-proof-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-proof-status.js","sourceRoot":"","sources":["../../src/tools/get-proof-status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAWvC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,MAAmB,EACnB,KAA0B,EACc,EAAE;IAC1C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE;QAC9C,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,KAAK,CAAC,cAAc;KAC9B,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAElC,OAAO,KAAK;QACV,CAAC,CAAC;YACE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM;YAC3B,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS;YACjC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO;YAC9C,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB;QACH,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAiB,EAAE,MAAmB,EAAkB,EAAE,CAC3F,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;IACE,WAAW,EAAE,+JAA+J;IAC5K,WAAW,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;CAC5C,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAClD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=get-proof-status.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-proof-status.test.d.ts","sourceRoot":"","sources":["../../src/tools/get-proof-status.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { describe, it } from "vitest";
2
+ // Note: Integration tests that require SDK imports are skipped due to ramda resolution issues
3
+ // in pnpm workspace with Vite. See isVerified.test.ts for the core logic tests.
4
+ describe("getProofStatus module", () => {
5
+ it.todo("exports getProofStatus function");
6
+ it.todo("returns proof status from first result");
7
+ it.todo("returns undefined when no results match");
8
+ });
9
+ //# sourceMappingURL=get-proof-status.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-proof-status.test.js","sourceRoot":"","sources":["../../src/tools/get-proof-status.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEtC,8FAA8F;AAC9F,gFAAgF;AAEhF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC3C,EAAE,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAClD,EAAE,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import type { LemmaClient, SchemaMeta } from "@lemmaoracle/spec";
4
+ export type GetSchemaInput = Readonly<{
5
+ id: string;
6
+ }>;
7
+ export declare const getSchema: (client: LemmaClient, input: GetSchemaInput) => Promise<SchemaMeta>;
8
+ export declare const getSchemaTool: (server: McpServer, client: LemmaClient) => RegisteredTool;
9
+ //# sourceMappingURL=get-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-schema.d.ts","sourceRoot":"","sources":["../../src/tools/get-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGjE,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEtD,eAAO,MAAM,SAAS,GAAI,QAAQ,WAAW,EAAE,OAAO,cAAc,KAAG,OAAO,CAAC,UAAU,CACtD,CAAC;AAEpC,eAAO,MAAM,aAAa,GAAI,QAAQ,SAAS,EAAE,QAAQ,WAAW,KAAG,cAQpE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ import * as schemas from "@lemmaoracle/sdk/schemas";
3
+ import { runTool } from "../errors.js";
4
+ export const getSchema = (client, input) => schemas.getById(client, input.id);
5
+ export const getSchemaTool = (server, client) => server.registerTool("lemma_get_schema", {
6
+ description: "Retrieve schema metadata by ID, including normalize WASM artifact location and hash.",
7
+ inputSchema: { id: z.string() },
8
+ }, (input) => runTool(getSchema(client, input)));
9
+ //# sourceMappingURL=get-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-schema.js","sourceRoot":"","sources":["../../src/tools/get-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAmB,EAAE,KAAqB,EAAuB,EAAE,CAC3F,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AAEpC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAiB,EAAE,MAAmB,EAAkB,EAAE,CACtF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;IACE,WAAW,EAAE,sFAAsF;IACnG,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;CAChC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAC7C,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import type { LemmaClient } from "@lemmaoracle/spec";
4
+ export type QueryVerifiedAttributesInput = Readonly<{
5
+ attributes?: ReadonlyArray<Readonly<{
6
+ name: string;
7
+ operator?: "eq" | "neq" | "gt" | "lt";
8
+ value?: unknown;
9
+ }>>;
10
+ schemas?: ReadonlyArray<string>;
11
+ chainIds?: ReadonlyArray<number>;
12
+ limit?: number;
13
+ offset?: number;
14
+ }>;
15
+ export declare const queryVerifiedAttributes: (client: LemmaClient, input: QueryVerifiedAttributesInput) => Promise<Readonly<{
16
+ results: ReadonlyArray<{
17
+ docHash: string;
18
+ schema: string;
19
+ issuerId: string;
20
+ subjectId: string;
21
+ chainId?: number;
22
+ attributes: Readonly<Record<string, unknown>>;
23
+ isVerified: boolean;
24
+ proof: Readonly<{
25
+ status?: string;
26
+ circuitId?: string;
27
+ chainId?: number;
28
+ } & Record<string, unknown>> | undefined;
29
+ disclosure: unknown;
30
+ }>;
31
+ hasMore: boolean;
32
+ }>>;
33
+ export declare const queryVerifiedAttributesTool: (server: McpServer, client: LemmaClient) => RegisteredTool;
34
+ //# sourceMappingURL=query-verified-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-verified-attributes.d.ts","sourceRoot":"","sources":["../../src/tools/query-verified-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAI9E,OAAO,KAAK,EACV,WAAW,EAEZ,MAAM,mBAAmB,CAAC;AA+B3B,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,UAAU,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IAC/G,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAcH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,WAAW,EACnB,OAAO,4BAA4B,KAClC,OAAO,CAAC,QAAQ,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9C,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,EAAE,QAAQ,CAAC;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;QACjH,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC,CAQD,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,QAAQ,SAAS,EAAE,QAAQ,WAAW,KAAG,cAkBlF,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { z } from "zod";
2
+ import * as R from "ramda";
3
+ import * as attributes from "@lemmaoracle/sdk/attributes";
4
+ import { isVerified } from "../isVerified.js";
5
+ import { runTool } from "../errors.js";
6
+ const enrichItem = (item) => ({
7
+ ...item,
8
+ isVerified: isVerified(item.proof?.status),
9
+ proof: item.proof,
10
+ disclosure: item.disclosure,
11
+ });
12
+ const buildRequest = (input) => ({
13
+ attributes: (input.attributes ?? []).map((attr) => ({
14
+ name: attr.name,
15
+ operator: attr.operator,
16
+ value: attr.value ?? null,
17
+ })),
18
+ ...(R.isEmpty(input.schemas ?? []) ? {} : { targets: { schemas: input.schemas, chainIds: input.chainIds } }),
19
+ ...(input.limit !== undefined ? { limit: Math.min(Math.max(input.limit, 1), 200) } : {}),
20
+ ...(input.offset !== undefined ? { offset: Math.max(input.offset, 0) } : {}),
21
+ });
22
+ export const queryVerifiedAttributes = async (client, input) => {
23
+ const request = buildRequest(input);
24
+ const response = await attributes.query(client, request);
25
+ return {
26
+ results: response.results.map(enrichItem),
27
+ hasMore: response.hasMore,
28
+ };
29
+ };
30
+ export const queryVerifiedAttributesTool = (server, client) => server.registerTool("lemma_query_verified_attributes", {
31
+ description: "Query cryptographically verified attributes from Lemma Oracle. Returns verified attributes with proof status and selective disclosure info.",
32
+ inputSchema: {
33
+ attributes: z.array(z.object({
34
+ name: z.string(),
35
+ operator: z.enum(["eq", "neq", "gt", "lt"]).optional(),
36
+ value: z.unknown(),
37
+ })).optional(),
38
+ schemas: z.array(z.string()).optional(),
39
+ chainIds: z.array(z.number()).optional(),
40
+ limit: z.number().min(1).max(200).optional(),
41
+ offset: z.number().min(0).optional(),
42
+ },
43
+ }, (input) => runTool(queryVerifiedAttributes(client, input)));
44
+ //# sourceMappingURL=query-verified-attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-verified-attributes.js","sourceRoot":"","sources":["../../src/tools/query-verified-attributes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=register-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-document.d.ts","sourceRoot":"","sources":["../../src/tools/register-document.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ // TODO: Phase 2 — implement lemma_register_document tool
3
+ // This tool wraps `documents.register(client, payload)` from @lemmaoracle/sdk.
4
+ // It requires a RegisterDocumentRequest payload with schema, docHash, cid, issuerId,
5
+ // subjectId, commitments, revocation, and optional attributes, signature, hooks.
6
+ //# sourceMappingURL=register-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-document.js","sourceRoot":"","sources":["../../src/tools/register-document.ts"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,+EAA+E;AAC/E,qFAAqF;AACrF,iFAAiF"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=submit-proof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-proof.d.ts","sourceRoot":"","sources":["../../src/tools/submit-proof.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ // TODO: Phase 2 — implement lemma_submit_proof tool
3
+ // This tool wraps `proofs.submit(client, payload)` from @lemmaoracle/sdk.
4
+ // It requires a SubmitProofRequest payload with docHash, circuitId, proof, inputs,
5
+ // and optional chainId, disclosure, onchain flags.
6
+ //# sourceMappingURL=submit-proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-proof.js","sourceRoot":"","sources":["../../src/tools/submit-proof.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,0EAA0E;AAC1E,mFAAmF;AACnF,mDAAmD"}
@@ -0,0 +1,9 @@
1
+ export interface Env {
2
+ readonly LEMMA_API_BASE?: string;
3
+ readonly LEMMA_DEFAULT_CHAIN_ID?: string;
4
+ }
5
+ declare const _default: {
6
+ fetch(req: Request, env: Env, ctx: ExecutionContext): Promise<Response>;
7
+ };
8
+ export default _default;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAC1C;;eAQkB,OAAO,OAAO,GAAG,OAAO,gBAAgB;;AAD3D,wBAaiC"}
@@ -0,0 +1,20 @@
1
+ import { createMcpHandler } from "agents/mcp";
2
+ import { createLemmaMcpServer } from "../server.js";
3
+ const extractBearerToken = (header) => {
4
+ const token = header?.startsWith("Bearer ") ? header.slice(7) : undefined;
5
+ return token === "" ? undefined : token;
6
+ };
7
+ export default {
8
+ async fetch(req, env, ctx) {
9
+ const apiKey = extractBearerToken(req.headers.get("Authorization"));
10
+ const server = createLemmaMcpServer({
11
+ apiBase: env.LEMMA_API_BASE,
12
+ apiKey,
13
+ defaultChainId: env.LEMMA_DEFAULT_CHAIN_ID
14
+ ? Number(env.LEMMA_DEFAULT_CHAIN_ID)
15
+ : undefined,
16
+ });
17
+ return createMcpHandler(server)(req, env, ctx);
18
+ },
19
+ };
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAOpD,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAsB,EAAE;IACvE,MAAM,KAAK,GAAG,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1C,CAAC,CAAC;AAEF,eAAe;IACb,KAAK,CAAC,KAAK,CAAC,GAAY,EAAE,GAAQ,EAAE,GAAqB;QACvD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,OAAO,EAAE,GAAG,CAAC,cAAc;YAC3B,MAAM;YACN,cAAc,EAAE,GAAG,CAAC,sBAAsB;gBACxC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC;gBACpC,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QACH,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;CAC6B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@lemmaoracle/mcp",
3
+ "version": "0.0.2",
4
+ "description": "MCP server for Lemma Oracle API",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "lemma-mcp": "./dist/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/server.js",
14
+ "types": "./dist/server.d.ts"
15
+ },
16
+ "./package.json": "./package.json"
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc --build",
23
+ "deploy": "wrangler deploy",
24
+ "dev": "wrangler dev",
25
+ "type-check": "tsc --noEmit",
26
+ "lint": "eslint 'src/**/*.ts'",
27
+ "test": "vitest run"
28
+ },
29
+ "dependencies": {
30
+ "@lemmaoracle/sdk": "^0.0.18",
31
+ "@lemmaoracle/spec": "workspace:*",
32
+ "@modelcontextprotocol/sdk": "^1.29.0",
33
+ "agents": "^0.11.4",
34
+ "ramda": "^0.30.1",
35
+ "zod": "^3.24.0"
36
+ },
37
+ "devDependencies": {
38
+ "@cloudflare/workers-types": "^4.20250424.0",
39
+ "@types/ramda": "^0.30.0",
40
+ "@typescript-eslint/eslint-plugin": "^8.56.1",
41
+ "@typescript-eslint/parser": "^8.56.1",
42
+ "eslint": "^9.39.3",
43
+ "eslint-config-prettier": "^9.1.0",
44
+ "eslint-plugin-functional": "^9.0.4",
45
+ "ramda": "^0.30.1",
46
+ "typescript": "^5.5.0",
47
+ "vitest": "^2.1.0",
48
+ "wrangler": "^4.14.0"
49
+ }
50
+ }