@chainpatrol/mcp 1.10.1 → 1.11.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.
- package/CHANGELOG.md +39 -0
- package/dist/{chunk-DXVC4YVX.js → chunk-7U4RIDQZ.js} +169 -22
- package/dist/chunk-7U4RIDQZ.js.map +1 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.js +1 -1
- package/dist/stdio-bin.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-DXVC4YVX.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# @chainpatrol/mcp
|
|
2
2
|
|
|
3
|
+
## 1.11.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3895c2f: `/asset/list` no longer requires `type`. Omitting it returns assets of every
|
|
8
|
+
type on a single pagination cursor, so mirroring the whole blocklist no longer
|
|
9
|
+
means looping the `AssetType` enum. Supplying `type` behaves exactly as before.
|
|
10
|
+
|
|
11
|
+
- `@chainpatrol/sdk`: `listAssets` accepts an input without `type`.
|
|
12
|
+
- `@chainpatrol/mcp`: the generated `asset_list` tool drops `type` from its
|
|
13
|
+
required fields.
|
|
14
|
+
|
|
15
|
+
Server-side work lives in @chainpatrol/validation and @chainpatrol/external-trpc;
|
|
16
|
+
both are private packages and don't need version bumps.
|
|
17
|
+
|
|
18
|
+
- 264c4f7: Expose the new `hasAttachments` filter on both report-list tools, `organization_reports_list` and `get_organization_reports`, so a report search can be narrowed to reports that carry evidence files. Supporting work lives in the private packages @chainpatrol/core, @chainpatrol/external-trpc and @chainpatrol/trpc, which do not need version bumps.
|
|
19
|
+
|
|
20
|
+
## 1.10.2
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- aa164fd: Fixed the MCP handshake `instructions` to reflect the tools actually exposed
|
|
25
|
+
when a server is narrowed with `only` (the CLI's `--tools` flag, or a caller
|
|
26
|
+
like the web app's blocklist-only endpoint). Previously every server —
|
|
27
|
+
narrowed or not — advertised the full-API instructions and told the client to
|
|
28
|
+
call `user_orgs` first, even when `user_orgs` wasn't in the exposed tool set.
|
|
29
|
+
A client following that advice would hit "unknown tool" before ever reaching
|
|
30
|
+
the tool it wanted. Supporting work in `@chainpatrol/web` (a new
|
|
31
|
+
blocklist-only MCP route) is a private package and doesn't need a version
|
|
32
|
+
bump.
|
|
33
|
+
- adce1d5: The MCP server now reports its real version in the initialize handshake.
|
|
34
|
+
|
|
35
|
+
`PACKAGE_VERSION` was a hand-maintained literal that changesets does not
|
|
36
|
+
know about, so it went stale on every release: 1.10.1 shipped announcing
|
|
37
|
+
itself as `1.10.0`, the same drift #7804 had already corrected once. It is
|
|
38
|
+
now read from package.json and inlined by tsup at build time, so the
|
|
39
|
+
published server still does no filesystem lookup and the two cannot
|
|
40
|
+
disagree again.
|
|
41
|
+
|
|
3
42
|
## 1.10.1
|
|
4
43
|
|
|
5
44
|
### Patch Changes
|
|
@@ -195,7 +195,7 @@ var tools_default = {
|
|
|
195
195
|
properties: {
|
|
196
196
|
type: {
|
|
197
197
|
type: "string",
|
|
198
|
-
description: "Asset type One of
|
|
198
|
+
description: "Asset type One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type"
|
|
199
199
|
},
|
|
200
200
|
content: {
|
|
201
201
|
type: "string",
|
|
@@ -310,7 +310,7 @@ var tools_default = {
|
|
|
310
310
|
path: "/asset/list",
|
|
311
311
|
pathParams: [],
|
|
312
312
|
title: "List assets",
|
|
313
|
-
description: "Answers 'which assets
|
|
313
|
+
description: "Answers 'which assets does ChainPatrol hold at this status?'. Returns a paginated list defaulting to `BLOCKED`, optionally narrowed to a single `type` and to a date range. Omit `type` to sweep every asset type on one cursor, which is the cheapest way to mirror the whole blocklist. Built for bulk export and sync \u2014 pass `next_page` from the previous response to continue. To check one specific asset, use `/asset/check` instead; for an organization's own monitored assets, use `/organization/assets`.",
|
|
314
314
|
tags: [
|
|
315
315
|
"asset"
|
|
316
316
|
],
|
|
@@ -321,7 +321,7 @@ var tools_default = {
|
|
|
321
321
|
properties: {
|
|
322
322
|
type: {
|
|
323
323
|
type: "string",
|
|
324
|
-
description: "Asset type One of
|
|
324
|
+
description: "Asset type to retrieve. Omit the field entirely to retrieve assets of every type in a single paginated sweep; an explicit null is rejected. One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type"
|
|
325
325
|
},
|
|
326
326
|
status: {
|
|
327
327
|
type: "string",
|
|
@@ -367,10 +367,7 @@ var tools_default = {
|
|
|
367
367
|
description: "Cursor for fetching the next page of results"
|
|
368
368
|
}
|
|
369
369
|
},
|
|
370
|
-
|
|
371
|
-
"type"
|
|
372
|
-
],
|
|
373
|
-
description: "List asset request body\n\nDefaults to getting all the updates in the last 1 day.\n\nYou can also choose a `startDate` and `endDate` for the range of asset updates, most \ntimestamp formats should work, we use [Luxon](https://moment.github.io/luxon/#/parsing) \nfor parsing the dates."
|
|
370
|
+
description: "List asset request body\n\nWith no `startDate`, this returns every matching asset regardless of age \u2014 there\nis no implicit one-day window. Pass `startDate` to get a delta instead.\n\nYou can also choose a `startDate` and `endDate` for the range of asset updates, most \ntimestamp formats should work, we use [Luxon](https://moment.github.io/luxon/#/parsing) \nfor parsing the dates."
|
|
374
371
|
}
|
|
375
372
|
},
|
|
376
373
|
{
|
|
@@ -622,7 +619,7 @@ var tools_default = {
|
|
|
622
619
|
},
|
|
623
620
|
source: {
|
|
624
621
|
type: "string",
|
|
625
|
-
description: "Detection source key, from `GET /detection/sources`. The source must support the `organization` scope; global-only sources cannot be configured per organization. One of
|
|
622
|
+
description: "Detection source key, from `GET /detection/sources`. The source must support the `organization` scope; global-only sources cannot be configured per organization. One of 58 values, e.g. meta_ads_search, telegram_channels_search, telegram_user_search, telegram_channels_search_vetric, telegram_user_search_vetric, facebook_page_search_vetric, facebook_user_search_vetric, facebook_post_search_vetric. Full list: resource chainpatrol://enums/source"
|
|
626
623
|
},
|
|
627
624
|
status: {
|
|
628
625
|
type: "string",
|
|
@@ -1023,7 +1020,7 @@ var tools_default = {
|
|
|
1023
1020
|
},
|
|
1024
1021
|
filters: {
|
|
1025
1022
|
type: "array",
|
|
1026
|
-
description: "Filters to apply to the results. Each clause filters on one property. Accepted values per property \u2014 `source`: One of
|
|
1023
|
+
description: "Filters to apply to the results. Each clause filters on one property. Accepted values per property \u2014 `source`: One of 58 values, e.g. meta_ads_search, telegram_channels_search, telegram_user_search, telegram_channels_search_vetric, telegram_user_search_vetric, facebook_page_search_vetric, facebook_user_search_vetric, facebook_post_search_vetric. Full list: resource chainpatrol://enums/source; `confidence`: none, low, medium, high; `liveness`: UNKNOWN, ALIVE, DEAD; `watchlist`: ENABLED, DISABLED; `assetStatus`: UNKNOWN, ALLOWED, BLOCKED; `reported`: reported, not_reported; `assetType`: One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type; `brand`: number values; `deleted`: string values; `countryCode`: string values.",
|
|
1027
1024
|
items: {
|
|
1028
1025
|
type: "object",
|
|
1029
1026
|
properties: {
|
|
@@ -1239,7 +1236,7 @@ var tools_default = {
|
|
|
1239
1236
|
type: "array",
|
|
1240
1237
|
items: {
|
|
1241
1238
|
type: "string",
|
|
1242
|
-
description: "One of
|
|
1239
|
+
description: "One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type"
|
|
1243
1240
|
}
|
|
1244
1241
|
},
|
|
1245
1242
|
reviewedByUserId: {
|
|
@@ -1300,6 +1297,10 @@ var tools_default = {
|
|
|
1300
1297
|
hasMxRecords: {
|
|
1301
1298
|
type: "boolean"
|
|
1302
1299
|
},
|
|
1300
|
+
hasAttachments: {
|
|
1301
|
+
type: "boolean",
|
|
1302
|
+
description: "Filter on evidence files uploaded with the report. `true` returns only reports with at least one attachment that has not been removed; `false` returns only reports with none. Useful for finding phone number or email reports that came with supporting evidence."
|
|
1303
|
+
},
|
|
1303
1304
|
sources: {
|
|
1304
1305
|
type: "array",
|
|
1305
1306
|
items: {
|
|
@@ -1814,6 +1815,60 @@ var tools_default = {
|
|
|
1814
1815
|
]
|
|
1815
1816
|
}
|
|
1816
1817
|
},
|
|
1818
|
+
{
|
|
1819
|
+
name: "metrics_false_positive_rate",
|
|
1820
|
+
procedure: "metricsFalsePositiveRate",
|
|
1821
|
+
method: "POST",
|
|
1822
|
+
path: "/metrics/false-positive-rate",
|
|
1823
|
+
pathParams: [],
|
|
1824
|
+
title: "Get organization false positive rate by asset type",
|
|
1825
|
+
description: "Get the share of blocks that were later reversed, broken down by asset type, for a date range. Every asset type blocked in the range is returned, including ones with no false positives. The range bounds when the asset was blocked; whether the block still stands is read as of now, so a recent range reads low simply because its reversals have not happened yet.",
|
|
1826
|
+
tags: [
|
|
1827
|
+
"metrics"
|
|
1828
|
+
],
|
|
1829
|
+
readOnly: true,
|
|
1830
|
+
deprecated: false,
|
|
1831
|
+
inputSchema: {
|
|
1832
|
+
type: "object",
|
|
1833
|
+
properties: {
|
|
1834
|
+
slug: {
|
|
1835
|
+
type: "string",
|
|
1836
|
+
minLength: 1,
|
|
1837
|
+
description: "Organization slug"
|
|
1838
|
+
},
|
|
1839
|
+
startDate: {
|
|
1840
|
+
type: "string",
|
|
1841
|
+
format: "date-time",
|
|
1842
|
+
description: "Only include assets blocked on or after this date. A date-only value (YYYY-MM-DD) starts at midnight UTC"
|
|
1843
|
+
},
|
|
1844
|
+
endDate: {
|
|
1845
|
+
type: "string",
|
|
1846
|
+
format: "date-time",
|
|
1847
|
+
description: "Only include assets blocked on or before this date. A date-only value (YYYY-MM-DD) covers the whole day in UTC; pass a full timestamp for a precise cut-off"
|
|
1848
|
+
},
|
|
1849
|
+
brandIds: {
|
|
1850
|
+
type: "array",
|
|
1851
|
+
items: {
|
|
1852
|
+
type: "integer",
|
|
1853
|
+
exclusiveMinimum: 0
|
|
1854
|
+
},
|
|
1855
|
+
description: "Only include assets belonging to these brands"
|
|
1856
|
+
},
|
|
1857
|
+
countryCodes: {
|
|
1858
|
+
type: "array",
|
|
1859
|
+
items: {
|
|
1860
|
+
type: "string",
|
|
1861
|
+
minLength: 2,
|
|
1862
|
+
maxLength: 2
|
|
1863
|
+
},
|
|
1864
|
+
description: "Only include assets scanned from these ISO 3166-1 alpha-2 countries"
|
|
1865
|
+
}
|
|
1866
|
+
},
|
|
1867
|
+
required: [
|
|
1868
|
+
"slug"
|
|
1869
|
+
]
|
|
1870
|
+
}
|
|
1871
|
+
},
|
|
1817
1872
|
{
|
|
1818
1873
|
name: "metrics_found",
|
|
1819
1874
|
procedure: "metricsFound",
|
|
@@ -2190,7 +2245,7 @@ var tools_default = {
|
|
|
2190
2245
|
type: "array",
|
|
2191
2246
|
items: {
|
|
2192
2247
|
type: "string",
|
|
2193
|
-
description: "One of
|
|
2248
|
+
description: "One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type"
|
|
2194
2249
|
},
|
|
2195
2250
|
maxItems: 5,
|
|
2196
2251
|
description: "Break the trend down by these asset types, one series each. Omit for a single series pooled across every asset type"
|
|
@@ -2484,7 +2539,7 @@ var tools_default = {
|
|
|
2484
2539
|
},
|
|
2485
2540
|
type: {
|
|
2486
2541
|
type: "string",
|
|
2487
|
-
description: "Filter by asset type (URL, ADDRESS, etc.) One of
|
|
2542
|
+
description: "Filter by asset type (URL, ADDRESS, etc.) One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type"
|
|
2488
2543
|
},
|
|
2489
2544
|
groupId: {
|
|
2490
2545
|
type: "integer",
|
|
@@ -3002,6 +3057,10 @@ var tools_default = {
|
|
|
3002
3057
|
reportedByCustomer: {
|
|
3003
3058
|
type: "boolean"
|
|
3004
3059
|
},
|
|
3060
|
+
hasAttachments: {
|
|
3061
|
+
type: "boolean",
|
|
3062
|
+
description: "Filter on evidence files uploaded with the report. `true` returns only reports with at least one attachment that has not been removed; `false` returns only reports with none."
|
|
3063
|
+
},
|
|
3005
3064
|
needsCustomerReview: {
|
|
3006
3065
|
type: "boolean",
|
|
3007
3066
|
description: "Filter to reports waiting on your organization's own approval \u2014 the same queue your Review page shows. `true` returns only reports with at least one pending proposal that is yours to action; `false` returns only reports that are not. A pending proposal counts when ChainPatrol staff escalated it to you and you have not answered yet. Answering means approving, rejecting, or escalating it back to ChainPatrol. Two things do not put a report here: reports your organization sourced itself (ChainPatrol triages those and staff approval blocks the asset without you, though you still see them in the unfiltered list), and Obligatory Organization Admin Approval (a proposal ChainPatrol has not triaged yet is still waiting on our review, and reaches you only once staff escalate it)."
|
|
@@ -3023,7 +3082,7 @@ var tools_default = {
|
|
|
3023
3082
|
type: "array",
|
|
3024
3083
|
items: {
|
|
3025
3084
|
type: "string",
|
|
3026
|
-
description: "One of
|
|
3085
|
+
description: "One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type"
|
|
3027
3086
|
}
|
|
3028
3087
|
},
|
|
3029
3088
|
brandIds: {
|
|
@@ -3166,7 +3225,7 @@ var tools_default = {
|
|
|
3166
3225
|
properties: {
|
|
3167
3226
|
type: {
|
|
3168
3227
|
type: "string",
|
|
3169
|
-
description: "Enrichment type One of
|
|
3228
|
+
description: "Enrichment type One of 45 values, e.g. content_and_metadata, browser_capture, ownership_and_registration, geolocation_and_ip, dns, tls, tcp, hostname_first_seen. Full list: resource chainpatrol://enums/asset_scan_enrichment_type"
|
|
3170
3229
|
},
|
|
3171
3230
|
source: {
|
|
3172
3231
|
type: "string",
|
|
@@ -3337,7 +3396,7 @@ var tools_default = {
|
|
|
3337
3396
|
type: "array",
|
|
3338
3397
|
items: {
|
|
3339
3398
|
type: "string",
|
|
3340
|
-
description: "One of
|
|
3399
|
+
description: "One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type"
|
|
3341
3400
|
},
|
|
3342
3401
|
description: "Filter by asset types"
|
|
3343
3402
|
},
|
|
@@ -3497,7 +3556,7 @@ var tools_default = {
|
|
|
3497
3556
|
type: "array",
|
|
3498
3557
|
items: {
|
|
3499
3558
|
type: "string",
|
|
3500
|
-
description: "One of
|
|
3559
|
+
description: "One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type"
|
|
3501
3560
|
},
|
|
3502
3561
|
description: "Filter by asset types"
|
|
3503
3562
|
},
|
|
@@ -3753,7 +3812,7 @@ var tools_default = {
|
|
|
3753
3812
|
type: "array",
|
|
3754
3813
|
items: {
|
|
3755
3814
|
type: "string",
|
|
3756
|
-
description: "One of
|
|
3815
|
+
description: "One of 94 values, e.g. URL, PAGE, ADDRESS, DISCORD, LINKEDIN, TWITTER, FACEBOOK, YOUTUBE. Full list: resource chainpatrol://enums/asset_type"
|
|
3757
3816
|
},
|
|
3758
3817
|
minItems: 1
|
|
3759
3818
|
}
|
|
@@ -3960,6 +4019,7 @@ var tools_default = {
|
|
|
3960
4019
|
"dns",
|
|
3961
4020
|
"tls",
|
|
3962
4021
|
"tcp",
|
|
4022
|
+
"hostname_first_seen",
|
|
3963
4023
|
"post",
|
|
3964
4024
|
"profile",
|
|
3965
4025
|
"twitter_followers",
|
|
@@ -3985,12 +4045,17 @@ var tools_default = {
|
|
|
3985
4045
|
"vimeo_profile",
|
|
3986
4046
|
"stackblitz_page",
|
|
3987
4047
|
"leetcode_page",
|
|
4048
|
+
"tumblr_blog",
|
|
4049
|
+
"tumblr_post",
|
|
4050
|
+
"tumblr_community",
|
|
3988
4051
|
"npm_package",
|
|
3989
4052
|
"pypi_package",
|
|
3990
4053
|
"rust_package",
|
|
3991
4054
|
"linkedin_profile",
|
|
4055
|
+
"pump_fun_token",
|
|
3992
4056
|
"meta_ad",
|
|
3993
4057
|
"google_ad",
|
|
4058
|
+
"adlibrary_ad",
|
|
3994
4059
|
"contract_deployer"
|
|
3995
4060
|
],
|
|
3996
4061
|
usedBy: [
|
|
@@ -4091,7 +4156,9 @@ var tools_default = {
|
|
|
4091
4156
|
"FIVE_HUNDRED_PX",
|
|
4092
4157
|
"LUMA",
|
|
4093
4158
|
"SMARTMONEYMATCH",
|
|
4094
|
-
"APK_GOLD"
|
|
4159
|
+
"APK_GOLD",
|
|
4160
|
+
"GLASSDOOR",
|
|
4161
|
+
"PUMP_FUN"
|
|
4095
4162
|
],
|
|
4096
4163
|
usedBy: [
|
|
4097
4164
|
"asset_changelog.type",
|
|
@@ -4116,6 +4183,7 @@ var tools_default = {
|
|
|
4116
4183
|
"telegram_user_search_vetric",
|
|
4117
4184
|
"facebook_page_search_vetric",
|
|
4118
4185
|
"facebook_user_search_vetric",
|
|
4186
|
+
"facebook_post_search_vetric",
|
|
4119
4187
|
"instagram_account_search_vetric",
|
|
4120
4188
|
"twitter_search_vetric",
|
|
4121
4189
|
"linkedin_people_search_vetric",
|
|
@@ -4161,9 +4229,11 @@ var tools_default = {
|
|
|
4161
4229
|
"linkedin_company_search",
|
|
4162
4230
|
"bing_ads_search",
|
|
4163
4231
|
"tik_tok_ads_search",
|
|
4232
|
+
"adlibrary_ads_search",
|
|
4164
4233
|
"dnsdb",
|
|
4165
4234
|
"daily_motion_search",
|
|
4166
|
-
"watchlist"
|
|
4235
|
+
"watchlist",
|
|
4236
|
+
"github_search"
|
|
4167
4237
|
],
|
|
4168
4238
|
usedBy: [
|
|
4169
4239
|
"detection_configs_create.source",
|
|
@@ -4221,6 +4291,17 @@ function toErrorResult(error) {
|
|
|
4221
4291
|
content: [{ type: "text", text: message }]
|
|
4222
4292
|
};
|
|
4223
4293
|
}
|
|
4294
|
+
var RESOURCE_HINT = "Where a parameter's description points at a `chainpatrol://` resource, read it before guessing a value.";
|
|
4295
|
+
function buildInstructions(tools, isNarrowed) {
|
|
4296
|
+
if (!isNarrowed) {
|
|
4297
|
+
return "ChainPatrol threat intelligence and brand protection. Every public API capability is available here as a tool: checking and searching assets, reports, proposals, detections, takedowns, metrics, healthchecks and organization management.\n\nMost tools are scoped to one organization. Credentials can reach more than one, and there is no implicit default, so call `user_orgs` first and pass the slug explicitly.\n\n" + RESOURCE_HINT;
|
|
4298
|
+
}
|
|
4299
|
+
const names = tools.map((tool) => tool.name).sort().join(", ");
|
|
4300
|
+
const orgScoping = tools.some((tool) => tool.name === "user_orgs") ? "Most tools are scoped to one organization. Credentials can reach more than one, and there is no implicit default, so call `user_orgs` first and pass the slug explicitly.\n\n" : "These tools resolve their organization from the credential in use \u2014 there is no org slug to pass.\n\n";
|
|
4301
|
+
return `ChainPatrol threat intelligence. This server exposes a narrowed set of tools: ${names}.
|
|
4302
|
+
|
|
4303
|
+
${orgScoping}${RESOURCE_HINT}`;
|
|
4304
|
+
}
|
|
4224
4305
|
function createChainPatrolMcpServer(options) {
|
|
4225
4306
|
const tools = selectTools(options.only);
|
|
4226
4307
|
const resources = buildResources(manifest, tools);
|
|
@@ -4229,6 +4310,7 @@ function createChainPatrolMcpServer(options) {
|
|
|
4229
4310
|
tools.map((tool) => tool.name)
|
|
4230
4311
|
);
|
|
4231
4312
|
const byName = new Map(tools.map((tool) => [tool.name, tool]));
|
|
4313
|
+
const isNarrowed = Boolean(options.only && options.only.length > 0);
|
|
4232
4314
|
const server = new Server(
|
|
4233
4315
|
{
|
|
4234
4316
|
name: options.serverName ?? "chainpatrol",
|
|
@@ -4236,7 +4318,7 @@ function createChainPatrolMcpServer(options) {
|
|
|
4236
4318
|
},
|
|
4237
4319
|
{
|
|
4238
4320
|
capabilities: { tools: {}, resources: {}, prompts: {} },
|
|
4239
|
-
instructions:
|
|
4321
|
+
instructions: buildInstructions(tools, isNarrowed)
|
|
4240
4322
|
}
|
|
4241
4323
|
);
|
|
4242
4324
|
server.setRequestHandler(ListToolsRequestSchema, () => ({
|
|
@@ -4449,8 +4531,73 @@ function toolsFromEnvironment(env = process.env) {
|
|
|
4449
4531
|
return names.length > 0 ? names : void 0;
|
|
4450
4532
|
}
|
|
4451
4533
|
|
|
4534
|
+
// package.json
|
|
4535
|
+
var package_default = {
|
|
4536
|
+
name: "@chainpatrol/mcp",
|
|
4537
|
+
description: "The official ChainPatrol MCP server \u2014 every public API capability as an MCP tool",
|
|
4538
|
+
author: "ChainPatrol <support@chainpatrol.io>",
|
|
4539
|
+
version: "1.11.0",
|
|
4540
|
+
license: "UNLICENSED",
|
|
4541
|
+
homepage: "https://chainpatrol.com/docs/mcp",
|
|
4542
|
+
keywords: [
|
|
4543
|
+
"chainpatrol",
|
|
4544
|
+
"mcp",
|
|
4545
|
+
"model-context-protocol",
|
|
4546
|
+
"agent"
|
|
4547
|
+
],
|
|
4548
|
+
type: "module",
|
|
4549
|
+
exports: {
|
|
4550
|
+
".": {
|
|
4551
|
+
types: "./dist/index.d.ts",
|
|
4552
|
+
import: "./dist/index.js"
|
|
4553
|
+
},
|
|
4554
|
+
"./config": {
|
|
4555
|
+
types: "./dist/chainpatrol-config.d.ts",
|
|
4556
|
+
import: "./dist/chainpatrol-config.js"
|
|
4557
|
+
}
|
|
4558
|
+
},
|
|
4559
|
+
bin: {
|
|
4560
|
+
"chainpatrol-mcp": "./dist/stdio-bin.js"
|
|
4561
|
+
},
|
|
4562
|
+
files: [
|
|
4563
|
+
"./dist/**"
|
|
4564
|
+
],
|
|
4565
|
+
publishConfig: {
|
|
4566
|
+
access: "public",
|
|
4567
|
+
provenance: false
|
|
4568
|
+
},
|
|
4569
|
+
scripts: {
|
|
4570
|
+
build: "tsup",
|
|
4571
|
+
dev: "tsup --watch",
|
|
4572
|
+
"tools:generate": "tsx scripts/generate-tools.ts",
|
|
4573
|
+
"tools:check": "tsx scripts/generate-tools.ts --check",
|
|
4574
|
+
typecheck: "tsc --noEmit",
|
|
4575
|
+
test: "vitest run --config vitest.config.unit.ts",
|
|
4576
|
+
"lint:eslint": "eslint . --flag unstable_native_nodejs_ts_config --cache --cache-location .cache/.eslintcache",
|
|
4577
|
+
lint: "npx oxlint ."
|
|
4578
|
+
},
|
|
4579
|
+
dependencies: {
|
|
4580
|
+
"@modelcontextprotocol/sdk": "catalog:",
|
|
4581
|
+
luxon: "catalog:",
|
|
4582
|
+
zod: "catalog:"
|
|
4583
|
+
},
|
|
4584
|
+
devDependencies: {
|
|
4585
|
+
"@chainpatrol/eslint-config": "workspace:*",
|
|
4586
|
+
"@chainpatrol/external-trpc": "workspace:*",
|
|
4587
|
+
"@chainpatrol/tsconfig": "workspace:*",
|
|
4588
|
+
"@types/luxon": "catalog:",
|
|
4589
|
+
"@types/node": "catalog:",
|
|
4590
|
+
eslint: "catalog:",
|
|
4591
|
+
tsup: "^8.5.0",
|
|
4592
|
+
tsx: "catalog:",
|
|
4593
|
+
typescript: "catalog:",
|
|
4594
|
+
vitest: "catalog:",
|
|
4595
|
+
"zod-to-json-schema": "^3.24.5"
|
|
4596
|
+
}
|
|
4597
|
+
};
|
|
4598
|
+
|
|
4452
4599
|
// src/version.ts
|
|
4453
|
-
var PACKAGE_VERSION =
|
|
4600
|
+
var PACKAGE_VERSION = package_default.version;
|
|
4454
4601
|
|
|
4455
4602
|
export {
|
|
4456
4603
|
PROMPTS,
|
|
@@ -4466,4 +4613,4 @@ export {
|
|
|
4466
4613
|
toolsFromEnvironment,
|
|
4467
4614
|
PACKAGE_VERSION
|
|
4468
4615
|
};
|
|
4469
|
-
//# sourceMappingURL=chunk-
|
|
4616
|
+
//# sourceMappingURL=chunk-7U4RIDQZ.js.map
|