mcp-xray-pilot 0.10.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 (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +502 -0
  3. package/data/docs/_index.json +533 -0
  4. package/data/docs/basic__api.md +148 -0
  5. package/data/docs/basic__dns.md +366 -0
  6. package/data/docs/basic__fakedns.md +202 -0
  7. package/data/docs/basic__geodata.md +64 -0
  8. package/data/docs/basic__inbound.md +159 -0
  9. package/data/docs/basic__index.md +136 -0
  10. package/data/docs/basic__log.md +67 -0
  11. package/data/docs/basic__metrics.md +262 -0
  12. package/data/docs/basic__observatory.md +115 -0
  13. package/data/docs/basic__outbound.md +164 -0
  14. package/data/docs/basic__policy.md +140 -0
  15. package/data/docs/basic__reverse.md +268 -0
  16. package/data/docs/basic__routing.md +474 -0
  17. package/data/docs/basic__stats.md +61 -0
  18. package/data/docs/basic__transport.md +1283 -0
  19. package/data/docs/features__features_browser_dialer.md +61 -0
  20. package/data/docs/features__features_env.md +66 -0
  21. package/data/docs/features__features_fallback.md +110 -0
  22. package/data/docs/features__features_index.md +17 -0
  23. package/data/docs/features__features_multiple.md +144 -0
  24. package/data/docs/features__features_xtls.md +13 -0
  25. package/data/docs/inbounds__inbounds_dokodemo.md +11 -0
  26. package/data/docs/inbounds__inbounds_http.md +80 -0
  27. package/data/docs/inbounds__inbounds_hysteria.md +60 -0
  28. package/data/docs/inbounds__inbounds_index.md +22 -0
  29. package/data/docs/inbounds__inbounds_shadowsocks.md +118 -0
  30. package/data/docs/inbounds__inbounds_socks.md +87 -0
  31. package/data/docs/inbounds__inbounds_trojan.md +78 -0
  32. package/data/docs/inbounds__inbounds_tun.md +47 -0
  33. package/data/docs/inbounds__inbounds_tunnel.md +86 -0
  34. package/data/docs/inbounds__inbounds_vless.md +135 -0
  35. package/data/docs/inbounds__inbounds_vmess.md +95 -0
  36. package/data/docs/inbounds__inbounds_wireguard.md +78 -0
  37. package/data/docs/outbounds__outbounds_blackhole.md +42 -0
  38. package/data/docs/outbounds__outbounds_dns.md +97 -0
  39. package/data/docs/outbounds__outbounds_freedom.md +170 -0
  40. package/data/docs/outbounds__outbounds_http.md +70 -0
  41. package/data/docs/outbounds__outbounds_hysteria.md +39 -0
  42. package/data/docs/outbounds__outbounds_index.md +24 -0
  43. package/data/docs/outbounds__outbounds_loopback.md +65 -0
  44. package/data/docs/outbounds__outbounds_shadowsocks.md +105 -0
  45. package/data/docs/outbounds__outbounds_socks.md +58 -0
  46. package/data/docs/outbounds__outbounds_trojan.md +49 -0
  47. package/data/docs/outbounds__outbounds_vless.md +122 -0
  48. package/data/docs/outbounds__outbounds_vmess.md +76 -0
  49. package/data/docs/outbounds__outbounds_wireguard.md +141 -0
  50. package/data/docs/transports__transports_grpc.md +137 -0
  51. package/data/docs/transports__transports_h2.md +11 -0
  52. package/data/docs/transports__transports_http.md +11 -0
  53. package/data/docs/transports__transports_httpupgrade.md +61 -0
  54. package/data/docs/transports__transports_hysteria.md +110 -0
  55. package/data/docs/transports__transports_index.md +19 -0
  56. package/data/docs/transports__transports_mkcp.md +125 -0
  57. package/data/docs/transports__transports_quic.md +11 -0
  58. package/data/docs/transports__transports_raw.md +156 -0
  59. package/data/docs/transports__transports_splithttp.md +11 -0
  60. package/data/docs/transports__transports_tcp.md +11 -0
  61. package/data/docs/transports__transports_websocket.md +75 -0
  62. package/data/docs/transports__transports_xhttp.md +11 -0
  63. package/dist/data/compatibility.js +170 -0
  64. package/dist/data/compatibility.js.map +1 -0
  65. package/dist/data/geocatalogue.js +191 -0
  66. package/dist/data/geocatalogue.js.map +1 -0
  67. package/dist/docs.js +339 -0
  68. package/dist/docs.js.map +1 -0
  69. package/dist/handlers.js +217 -0
  70. package/dist/handlers.js.map +1 -0
  71. package/dist/index.js +66 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/lint.js +737 -0
  74. package/dist/lint.js.map +1 -0
  75. package/dist/schemas/protocols/blackhole.js +16 -0
  76. package/dist/schemas/protocols/blackhole.js.map +1 -0
  77. package/dist/schemas/protocols/common.js +32 -0
  78. package/dist/schemas/protocols/common.js.map +1 -0
  79. package/dist/schemas/protocols/dns.js +14 -0
  80. package/dist/schemas/protocols/dns.js.map +1 -0
  81. package/dist/schemas/protocols/dokodemo.js +17 -0
  82. package/dist/schemas/protocols/dokodemo.js.map +1 -0
  83. package/dist/schemas/protocols/freedom.js +45 -0
  84. package/dist/schemas/protocols/freedom.js.map +1 -0
  85. package/dist/schemas/protocols/http.js +38 -0
  86. package/dist/schemas/protocols/http.js.map +1 -0
  87. package/dist/schemas/protocols/hysteria.js +51 -0
  88. package/dist/schemas/protocols/hysteria.js.map +1 -0
  89. package/dist/schemas/protocols/index.js +50 -0
  90. package/dist/schemas/protocols/index.js.map +1 -0
  91. package/dist/schemas/protocols/loopback.js +11 -0
  92. package/dist/schemas/protocols/loopback.js.map +1 -0
  93. package/dist/schemas/protocols/shadowsocks.js +60 -0
  94. package/dist/schemas/protocols/shadowsocks.js.map +1 -0
  95. package/dist/schemas/protocols/socks.js +42 -0
  96. package/dist/schemas/protocols/socks.js.map +1 -0
  97. package/dist/schemas/protocols/trojan.js +34 -0
  98. package/dist/schemas/protocols/trojan.js.map +1 -0
  99. package/dist/schemas/protocols/tun.js +19 -0
  100. package/dist/schemas/protocols/tun.js.map +1 -0
  101. package/dist/schemas/protocols/vless.js +44 -0
  102. package/dist/schemas/protocols/vless.js.map +1 -0
  103. package/dist/schemas/protocols/vmess.js +48 -0
  104. package/dist/schemas/protocols/vmess.js.map +1 -0
  105. package/dist/schemas/protocols/wireguard.js +34 -0
  106. package/dist/schemas/protocols/wireguard.js.map +1 -0
  107. package/dist/schemas/security/index.js +16 -0
  108. package/dist/schemas/security/index.js.map +1 -0
  109. package/dist/schemas/security/reality.js +35 -0
  110. package/dist/schemas/security/reality.js.map +1 -0
  111. package/dist/schemas/security/tls.js +46 -0
  112. package/dist/schemas/security/tls.js.map +1 -0
  113. package/dist/schemas/security/xtls.js +17 -0
  114. package/dist/schemas/security/xtls.js.map +1 -0
  115. package/dist/schemas/transports/grpc.js +18 -0
  116. package/dist/schemas/transports/grpc.js.map +1 -0
  117. package/dist/schemas/transports/httpupgrade.js +14 -0
  118. package/dist/schemas/transports/httpupgrade.js.map +1 -0
  119. package/dist/schemas/transports/hysteria.js +25 -0
  120. package/dist/schemas/transports/hysteria.js.map +1 -0
  121. package/dist/schemas/transports/index.js +32 -0
  122. package/dist/schemas/transports/index.js.map +1 -0
  123. package/dist/schemas/transports/mkcp.js +34 -0
  124. package/dist/schemas/transports/mkcp.js.map +1 -0
  125. package/dist/schemas/transports/raw.js +19 -0
  126. package/dist/schemas/transports/raw.js.map +1 -0
  127. package/dist/schemas/transports/websocket.js +15 -0
  128. package/dist/schemas/transports/websocket.js.map +1 -0
  129. package/dist/schemas/transports/xhttp.js +34 -0
  130. package/dist/schemas/transports/xhttp.js.map +1 -0
  131. package/dist/search.js +78 -0
  132. package/dist/search.js.map +1 -0
  133. package/dist/state.js +87 -0
  134. package/dist/state.js.map +1 -0
  135. package/dist/tools.js +274 -0
  136. package/dist/tools.js.map +1 -0
  137. package/dist/tools_impl/diff.js +55 -0
  138. package/dist/tools_impl/diff.js.map +1 -0
  139. package/dist/tools_impl/github.js +416 -0
  140. package/dist/tools_impl/github.js.map +1 -0
  141. package/dist/tools_impl/merge.js +181 -0
  142. package/dist/tools_impl/merge.js.map +1 -0
  143. package/dist/tools_impl/refresh.js +46 -0
  144. package/dist/tools_impl/refresh.js.map +1 -0
  145. package/dist/tools_impl/suggest.js +169 -0
  146. package/dist/tools_impl/suggest.js.map +1 -0
  147. package/dist/types.js +10 -0
  148. package/dist/types.js.map +1 -0
  149. package/dist/utils.js +81 -0
  150. package/dist/utils.js.map +1 -0
  151. package/dist/validate.js +408 -0
  152. package/dist/validate.js.map +1 -0
  153. package/package.json +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
package/dist/tools.js ADDED
@@ -0,0 +1,274 @@
1
+ /*
2
+ * MCP tool schemas. Pure data — descriptions are tuned for LLM tool selection.
3
+ */
4
+ export const TOOL_SCHEMAS = [
5
+ {
6
+ name: "xray_list_topics",
7
+ description: "List all available xray-core documentation topics, grouped by category. " +
8
+ "Use this first to discover what slugs exist before calling xray_fetch_topic.",
9
+ inputSchema: {
10
+ type: "object",
11
+ properties: {
12
+ category: {
13
+ type: "string",
14
+ enum: ["basic", "features", "inbounds", "outbounds", "transports", "all"],
15
+ default: "all",
16
+ description: "Filter by category. 'all' returns every topic.",
17
+ },
18
+ },
19
+ },
20
+ },
21
+ {
22
+ name: "xray_fetch_topic",
23
+ description: "Fetch a specific xray docs page as markdown. Tries XTLS/Xray-docs-next on " +
24
+ "github raw first; on success the response also overwrites the packaged " +
25
+ "offline cache. If the network fails (offline, blocked, timeout), falls back " +
26
+ "to the bundled offline copy and sets a `warning` field. Use force_offline=true " +
27
+ "to skip the network entirely.",
28
+ inputSchema: {
29
+ type: "object",
30
+ properties: {
31
+ slug: {
32
+ type: "string",
33
+ description: 'Topic slug, e.g. "transports/xhttp", "inbounds/vless", "routing".',
34
+ },
35
+ force_offline: {
36
+ type: "boolean",
37
+ default: false,
38
+ description: "If true, skip the network and read straight from the bundled cache.",
39
+ },
40
+ },
41
+ required: ["slug"],
42
+ },
43
+ },
44
+ {
45
+ name: "xray_search",
46
+ description: "Full-text search across all cached xray docs. Returns matched topics with " +
47
+ "a relevance score and a ~240-char snippet around the best match.",
48
+ inputSchema: {
49
+ type: "object",
50
+ properties: {
51
+ query: { type: "string", description: "Search query." },
52
+ max_results: { type: "number", default: 10, minimum: 1, maximum: 50 },
53
+ },
54
+ required: ["query"],
55
+ },
56
+ },
57
+ {
58
+ name: "xray_validate_config",
59
+ description: "Parse and structurally validate an xray JSON config. Checks: valid JSON, " +
60
+ "required top-level fields, known protocols, per-protocol settings shape via " +
61
+ "Zod schemas (vless/vmess/trojan/ss/socks/http/wireguard/hysteria/freedom/...), " +
62
+ "transport-specific *Settings shape (raw/xhttp/grpc/ws/mkcp/httpupgrade), " +
63
+ "security blocks (tls/reality), routing tag references. Returns issues with " +
64
+ "severity (error/warn/info) and JSON-pointer paths.",
65
+ inputSchema: {
66
+ type: "object",
67
+ properties: {
68
+ config: {
69
+ type: "string",
70
+ description: "JSON string of the xray config.",
71
+ },
72
+ },
73
+ required: ["config"],
74
+ },
75
+ },
76
+ {
77
+ name: "xray_lint",
78
+ description: "Run best-practice lint on an xray config. Covers things validation doesn't " +
79
+ "catch: VLESS decryption mode, REALITY pubkey/shortId/target syntax, XTLS " +
80
+ "vision flow compatibility, TLS fingerprint enum, ALPN collisions, geosite/" +
81
+ "geoip catalogue check, protocol×transport×security compatibility matrix, " +
82
+ "private LAN block rule, sniffing on 80/443, etc. ~20 rules in v0.6.",
83
+ inputSchema: {
84
+ type: "object",
85
+ properties: {
86
+ config: { type: "string", description: "JSON string of the xray config." },
87
+ },
88
+ required: ["config"],
89
+ },
90
+ },
91
+ {
92
+ name: "xray_geo_search",
93
+ description: "Search the bundled geosite/geoip catalogue for a category by substring. " +
94
+ "Use to typo-check or discover the right tag (geoip:ru, geosite:youtube, …) " +
95
+ "before adding it to routing.rules.",
96
+ inputSchema: {
97
+ type: "object",
98
+ properties: {
99
+ query: { type: "string", description: "Substring to search for, case-insensitive." },
100
+ max_results: { type: "number", default: 30, minimum: 1, maximum: 100 },
101
+ },
102
+ required: ["query"],
103
+ },
104
+ },
105
+ {
106
+ name: "xray_diff_protocols",
107
+ description: "Side-by-side comparison of two xray protocols (vless/vmess/trojan/" +
108
+ "shadowsocks/hysteria2/wireguard) on transports, security, anti-DPI, " +
109
+ "mobile friendliness, battery, ease. Returns a table-shaped JSON.",
110
+ inputSchema: {
111
+ type: "object",
112
+ properties: {
113
+ a: { type: "string", description: "First protocol name." },
114
+ b: { type: "string", description: "Second protocol name." },
115
+ },
116
+ required: ["a", "b"],
117
+ },
118
+ },
119
+ {
120
+ name: "xray_suggest_alternative",
121
+ description: "Recommend a protocol+transport+security stack for a goal. Goals include " +
122
+ "anti-dpi-russia, anti-dpi-iran, anti-dpi-china, low-latency, mobile-battery, " +
123
+ "high-throughput, stealth-cdn, simple-getting-started. Optionally pass " +
124
+ "current_config to also get a list of issues with what you have today.",
125
+ inputSchema: {
126
+ type: "object",
127
+ properties: {
128
+ goal: {
129
+ type: "string",
130
+ enum: [
131
+ "anti-dpi-russia",
132
+ "anti-dpi-iran",
133
+ "anti-dpi-china",
134
+ "low-latency",
135
+ "mobile-battery",
136
+ "high-throughput",
137
+ "stealth-cdn",
138
+ "simple-getting-started",
139
+ ],
140
+ },
141
+ current_config: {
142
+ type: "string",
143
+ description: "Optional JSON string of an existing config to lint alongside.",
144
+ },
145
+ },
146
+ required: ["goal"],
147
+ },
148
+ },
149
+ {
150
+ name: "xray_github_search",
151
+ description: "Search GitHub issues, pull requests and discussions across XTLS repositories " +
152
+ "(Xray-core, REALITY, Xray-docs-next). Returns matched items with title, number, " +
153
+ "state, updated date, URL, and a short body snippet. Useful for finding " +
154
+ "state-of-the-art bypass techniques, RKN/TSPU/DPI discussions, protocol " +
155
+ "comparisons, bug reports. Discussions require GITHUB_TOKEN env var; " +
156
+ "issues/PRs work anonymously but with a 60/h rate limit.",
157
+ inputSchema: {
158
+ type: "object",
159
+ properties: {
160
+ query: { type: "string", description: 'Free-text search query, e.g. "REALITY blocked Russia".' },
161
+ repo: {
162
+ type: "string",
163
+ enum: ["xray-core", "reality", "xray-docs-next", "all"],
164
+ default: "xray-core",
165
+ description: "Which XTLS repo to search. 'all' fans out across all three.",
166
+ },
167
+ state: {
168
+ type: "string",
169
+ enum: ["open", "closed", "all"],
170
+ default: "all",
171
+ },
172
+ type: {
173
+ type: "string",
174
+ enum: ["issue", "pr", "discussion", "all"],
175
+ default: "all",
176
+ description: "Filter by item type. 'discussion' uses GraphQL and needs GITHUB_TOKEN.",
177
+ },
178
+ sort: {
179
+ type: "string",
180
+ enum: ["updated", "created", "reactions", "comments"],
181
+ default: "updated",
182
+ },
183
+ order: { type: "string", enum: ["desc", "asc"], default: "desc" },
184
+ max_results: { type: "number", default: 10, minimum: 1, maximum: 50 },
185
+ },
186
+ required: ["query"],
187
+ },
188
+ },
189
+ {
190
+ name: "xray_github_fetch_issue",
191
+ description: "Fetch a specific GitHub issue, pull request or discussion from an XTLS repo " +
192
+ "with its full body and top comments. Use after xray_github_search points you " +
193
+ "at something interesting and you need full context.",
194
+ inputSchema: {
195
+ type: "object",
196
+ properties: {
197
+ repo: {
198
+ type: "string",
199
+ enum: ["xray-core", "reality", "xray-docs-next"],
200
+ default: "xray-core",
201
+ },
202
+ number: { type: "number", description: "Issue/PR/discussion number." },
203
+ type: {
204
+ type: "string",
205
+ enum: ["issue", "pr", "discussion"],
206
+ default: "issue",
207
+ description: "PR uses the same REST endpoint as issue in GitHub API. Discussion uses GraphQL and needs GITHUB_TOKEN.",
208
+ },
209
+ max_comments: {
210
+ type: "number",
211
+ default: 10,
212
+ minimum: 0,
213
+ maximum: 50,
214
+ description: "How many comments to include. 0 = none.",
215
+ },
216
+ },
217
+ required: ["number"],
218
+ },
219
+ },
220
+ {
221
+ name: "xray_refresh_cache",
222
+ description: "Re-fetch xray docs cache from XTLS/Xray-docs-next on github. Use to " +
223
+ "actualize docs when upstream changed (e.g. new transport added, page " +
224
+ "rewritten). Returns per-topic status and updated count.",
225
+ inputSchema: {
226
+ type: "object",
227
+ properties: {
228
+ scope: {
229
+ type: "string",
230
+ enum: ["all", "stale", "category"],
231
+ default: "stale",
232
+ description: "'all' = refetch every page (~60). 'stale' = only entries older than max_age_days. 'category' = restrict to one category (requires `category`).",
233
+ },
234
+ category: {
235
+ type: "string",
236
+ enum: ["basic", "features", "inbounds", "outbounds", "transports"],
237
+ description: "Required when scope=category.",
238
+ },
239
+ max_age_days: {
240
+ type: "number",
241
+ minimum: 1,
242
+ maximum: 365,
243
+ default: 30,
244
+ description: "For scope=stale: refetch entries older than this.",
245
+ },
246
+ discover: {
247
+ type: "boolean",
248
+ default: false,
249
+ description: "Also call the github tree API and return slugs that exist upstream but are not in DOCS_CATALOGUE (for manual addition to src/docs.ts).",
250
+ },
251
+ },
252
+ },
253
+ },
254
+ {
255
+ name: "xray_merge_configs",
256
+ description: "Merge two or more xray JSON configs. Concatenates inbounds/outbounds/" +
257
+ "routing.rules/dns.servers, auto-renames colliding tags with a -2/-3 suffix " +
258
+ "and warns. Singleton blocks (log, policy, api, …) keep the first occurrence " +
259
+ "and warn on disagreement. Returns merged JSON + list of warnings.",
260
+ inputSchema: {
261
+ type: "object",
262
+ properties: {
263
+ configs: {
264
+ type: "array",
265
+ items: { type: "string" },
266
+ minItems: 2,
267
+ description: "Array of xray config JSON strings.",
268
+ },
269
+ },
270
+ required: ["configs"],
271
+ },
272
+ },
273
+ ];
274
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /*
2
+ * xray_diff_protocols — side-by-side comparison of two protocols.
3
+ *
4
+ * Output is plain JSON the agent can render as a table. No markdown formatting
5
+ * here so callers can pretty-print however they like.
6
+ */
7
+ import { matrix, protocolFeatures } from "../data/compatibility.js";
8
+ const featureOrder = [
9
+ { key: "transports", label: "Transports" },
10
+ { key: "security", label: "Security" },
11
+ { key: "multiplexing", label: "Multiplexing (xmux/grpc)" },
12
+ { key: "padding", label: "Built-in padding" },
13
+ { key: "antiDpi", label: "Anti-DPI rating (1-5)" },
14
+ { key: "mobileFriendly", label: "Mobile friendliness (1-5)" },
15
+ { key: "battery", label: "Battery score (1-5, higher=better)" },
16
+ { key: "ease", label: "Ease of setup (1-5)" },
17
+ { key: "notes", label: "Notes" },
18
+ ];
19
+ function fmt(v) {
20
+ if (Array.isArray(v))
21
+ return v.join(", ");
22
+ if (typeof v === "string" || typeof v === "number" || typeof v === "boolean")
23
+ return v;
24
+ return String(v);
25
+ }
26
+ export function diffProtocols(a, b) {
27
+ const fa = protocolFeatures[a];
28
+ const fb = protocolFeatures[b];
29
+ if (!fa)
30
+ throw new Error(`unknown protocol "${a}"; known: ${Object.keys(protocolFeatures).join(", ")}`);
31
+ if (!fb)
32
+ throw new Error(`unknown protocol "${b}"; known: ${Object.keys(protocolFeatures).join(", ")}`);
33
+ const rows = [];
34
+ for (const { key, label } of featureOrder) {
35
+ const va = fa[key];
36
+ const vb = fb[key];
37
+ rows.push({
38
+ feature: label,
39
+ a: fmt(va),
40
+ b: fmt(vb),
41
+ same: JSON.stringify(va) === JSON.stringify(vb),
42
+ });
43
+ }
44
+ const ma = matrix[a];
45
+ const mb = matrix[b];
46
+ const summary = [
47
+ `${a} ↔ ${b}: `,
48
+ ma && mb
49
+ ? `${a} supports ${ma.security.join("/")}; ${b} supports ${mb.security.join("/")}.`
50
+ : "(matrix incomplete)",
51
+ ` ${a} score (anti-DPI×mobile×battery) = ${fa.antiDpi * fa.mobileFriendly * fa.battery}, ${b} = ${fb.antiDpi * fb.mobileFriendly * fb.battery}.`,
52
+ ].join("");
53
+ return { a, b, rows, summary };
54
+ }
55
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/tools_impl/diff.ts"],"names":[],"mappings":"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"}