@cryptoapis-io/mcp-aml 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +7 -1
  2. package/dist/api/exposure/get-address-exposure/index.d.ts +5 -0
  3. package/dist/api/exposure/get-address-exposure/index.d.ts.map +1 -0
  4. package/dist/api/exposure/get-address-exposure/index.js +6 -0
  5. package/dist/api/exposure/get-address-exposure/index.js.map +1 -0
  6. package/dist/api/exposure/index.d.ts +4 -0
  7. package/dist/api/exposure/index.d.ts.map +1 -0
  8. package/dist/api/exposure/index.js +4 -0
  9. package/dist/api/exposure/index.js.map +1 -0
  10. package/dist/api/exposure/list-address-exposure-paths/index.d.ts +5 -0
  11. package/dist/api/exposure/list-address-exposure-paths/index.d.ts.map +1 -0
  12. package/dist/api/exposure/list-address-exposure-paths/index.js +11 -0
  13. package/dist/api/exposure/list-address-exposure-paths/index.js.map +1 -0
  14. package/dist/api/exposure/types.d.ts +19 -0
  15. package/dist/api/exposure/types.d.ts.map +1 -0
  16. package/dist/api/exposure/types.js +21 -0
  17. package/dist/api/exposure/types.js.map +1 -0
  18. package/dist/api/index.d.ts +1 -0
  19. package/dist/api/index.d.ts.map +1 -1
  20. package/dist/api/index.js +1 -0
  21. package/dist/api/index.js.map +1 -1
  22. package/dist/cli.js +0 -0
  23. package/dist/prompts/index.d.ts.map +1 -1
  24. package/dist/prompts/index.js +18 -0
  25. package/dist/prompts/index.js.map +1 -1
  26. package/dist/resources/index.d.ts.map +1 -1
  27. package/dist/resources/index.js +3 -1
  28. package/dist/resources/index.js.map +1 -1
  29. package/dist/resources/supported-capabilities.d.ts +5 -1
  30. package/dist/resources/supported-capabilities.d.ts.map +1 -1
  31. package/dist/resources/supported-capabilities.js +15 -1
  32. package/dist/resources/supported-capabilities.js.map +1 -1
  33. package/dist/tools/aml/get-address-exposure/credits.d.ts +3 -0
  34. package/dist/tools/aml/get-address-exposure/credits.d.ts.map +1 -0
  35. package/dist/tools/aml/get-address-exposure/credits.js +3 -0
  36. package/dist/tools/aml/get-address-exposure/credits.js.map +1 -0
  37. package/dist/tools/aml/index.d.ts.map +1 -1
  38. package/dist/tools/aml/index.js +42 -1
  39. package/dist/tools/aml/index.js.map +1 -1
  40. package/dist/tools/aml/list-address-exposure-paths/credits.d.ts +3 -0
  41. package/dist/tools/aml/list-address-exposure-paths/credits.d.ts.map +1 -0
  42. package/dist/tools/aml/list-address-exposure-paths/credits.js +3 -0
  43. package/dist/tools/aml/list-address-exposure-paths/credits.js.map +1 -0
  44. package/dist/tools/aml/schema.d.ts +19 -4
  45. package/dist/tools/aml/schema.d.ts.map +1 -1
  46. package/dist/tools/aml/schema.js +34 -3
  47. package/dist/tools/aml/schema.js.map +1 -1
  48. package/dist/tools/index.d.ts +12 -3
  49. package/dist/tools/index.d.ts.map +1 -1
  50. package/package.json +9 -5
  51. package/server.json +3 -3
package/README.md CHANGED
@@ -8,6 +8,8 @@ MCP server for [Crypto APIs](https://cryptoapis.io/) AML (Anti-Money Laundering)
8
8
 
9
9
  - Verify whether an address is flagged or associated with fraud, sanctions, ransomware, exploits, darknet markets, or other AML risk categories
10
10
  - Screen a transaction and its participants against AML data, returning risk score, risk band, and flagged addresses with roles/categories/severity
11
+ - Get an address's exposure to risky entities/categories via the AML exposure graph
12
+ - List the paths connecting an address to risky entities in the AML exposure graph, with cursor pagination
11
13
 
12
14
  ## Prerequisites
13
15
 
@@ -99,10 +101,14 @@ npx @modelcontextprotocol/inspector npx @cryptoapis-io/mcp-aml --api-key YOUR_AP
99
101
  |--------|-------------|
100
102
  | `verify-address` | Check if an address is flagged for fraud, sanctions, or other AML risk categories. Params: `address` |
101
103
  | `screen-transaction` | Screen a transaction and its participants against AML data. Params: `blockchain`, `transactionHash` |
104
+ | `get-address-exposure` | Get an address's exposure to risky entities/categories in the AML exposure graph. Params: `blockchain`, `address` |
105
+ | `list-address-exposure-paths` | List the paths connecting an address to risky entities in the AML exposure graph. Params: `blockchain`, `address`; optional `rootAddress` (only return routes originating from this flagged root address), `limit` (1-50, default 10), `startingAfter` (cursor — pass back the response's `nextStartingAfter` to page) |
102
106
 
103
107
  `screen-transaction` supports: ethereum, ethereum-classic, binance-smart-chain, bitcoin, bitcoin-cash, dash, dogecoin, litecoin, arbitrum, polygon, avalanche, optimism, base, zcash, xrp, solana, tezos, kaspa, tron.
104
108
 
105
- > **Note:** these are the highest per-call credit cost endpoints in the Crypto APIs suite — `verify-address` is 200,000 credits, `screen-transaction` is 500,000 credits per call.
109
+ `get-address-exposure` and `list-address-exposure-paths` support a narrower set of 13 chains (no exposure graph for arbitrum, avalanche, base, optimism, tezos, or kaspa): ethereum, binance-smart-chain, ethereum-classic, polygon, tron, bitcoin, bitcoin-cash, litecoin, dogecoin, dash, zcash, xrp, solana.
110
+
111
+ > **Note:** these are the highest per-call credit cost endpoints in the Crypto APIs suite — `verify-address` is 200,000 credits, `screen-transaction` is 500,000 credits per call, `get-address-exposure` is 200,000 credits per request, and `list-address-exposure-paths` is 100,000 credits per page.
106
112
 
107
113
  ## CLI Arguments
108
114
 
@@ -0,0 +1,5 @@
1
+ import type { CryptoApisHttpClient, RequestMetadata } from "@cryptoapis-io/mcp-shared";
2
+ import type { GetAddressExposureRequest } from "../types.js";
3
+ export type GetAddressExposureInput = GetAddressExposureRequest & RequestMetadata;
4
+ export declare function getAddressExposure(client: CryptoApisHttpClient, input: GetAddressExposureInput): Promise<import("@cryptoapis-io/mcp-shared").RequestResult<unknown>>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/exposure/get-address-exposure/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,GAAG,eAAe,CAAC;AAElF,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,uBAAuB,uEAIpG"}
@@ -0,0 +1,6 @@
1
+ export async function getAddressExposure(client, input) {
2
+ return client.request("GET", `/aml/exposure/${input.blockchain}/${encodeURIComponent(input.address)}`, {
3
+ query: { context: input.context },
4
+ });
5
+ }
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/exposure/get-address-exposure/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA4B,EAAE,KAA8B;IACjG,OAAO,MAAM,CAAC,OAAO,CAAU,KAAK,EAAE,iBAAiB,KAAK,CAAC,UAAU,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;QAC5G,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;KACpC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./get-address-exposure/index.js";
2
+ export * from "./list-address-exposure-paths/index.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/exposure/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./get-address-exposure/index.js";
2
+ export * from "./list-address-exposure-paths/index.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/exposure/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CryptoApisHttpClient, RequestMetadata } from "@cryptoapis-io/mcp-shared";
2
+ import type { ListAddressExposurePathsRequest } from "../types.js";
3
+ export type ListAddressExposurePathsInput = ListAddressExposurePathsRequest & RequestMetadata;
4
+ export declare function listAddressExposurePaths(client: CryptoApisHttpClient, input: ListAddressExposurePathsInput): Promise<import("@cryptoapis-io/mcp-shared").RequestResult<unknown>>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/exposure/list-address-exposure-paths/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,MAAM,6BAA6B,GAAG,+BAA+B,GAAG,eAAe,CAAC;AAE9F,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,6BAA6B,uEAahH"}
@@ -0,0 +1,11 @@
1
+ export async function listAddressExposurePaths(client, input) {
2
+ return client.request("GET", `/aml/exposure/${input.blockchain}/${encodeURIComponent(input.address)}/paths`, {
3
+ query: {
4
+ context: input.context,
5
+ rootAddress: input.rootAddress,
6
+ limit: input.limit,
7
+ startingAfter: input.startingAfter,
8
+ },
9
+ });
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/exposure/list-address-exposure-paths/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAA4B,EAAE,KAAoC;IAC7G,OAAO,MAAM,CAAC,OAAO,CACjB,KAAK,EACL,iBAAiB,KAAK,CAAC,UAAU,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAC9E;QACI,KAAK,EAAE;YACH,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,aAAa,EAAE,KAAK,CAAC,aAAa;SACrC;KACJ,CACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Blockchains supported by the AML Exposure graph (Get Address Exposure, List Address
3
+ * Exposure Paths). Narrower than AML_SCREENABLE_BLOCKCHAINS: arbitrum, avalanche, base,
4
+ * optimism, tezos and kaspa have no exposure graph.
5
+ */
6
+ export declare const AML_EXPOSURE_BLOCKCHAINS: readonly ["ethereum", "binance-smart-chain", "ethereum-classic", "polygon", "tron", "bitcoin", "bitcoin-cash", "litecoin", "dogecoin", "dash", "zcash", "xrp", "solana"];
7
+ export type AmlExposureBlockchain = (typeof AML_EXPOSURE_BLOCKCHAINS)[number];
8
+ export type GetAddressExposureRequest = {
9
+ blockchain: AmlExposureBlockchain;
10
+ address: string;
11
+ };
12
+ export type ListAddressExposurePathsRequest = {
13
+ blockchain: AmlExposureBlockchain;
14
+ address: string;
15
+ rootAddress?: string;
16
+ limit?: number;
17
+ startingAfter?: string;
18
+ };
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/api/exposure/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,0KAc3B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,MAAM,MAAM,yBAAyB,GAAG;IACpC,UAAU,EAAE,qBAAqB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC1C,UAAU,EAAE,qBAAqB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Blockchains supported by the AML Exposure graph (Get Address Exposure, List Address
3
+ * Exposure Paths). Narrower than AML_SCREENABLE_BLOCKCHAINS: arbitrum, avalanche, base,
4
+ * optimism, tezos and kaspa have no exposure graph.
5
+ */
6
+ export const AML_EXPOSURE_BLOCKCHAINS = [
7
+ "ethereum",
8
+ "binance-smart-chain",
9
+ "ethereum-classic",
10
+ "polygon",
11
+ "tron",
12
+ "bitcoin",
13
+ "bitcoin-cash",
14
+ "litecoin",
15
+ "dogecoin",
16
+ "dash",
17
+ "zcash",
18
+ "xrp",
19
+ "solana",
20
+ ];
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/exposure/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,UAAU;IACV,qBAAqB;IACrB,kBAAkB;IAClB,SAAS;IACT,MAAM;IACN,SAAS;IACT,cAAc;IACd,UAAU;IACV,UAAU;IACV,MAAM;IACN,OAAO;IACP,KAAK;IACL,QAAQ;CACF,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * as addresses from "./addresses/index.js";
2
2
  export * as transactions from "./transactions/index.js";
3
+ export * as exposure from "./exposure/index.js";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
package/dist/api/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export * as addresses from "./addresses/index.js";
2
2
  export * as transactions from "./transactions/index.js";
3
+ export * as exposure from "./exposure/index.js";
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
package/dist/cli.js CHANGED
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyBvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiDvD"}
@@ -21,5 +21,23 @@ export function registerPrompts(server) {
21
21
  },
22
22
  ],
23
23
  }));
24
+ server.registerPrompt("check-address-exposure", {
25
+ description: "Check a blockchain address's exposure to risky entities via the AML exposure graph (200,000 credits per request; 100,000 credits per page for paths)",
26
+ argsSchema: {
27
+ blockchain: z.string().describe("Blockchain protocol - one of the exposure-supported chains"),
28
+ address: z.string().describe("Blockchain address to check exposure for"),
29
+ rootAddress: z.string().optional().describe("Only return routes originating from this flagged root address"),
30
+ },
31
+ }, (args) => ({
32
+ messages: [
33
+ {
34
+ role: "user",
35
+ content: {
36
+ type: "text",
37
+ text: `Use the aml tool with action get-address-exposure to check address ${args.address} on ${args.blockchain} for exposure to risky entities (200,000 credits). Then use action list-address-exposure-paths (100,000 credits per page${args.rootAddress ? `, rootAddress ${args.rootAddress}` : ""}) to list the connecting paths, passing the response's nextStartingAfter back as startingAfter to page through all results. Report the exposure categories, risk levels, and the paths found.\n\n${formatAmlCapabilities(supportedCapabilities)}`,
38
+ },
39
+ },
40
+ ],
41
+ }));
24
42
  }
25
43
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEtG,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC7C,MAAM,CAAC,cAAc,CACjB,gBAAgB,EAChB;QACI,WAAW,EAAE,2DAA2D;QACxE,UAAU,EAAE;YACR,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;YACzG,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;SACnH;KACJ,EACD,CAAC,IAAI,EAAmB,EAAE,CAAC,CAAC;QACxB,QAAQ,EAAE;YACN;gBACI,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACL,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,eAAe;wBACtB,CAAC,CAAC,wEAAwE,IAAI,CAAC,eAAe,OAAO,IAAI,CAAC,UAAU,8HAA8H,qBAAqB,CAAC,qBAAqB,CAAC,EAAE;wBAChS,CAAC,CAAC,gEAAgE,IAAI,CAAC,OAAO,yFAAyF,qBAAqB,CAAC,qBAAqB,CAAC,EAAE;iBAC5N;aACJ;SACJ;KACJ,CAAC,CACL,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEtG,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC7C,MAAM,CAAC,cAAc,CACjB,gBAAgB,EAChB;QACI,WAAW,EAAE,2DAA2D;QACxE,UAAU,EAAE;YACR,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;YACzG,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;SACnH;KACJ,EACD,CAAC,IAAI,EAAmB,EAAE,CAAC,CAAC;QACxB,QAAQ,EAAE;YACN;gBACI,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACL,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,eAAe;wBACtB,CAAC,CAAC,wEAAwE,IAAI,CAAC,eAAe,OAAO,IAAI,CAAC,UAAU,8HAA8H,qBAAqB,CAAC,qBAAqB,CAAC,EAAE;wBAChS,CAAC,CAAC,gEAAgE,IAAI,CAAC,OAAO,yFAAyF,qBAAqB,CAAC,qBAAqB,CAAC,EAAE;iBAC5N;aACJ;SACJ;KACJ,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,cAAc,CACjB,wBAAwB,EACxB;QACI,WAAW,EACP,sJAAsJ;QAC1J,UAAU,EAAE;YACR,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YAC7F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACxE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;SAC/G;KACJ,EACD,CAAC,IAAI,EAAmB,EAAE,CAAC,CAAC;QACxB,QAAQ,EAAE;YACN;gBACI,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACL,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,sEAAsE,IAAI,CAAC,OAAO,OAAO,IAAI,CAAC,UAAU,2HAA2H,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,oMAAoM,qBAAqB,CAAC,qBAAqB,CAAC,EAAE;iBACzhB;aACJ;SACJ;KACJ,CAAC,CACL,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAezD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkBzD"}
@@ -1,7 +1,9 @@
1
1
  import { supportedCapabilities } from "./supported-capabilities.js";
2
2
  const RESOURCE_URI = "cryptoapis://aml/supported-capabilities";
3
3
  export function registerResources(server) {
4
- server.registerResource("supported-capabilities", RESOURCE_URI, { description: "Available AML tools, actions, and the blockchains screen-transaction supports" }, (uri) => ({
4
+ server.registerResource("supported-capabilities", RESOURCE_URI, {
5
+ description: "Available AML tools, actions, and the blockchains screen-transaction and the exposure actions support",
6
+ }, (uri) => ({
5
7
  contents: [
6
8
  {
7
9
  uri: uri.href,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,YAAY,GAAG,yCAAyC,CAAC;AAE/D,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IAC/C,MAAM,CAAC,gBAAgB,CACnB,wBAAwB,EACxB,YAAY,EACZ,EAAE,WAAW,EAAE,+EAA+E,EAAE,EAChG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACN,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;aACvD;SACJ;KACJ,CAAC,CACL,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,YAAY,GAAG,yCAAyC,CAAC;AAE/D,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IAC/C,MAAM,CAAC,gBAAgB,CACnB,wBAAwB,EACxB,YAAY,EACZ;QACI,WAAW,EACP,uGAAuG;KAC9G,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACN,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;aACvD;SACJ;KACJ,CAAC,CACL,CAAC;AACN,CAAC"}
@@ -2,7 +2,10 @@
2
2
  * Static resource describing the AML capabilities available in this package.
3
3
  *
4
4
  * verify-address has no blockchain parameter (address format alone identifies the chain);
5
- * screen-transaction requires an explicit blockchain from AML_SCREENABLE_BLOCKCHAINS.
5
+ * screen-transaction requires an explicit blockchain from AML_SCREENABLE_BLOCKCHAINS;
6
+ * get-address-exposure and list-address-exposure-paths require a blockchain from the
7
+ * narrower AML_EXPOSURE_BLOCKCHAINS (no exposure graph for arbitrum, avalanche, base,
8
+ * optimism, tezos or kaspa).
6
9
  */
7
10
  export type AmlCapability = {
8
11
  tool: string;
@@ -17,6 +20,7 @@ export type AmlCapability = {
17
20
  export type SupportedCapabilitiesResource = {
18
21
  description: string;
19
22
  screenableBlockchains: readonly string[];
23
+ exposureBlockchains: readonly string[];
20
24
  capabilities: readonly AmlCapability[];
21
25
  };
22
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"supported-capabilities.d.ts","sourceRoot":"","sources":["../../src/resources/supported-capabilities.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KACtC,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,6BAA6B,GAAG,MAAM,CAYjF;AAED,eAAO,MAAM,qBAAqB,EAAE,6BAsBnC,CAAC"}
1
+ {"version":3,"file":"supported-capabilities.d.ts","sourceRoot":"","sources":["../../src/resources/supported-capabilities.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KACtC,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,6BAA6B,GAAG,MAAM,CAejF;AAED,eAAO,MAAM,qBAAqB,EAAE,6BAkCnC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { AML_SCREENABLE_BLOCKCHAINS } from "../api/transactions/screen-transaction/types.js";
2
+ import { AML_EXPOSURE_BLOCKCHAINS } from "../api/exposure/types.js";
2
3
  /**
3
4
  * Format AML capabilities as human-readable text for embedding in prompt output.
4
5
  */
@@ -12,11 +13,13 @@ export function formatAmlCapabilities(data) {
12
13
  }
13
14
  }
14
15
  lines.push(`\nscreen-transaction supported blockchains: ${data.screenableBlockchains.join(", ")}`);
16
+ lines.push(`\nget-address-exposure/list-address-exposure-paths supported blockchains: ${data.exposureBlockchains.join(", ")}`);
15
17
  return lines.join("\n");
16
18
  }
17
19
  export const supportedCapabilities = {
18
- description: "AML risk-screening tools for blockchain addresses and transactions. verify-address works across any supported chain from the address format alone; screen-transaction requires the blockchain to be specified explicitly.",
20
+ description: "AML risk-screening tools for blockchain addresses and transactions. verify-address works across any supported chain from the address format alone; screen-transaction, get-address-exposure and list-address-exposure-paths require the blockchain to be specified explicitly.",
19
21
  screenableBlockchains: AML_SCREENABLE_BLOCKCHAINS,
22
+ exposureBlockchains: AML_EXPOSURE_BLOCKCHAINS,
20
23
  capabilities: [
21
24
  {
22
25
  tool: "aml",
@@ -32,6 +35,17 @@ export const supportedCapabilities = {
32
35
  description: "Screen a transaction and its participants against AML data",
33
36
  requiredParams: ["blockchain", "transactionHash"],
34
37
  },
38
+ {
39
+ name: "get-address-exposure",
40
+ description: "Get an address's exposure to risky entities/categories in the AML exposure graph (200,000 credits per request)",
41
+ requiredParams: ["blockchain", "address"],
42
+ },
43
+ {
44
+ name: "list-address-exposure-paths",
45
+ description: "List the paths connecting an address to risky entities in the AML exposure graph (100,000 credits per page)",
46
+ requiredParams: ["blockchain", "address"],
47
+ optionalParams: ["rootAddress", "limit", "startingAfter"],
48
+ },
35
49
  ],
36
50
  },
37
51
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"supported-capabilities.js","sourceRoot":"","sources":["../../src/resources/supported-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AA0B7F;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAmC;IACrE,MAAM,KAAK,GAAa,CAAC,6BAA6B,CAAC,CAAC;IACxD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,MAAM,GACR,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,GAAG,MAAM,EAAE,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,+CAA+C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAkC;IAChE,WAAW,EACP,2NAA2N;IAC/N,qBAAqB,EAAE,0BAA0B;IACjD,YAAY,EAAE;QACV;YACI,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,gDAAgD;YAC7D,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,gBAAgB;oBACtB,WAAW,EAAE,kGAAkG;oBAC/G,cAAc,EAAE,CAAC,SAAS,CAAC;iBAC9B;gBACD;oBACI,IAAI,EAAE,oBAAoB;oBAC1B,WAAW,EAAE,4DAA4D;oBACzE,cAAc,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC;iBACpD;aACJ;SACJ;KACJ;CACJ,CAAC"}
1
+ {"version":3,"file":"supported-capabilities.js","sourceRoot":"","sources":["../../src/resources/supported-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AA8BpE;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAmC;IACrE,MAAM,KAAK,GAAa,CAAC,6BAA6B,CAAC,CAAC;IACxD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,MAAM,GACR,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,GAAG,MAAM,EAAE,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,+CAA+C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,KAAK,CAAC,IAAI,CACN,6EAA6E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrH,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAkC;IAChE,WAAW,EACP,gRAAgR;IACpR,qBAAqB,EAAE,0BAA0B;IACjD,mBAAmB,EAAE,wBAAwB;IAC7C,YAAY,EAAE;QACV;YACI,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,gDAAgD;YAC7D,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,gBAAgB;oBACtB,WAAW,EAAE,kGAAkG;oBAC/G,cAAc,EAAE,CAAC,SAAS,CAAC;iBAC9B;gBACD;oBACI,IAAI,EAAE,oBAAoB;oBAC1B,WAAW,EAAE,4DAA4D;oBACzE,cAAc,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC;iBACpD;gBACD;oBACI,IAAI,EAAE,sBAAsB;oBAC5B,WAAW,EAAE,gHAAgH;oBAC7H,cAAc,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC;iBAC5C;gBACD;oBACI,IAAI,EAAE,6BAA6B;oBACnC,WAAW,EAAE,6GAA6G;oBAC1H,cAAc,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC;oBACzC,cAAc,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC;iBAC5D;aACJ;SACJ;KACJ;CACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Credits per call (source: OpenAPI x-cost). */
2
+ export declare const credits = 200000;
3
+ //# sourceMappingURL=credits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../../../../src/tools/aml/get-address-exposure/credits.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,eAAO,MAAM,OAAO,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Credits per call (source: OpenAPI x-cost). */
2
+ export const credits = 200000;
3
+ //# sourceMappingURL=credits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.js","sourceRoot":"","sources":["../../../../src/tools/aml/get-address-exposure/credits.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/aml/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAc/D,eAAO,MAAM,OAAO,EAAE,UAAU,CAAC,OAAO,aAAa,CAyDpD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/aml/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAsB,aAAa,EAAqB,MAAM,aAAa,CAAC;AAuBnF,eAAO,MAAM,OAAO,EAAE,UAAU,CAAC,OAAO,aAAa,CAgFpD,CAAC"}
@@ -1,13 +1,21 @@
1
- import { AmlToolSchema } from "./schema.js";
1
+ import { ACTION_BLOCKCHAINS, AmlToolSchema } from "./schema.js";
2
2
  import { verifyAddress } from "../../api/addresses/verify-address/index.js";
3
3
  import { screenTransaction } from "../../api/transactions/screen-transaction/index.js";
4
+ import { getAddressExposure } from "../../api/exposure/get-address-exposure/index.js";
5
+ import { listAddressExposurePaths } from "../../api/exposure/list-address-exposure-paths/index.js";
4
6
  import { credits as verifyAddressCredits } from "./verify-address/credits.js";
5
7
  import { credits as screenTransactionCredits } from "./screen-transaction/credits.js";
8
+ import { credits as getAddressExposureCredits } from "./get-address-exposure/credits.js";
9
+ import { credits as listAddressExposurePathsCredits } from "./list-address-exposure-paths/credits.js";
6
10
  const AML_DESCRIPTION = `AML (Anti-Money Laundering) risk checks for addresses and transactions.
7
11
 
8
12
  Actions:
9
13
  • verify-address: Check if a blockchain address is flagged or associated with fraud, sanctions, ransomware, exploits, darknet markets, or other AML risk categories. Returns risk score, risk band, and the flagging sources.
10
14
  • screen-transaction: Screen a transaction against AML data. Returns whether the transaction is flagged, its risk score/band, and the flagged participant addresses with their roles, scores, severities and categories.
15
+ • get-address-exposure: Get an address's exposure to risky entities/categories across the AML exposure graph. Params: blockchain, address. Costs 200,000 credits per request.
16
+ • list-address-exposure-paths: List the paths connecting an address to risky entities in the AML exposure graph. Params: blockchain, address; optional rootAddress (only return routes originating from this flagged root address), limit (1-50, defaults to 10), startingAfter (pagination cursor). Costs 100,000 credits per page - pass the response's next cursor back as startingAfter to fetch subsequent pages.
17
+
18
+ get-address-exposure and list-address-exposure-paths only support a subset of chains - see the blockchain parameter description.
11
19
 
12
20
  Note: the credit cost of these endpoints is significant — see credits below.`;
13
21
  export const amlTool = {
@@ -16,6 +24,8 @@ export const amlTool = {
16
24
  credits: {
17
25
  "verify-address": verifyAddressCredits,
18
26
  "screen-transaction": screenTransactionCredits,
27
+ "get-address-exposure": getAddressExposureCredits,
28
+ "list-address-exposure-paths": listAddressExposurePathsCredits,
19
29
  },
20
30
  inputSchema: AmlToolSchema,
21
31
  handler: (client, logger) => async (input) => {
@@ -40,6 +50,29 @@ export const amlTool = {
40
50
  context: input.context,
41
51
  });
42
52
  break;
53
+ case "get-address-exposure":
54
+ if (!input.address)
55
+ throw new Error("address is required for get-address-exposure");
56
+ assertSupportedExposureBlockchain(input.action, input.blockchain);
57
+ result = await getAddressExposure(client, {
58
+ blockchain: input.blockchain,
59
+ address: input.address,
60
+ context: input.context,
61
+ });
62
+ break;
63
+ case "list-address-exposure-paths":
64
+ if (!input.address)
65
+ throw new Error("address is required for list-address-exposure-paths");
66
+ assertSupportedExposureBlockchain(input.action, input.blockchain);
67
+ result = await listAddressExposurePaths(client, {
68
+ blockchain: input.blockchain,
69
+ address: input.address,
70
+ rootAddress: input.rootAddress,
71
+ limit: input.limit,
72
+ startingAfter: input.startingAfter,
73
+ context: input.context,
74
+ });
75
+ break;
43
76
  default:
44
77
  throw new Error(`Unknown action: ${input.action}`);
45
78
  }
@@ -67,4 +100,12 @@ export const amlTool = {
67
100
  };
68
101
  },
69
102
  };
103
+ function assertSupportedExposureBlockchain(action, blockchain) {
104
+ if (!blockchain)
105
+ throw new Error(`blockchain is required for ${action}`);
106
+ const allowed = ACTION_BLOCKCHAINS[action];
107
+ if (allowed && !allowed.includes(blockchain)) {
108
+ throw new Error(`blockchain must be one of: ${allowed.join(", ")} (got "${blockchain}")`);
109
+ }
110
+ }
70
111
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/aml/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAEtF,MAAM,eAAe,GAAG;;;;;;6EAMqD,CAAC;AAE9E,MAAM,CAAC,MAAM,OAAO,GAAqC;IACrD,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,eAAe;IAC5B,OAAO,EAAE;QACL,gBAAgB,EAAE,oBAAoB;QACtC,oBAAoB,EAAE,wBAAwB;KACjD;IACD,WAAW,EAAE,aAAa;IAC1B,OAAO,EACH,CAAC,MAA4B,EAAE,MAAiB,EAAE,EAAE,CACpD,KAAK,EAAE,KAAmB,EAAE,EAAE;QAC1B,IAAI,MAA8B,CAAC;QACnC,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,gBAAgB;gBACjB,IAAI,CAAC,KAAK,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC9E,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;oBACjC,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;gBACH,MAAM;YACV,KAAK,oBAAoB;gBACrB,IAAI,CAAC,KAAK,CAAC,UAAU;oBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACxF,IAAI,CAAC,KAAK,CAAC,eAAe;oBAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBAClG,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE;oBACrC,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,eAAe,EAAE,KAAK,CAAC,eAAe;oBACtC,OAAO,EAAE,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;gBACH,MAAM;YACV;gBACI,MAAM,IAAI,KAAK,CAAC,mBAAoB,KAA4B,CAAC,MAAM,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,CAAC,OAAO,CAAC;YACX,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,eAAe,EAAE,MAAM,CAAC,eAAe;SAC1C,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACjB,GAAI,MAAM,CAAC,IAAe;wBAC1B,eAAe,EAAE,MAAM,CAAC,eAAe;wBACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;wBACzC,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,eAAe,EAAE,MAAM,CAAC,eAAe;qBAC1C,CAAC;iBACL;aACJ;SACJ,CAAC;IACN,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/aml/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yDAAyD,CAAC;AAEnG,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,+BAA+B,EAAE,MAAM,0CAA0C,CAAC;AAEtG,MAAM,eAAe,GAAG;;;;;;;;;;6EAUqD,CAAC;AAE9E,MAAM,CAAC,MAAM,OAAO,GAAqC;IACrD,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,eAAe;IAC5B,OAAO,EAAE;QACL,gBAAgB,EAAE,oBAAoB;QACtC,oBAAoB,EAAE,wBAAwB;QAC9C,sBAAsB,EAAE,yBAAyB;QACjD,6BAA6B,EAAE,+BAA+B;KACjE;IACD,WAAW,EAAE,aAAa;IAC1B,OAAO,EACH,CAAC,MAA4B,EAAE,MAAiB,EAAE,EAAE,CACpD,KAAK,EAAE,KAAmB,EAAE,EAAE;QAC1B,IAAI,MAA8B,CAAC;QACnC,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,gBAAgB;gBACjB,IAAI,CAAC,KAAK,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC9E,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;oBACjC,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;gBACH,MAAM;YACV,KAAK,oBAAoB;gBACrB,IAAI,CAAC,KAAK,CAAC,UAAU;oBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACxF,IAAI,CAAC,KAAK,CAAC,eAAe;oBAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBAClG,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE;oBACrC,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,eAAe,EAAE,KAAK,CAAC,eAAe;oBACtC,OAAO,EAAE,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;gBACH,MAAM;YACV,KAAK,sBAAsB;gBACvB,IAAI,CAAC,KAAK,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBACpF,iCAAiC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAClE,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE;oBACtC,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;gBACH,MAAM;YACV,KAAK,6BAA6B;gBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBAC3F,iCAAiC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAClE,MAAM,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE;oBAC5C,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,OAAO,EAAE,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;gBACH,MAAM;YACV;gBACI,MAAM,IAAI,KAAK,CAAC,mBAAoB,KAA4B,CAAC,MAAM,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,CAAC,OAAO,CAAC;YACX,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,eAAe,EAAE,MAAM,CAAC,eAAe;SAC1C,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACjB,GAAI,MAAM,CAAC,IAAe;wBAC1B,eAAe,EAAE,MAAM,CAAC,eAAe;wBACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;wBACzC,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,eAAe,EAAE,MAAM,CAAC,eAAe;qBAC1C,CAAC;iBACL;aACJ;SACJ,CAAC;IACN,CAAC;CACR,CAAC;AAEF,SAAS,iCAAiC,CACtC,MAAc,EACd,UAA8B;IAE9B,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,UAAU,IAAI,CAAC,CAAC;IAC9F,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Credits per page (source: OpenAPI x-cost). */
2
+ export declare const credits = 100000;
3
+ //# sourceMappingURL=credits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../../../../src/tools/aml/list-address-exposure-paths/credits.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,eAAO,MAAM,OAAO,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Credits per page (source: OpenAPI x-cost). */
2
+ export const credits = 100000;
3
+ //# sourceMappingURL=credits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.js","sourceRoot":"","sources":["../../../../src/tools/aml/list-address-exposure-paths/credits.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC"}
@@ -1,23 +1,38 @@
1
1
  import * as z from "zod";
2
- export declare const AmlAction: z.ZodEnum<["verify-address", "screen-transaction"]>;
2
+ export declare const AmlAction: z.ZodEnum<["verify-address", "screen-transaction", "get-address-exposure", "list-address-exposure-paths"]>;
3
+ /**
4
+ * Per-action blockchain restrictions narrower than the tool-wide AML_SCREENABLE_BLOCKCHAINS
5
+ * union below. Enforced in the tool handler as a pre-flight check, not via Zod
6
+ * .superRefine() (breaks inputSchema introspection in MCP clients like the Inspector).
7
+ */
8
+ export declare const ACTION_BLOCKCHAINS: Partial<Record<string, readonly string[]>>;
3
9
  export declare const AmlToolSchema: z.ZodObject<{
4
- action: z.ZodEnum<["verify-address", "screen-transaction"]>;
10
+ action: z.ZodEnum<["verify-address", "screen-transaction", "get-address-exposure", "list-address-exposure-paths"]>;
5
11
  address: z.ZodOptional<z.ZodString>;
6
12
  blockchain: z.ZodOptional<z.ZodEnum<["ethereum", "ethereum-classic", "binance-smart-chain", "bitcoin", "bitcoin-cash", "dash", "dogecoin", "litecoin", "arbitrum", "polygon", "avalanche", "optimism", "base", "zcash", "xrp", "solana", "tezos", "kaspa", "tron"]>>;
7
13
  transactionHash: z.ZodOptional<z.ZodString>;
14
+ rootAddress: z.ZodOptional<z.ZodString>;
15
+ limit: z.ZodOptional<z.ZodNumber>;
16
+ startingAfter: z.ZodOptional<z.ZodString>;
8
17
  } & {
9
18
  context: z.ZodOptional<z.ZodString>;
10
19
  }, "strip", z.ZodTypeAny, {
11
- action: "verify-address" | "screen-transaction";
20
+ action: "verify-address" | "screen-transaction" | "get-address-exposure" | "list-address-exposure-paths";
12
21
  address?: string | undefined;
13
22
  blockchain?: "ethereum" | "ethereum-classic" | "binance-smart-chain" | "bitcoin" | "bitcoin-cash" | "dash" | "dogecoin" | "litecoin" | "arbitrum" | "polygon" | "avalanche" | "optimism" | "base" | "zcash" | "xrp" | "solana" | "tezos" | "kaspa" | "tron" | undefined;
14
23
  transactionHash?: string | undefined;
24
+ rootAddress?: string | undefined;
25
+ limit?: number | undefined;
26
+ startingAfter?: string | undefined;
15
27
  context?: string | undefined;
16
28
  }, {
17
- action: "verify-address" | "screen-transaction";
29
+ action: "verify-address" | "screen-transaction" | "get-address-exposure" | "list-address-exposure-paths";
18
30
  address?: string | undefined;
19
31
  blockchain?: "ethereum" | "ethereum-classic" | "binance-smart-chain" | "bitcoin" | "bitcoin-cash" | "dash" | "dogecoin" | "litecoin" | "arbitrum" | "polygon" | "avalanche" | "optimism" | "base" | "zcash" | "xrp" | "solana" | "tezos" | "kaspa" | "tron" | undefined;
20
32
  transactionHash?: string | undefined;
33
+ rootAddress?: string | undefined;
34
+ limit?: number | undefined;
35
+ startingAfter?: string | undefined;
21
36
  context?: string | undefined;
22
37
  }>;
23
38
  export type AmlToolInput = z.infer<typeof AmlToolSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/tools/aml/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,eAAO,MAAM,SAAS,qDAAmD,CAAC;AAE1E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;EAoBO,CAAC;AAElC,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/tools/aml/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAKzB,eAAO,MAAM,SAAS,4GAKpB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAGzE,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CO,CAAC;AAElC,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -1,7 +1,22 @@
1
1
  import * as z from "zod";
2
2
  import { RequestMetadataSchema } from "@cryptoapis-io/mcp-shared";
3
3
  import { AML_SCREENABLE_BLOCKCHAINS } from "../../api/transactions/screen-transaction/types.js";
4
- export const AmlAction = z.enum(["verify-address", "screen-transaction"]);
4
+ import { AML_EXPOSURE_BLOCKCHAINS } from "../../api/exposure/types.js";
5
+ export const AmlAction = z.enum([
6
+ "verify-address",
7
+ "screen-transaction",
8
+ "get-address-exposure",
9
+ "list-address-exposure-paths",
10
+ ]);
11
+ /**
12
+ * Per-action blockchain restrictions narrower than the tool-wide AML_SCREENABLE_BLOCKCHAINS
13
+ * union below. Enforced in the tool handler as a pre-flight check, not via Zod
14
+ * .superRefine() (breaks inputSchema introspection in MCP clients like the Inspector).
15
+ */
16
+ export const ACTION_BLOCKCHAINS = {
17
+ "get-address-exposure": AML_EXPOSURE_BLOCKCHAINS,
18
+ "list-address-exposure-paths": AML_EXPOSURE_BLOCKCHAINS,
19
+ };
5
20
  export const AmlToolSchema = z
6
21
  .object({
7
22
  action: AmlAction.describe("Action to perform"),
@@ -9,16 +24,32 @@ export const AmlToolSchema = z
9
24
  .string()
10
25
  .min(1)
11
26
  .optional()
12
- .describe("Blockchain address to verify against AML databases - required for verify-address"),
27
+ .describe("Blockchain address - required for verify-address, get-address-exposure, and list-address-exposure-paths"),
13
28
  blockchain: z
14
29
  .enum(AML_SCREENABLE_BLOCKCHAINS)
15
30
  .optional()
16
- .describe(`Blockchain protocol the transaction belongs to - required for screen-transaction. One of: ${AML_SCREENABLE_BLOCKCHAINS.join(", ")}`),
31
+ .describe(`Blockchain protocol - required for screen-transaction, get-address-exposure and list-address-exposure-paths. screen-transaction accepts: ${AML_SCREENABLE_BLOCKCHAINS.join(", ")}. get-address-exposure and list-address-exposure-paths accept only: ${AML_EXPOSURE_BLOCKCHAINS.join(", ")}`),
17
32
  transactionHash: z
18
33
  .string()
19
34
  .min(1)
20
35
  .optional()
21
36
  .describe("Transaction hash to screen against AML data - required for screen-transaction"),
37
+ rootAddress: z
38
+ .string()
39
+ .min(1)
40
+ .optional()
41
+ .describe("Only return routes that originate from this flagged root address (one of the roots[].rootAddress values returned by get-address-exposure) - optional, applies to list-address-exposure-paths only"),
42
+ limit: z
43
+ .number()
44
+ .int()
45
+ .min(1)
46
+ .max(50)
47
+ .optional()
48
+ .describe("Number of exposure paths to return per page (1-50, defaults to 10) - applies to list-address-exposure-paths only"),
49
+ startingAfter: z
50
+ .string()
51
+ .optional()
52
+ .describe("Pagination cursor - pass the nextStartingAfter value from the previous response to fetch the next page; applies to list-address-exposure-paths only"),
22
53
  })
23
54
  .merge(RequestMetadataSchema);
24
55
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/tools/aml/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAEhG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KACzB,MAAM,CAAC;IACJ,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/C,OAAO,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,kFAAkF,CAAC;IACjG,UAAU,EAAE,CAAC;SACR,IAAI,CAAC,0BAA0B,CAAC;SAChC,QAAQ,EAAE;SACV,QAAQ,CACL,6FAA6F,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvI;IACL,eAAe,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,+EAA+E,CAAC;CACjG,CAAC;KACD,KAAK,CAAC,qBAAqB,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/tools/aml/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC;IAC5B,gBAAgB;IAChB,oBAAoB;IACpB,sBAAsB;IACtB,6BAA6B;CAChC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA+C;IAC1E,sBAAsB,EAAE,wBAAwB;IAChD,6BAA6B,EAAE,wBAAwB;CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KACzB,MAAM,CAAC;IACJ,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/C,OAAO,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACL,yGAAyG,CAC5G;IACL,UAAU,EAAE,CAAC;SACR,IAAI,CAAC,0BAA0B,CAAC;SAChC,QAAQ,EAAE;SACV,QAAQ,CACL,4IAA4I,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,uEAAuE,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChS;IACL,eAAe,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,+EAA+E,CAAC;IAC9F,WAAW,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACL,mMAAmM,CACtM;IACL,KAAK,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CACL,kHAAkH,CACrH;IACL,aAAa,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACL,qJAAqJ,CACxJ;CACR,CAAC;KACD,KAAK,CAAC,qBAAqB,CAAC,CAAC"}
@@ -1,21 +1,30 @@
1
1
  export declare const tools: readonly [import("./types.js").McpToolDef<import("zod").ZodObject<{
2
- action: import("zod").ZodEnum<["verify-address", "screen-transaction"]>;
2
+ action: import("zod").ZodEnum<["verify-address", "screen-transaction", "get-address-exposure", "list-address-exposure-paths"]>;
3
3
  address: import("zod").ZodOptional<import("zod").ZodString>;
4
4
  blockchain: import("zod").ZodOptional<import("zod").ZodEnum<["ethereum", "ethereum-classic", "binance-smart-chain", "bitcoin", "bitcoin-cash", "dash", "dogecoin", "litecoin", "arbitrum", "polygon", "avalanche", "optimism", "base", "zcash", "xrp", "solana", "tezos", "kaspa", "tron"]>>;
5
5
  transactionHash: import("zod").ZodOptional<import("zod").ZodString>;
6
+ rootAddress: import("zod").ZodOptional<import("zod").ZodString>;
7
+ limit: import("zod").ZodOptional<import("zod").ZodNumber>;
8
+ startingAfter: import("zod").ZodOptional<import("zod").ZodString>;
6
9
  } & {
7
10
  context: import("zod").ZodOptional<import("zod").ZodString>;
8
11
  }, "strip", import("zod").ZodTypeAny, {
9
- action: "verify-address" | "screen-transaction";
12
+ action: "verify-address" | "screen-transaction" | "get-address-exposure" | "list-address-exposure-paths";
10
13
  address?: string | undefined;
11
14
  blockchain?: "ethereum" | "ethereum-classic" | "binance-smart-chain" | "bitcoin" | "bitcoin-cash" | "dash" | "dogecoin" | "litecoin" | "arbitrum" | "polygon" | "avalanche" | "optimism" | "base" | "zcash" | "xrp" | "solana" | "tezos" | "kaspa" | "tron" | undefined;
12
15
  transactionHash?: string | undefined;
16
+ rootAddress?: string | undefined;
17
+ limit?: number | undefined;
18
+ startingAfter?: string | undefined;
13
19
  context?: string | undefined;
14
20
  }, {
15
- action: "verify-address" | "screen-transaction";
21
+ action: "verify-address" | "screen-transaction" | "get-address-exposure" | "list-address-exposure-paths";
16
22
  address?: string | undefined;
17
23
  blockchain?: "ethereum" | "ethereum-classic" | "binance-smart-chain" | "bitcoin" | "bitcoin-cash" | "dash" | "dogecoin" | "litecoin" | "arbitrum" | "polygon" | "avalanche" | "optimism" | "base" | "zcash" | "xrp" | "solana" | "tezos" | "kaspa" | "tron" | undefined;
18
24
  transactionHash?: string | undefined;
25
+ rootAddress?: string | undefined;
26
+ limit?: number | undefined;
27
+ startingAfter?: string | undefined;
19
28
  context?: string | undefined;
20
29
  }>>, {
21
30
  name: "system_info";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAC+zB,CAAC;;;eAA6H,CAAC;;;;;;;;EADz5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAC+zB,CAAC;;;eAA6H,CAAC;;;;;;;;EADz5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptoapis-io/mcp-aml",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "MCP server for AML address verification and transaction screening via Crypto APIs",
5
5
  "license": "MIT",
6
6
  "author": "Crypto APIs, Inc.",
@@ -32,16 +32,20 @@
32
32
  "cryptoapis-mcp-aml": "dist/cli.js"
33
33
  },
34
34
  "dependencies": {
35
+ "@cryptoapis-io/mcp-shared": "0.4.0",
35
36
  "@modelcontextprotocol/sdk": "^1.27.1",
36
- "zod": "^3.25.0",
37
- "@cryptoapis-io/mcp-shared": "0.4.0"
37
+ "zod": "^3.25.0"
38
38
  },
39
39
  "scripts": {
40
40
  "dev": "tsx watch src/cli.ts",
41
41
  "build": "tsc -p tsconfig.json",
42
42
  "typecheck": "tsc -p tsconfig.json --noEmit",
43
43
  "lint": "node -e \"console.log('lint: add eslint if you want')\"",
44
- "test": "node -e \"console.log('test: add later')\"",
44
+ "test": "node --test test/*.test.mjs",
45
45
  "clean": "rimraf dist"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^25.0.3",
49
+ "typescript": "^5.5.4"
46
50
  }
47
- }
51
+ }
package/server.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.CryptoAPIs-io/mcp-aml",
4
- "description": "MCP server for AML address verification and transaction screening via Crypto APIs",
4
+ "description": "MCP server for AML address verification, transaction screening, and exposure checks via Crypto APIs",
5
5
  "repository": {
6
6
  "url": "https://github.com/CryptoAPIs-io/cryptoapis-mcp-aml",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.2.0",
9
+ "version": "0.3.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@cryptoapis-io/mcp-aml",
14
- "version": "0.2.0",
14
+ "version": "0.3.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },