mcp-use-compat 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 (225) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +21 -0
  3. package/README.md +375 -0
  4. package/dist/checks/auth.d.ts +2 -0
  5. package/dist/checks/auth.d.ts.map +1 -0
  6. package/dist/checks/auth.js +229 -0
  7. package/dist/checks/auth.js.map +1 -0
  8. package/dist/checks/calls.d.ts +4 -0
  9. package/dist/checks/calls.d.ts.map +1 -0
  10. package/dist/checks/calls.js +192 -0
  11. package/dist/checks/calls.js.map +1 -0
  12. package/dist/checks/discovery.d.ts +3 -0
  13. package/dist/checks/discovery.d.ts.map +1 -0
  14. package/dist/checks/discovery.js +47 -0
  15. package/dist/checks/discovery.js.map +1 -0
  16. package/dist/checks/explanations.d.ts +15 -0
  17. package/dist/checks/explanations.d.ts.map +1 -0
  18. package/dist/checks/explanations.js +346 -0
  19. package/dist/checks/explanations.js.map +1 -0
  20. package/dist/checks/index.d.ts +3 -0
  21. package/dist/checks/index.d.ts.map +1 -0
  22. package/dist/checks/index.js +23 -0
  23. package/dist/checks/index.js.map +1 -0
  24. package/dist/checks/protocol.d.ts +5 -0
  25. package/dist/checks/protocol.d.ts.map +1 -0
  26. package/dist/checks/protocol.js +380 -0
  27. package/dist/checks/protocol.js.map +1 -0
  28. package/dist/checks/resources.d.ts +10 -0
  29. package/dist/checks/resources.d.ts.map +1 -0
  30. package/dist/checks/resources.js +144 -0
  31. package/dist/checks/resources.js.map +1 -0
  32. package/dist/checks/schema.d.ts +21 -0
  33. package/dist/checks/schema.d.ts.map +1 -0
  34. package/dist/checks/schema.js +412 -0
  35. package/dist/checks/schema.js.map +1 -0
  36. package/dist/checks/sdk.d.ts +10 -0
  37. package/dist/checks/sdk.d.ts.map +1 -0
  38. package/dist/checks/sdk.js +68 -0
  39. package/dist/checks/sdk.js.map +1 -0
  40. package/dist/checks/tools.d.ts +18 -0
  41. package/dist/checks/tools.d.ts.map +1 -0
  42. package/dist/checks/tools.js +422 -0
  43. package/dist/checks/tools.js.map +1 -0
  44. package/dist/checks/transport.d.ts +2 -0
  45. package/dist/checks/transport.d.ts.map +1 -0
  46. package/dist/checks/transport.js +123 -0
  47. package/dist/checks/transport.js.map +1 -0
  48. package/dist/checks/types.d.ts +37 -0
  49. package/dist/checks/types.d.ts.map +1 -0
  50. package/dist/checks/types.js +5 -0
  51. package/dist/checks/types.js.map +1 -0
  52. package/dist/checks/ui.d.ts +2 -0
  53. package/dist/checks/ui.d.ts.map +1 -0
  54. package/dist/checks/ui.js +207 -0
  55. package/dist/checks/ui.js.map +1 -0
  56. package/dist/checks/util.d.ts +20 -0
  57. package/dist/checks/util.d.ts.map +1 -0
  58. package/dist/checks/util.js +42 -0
  59. package/dist/checks/util.js.map +1 -0
  60. package/dist/cli.d.ts +110 -0
  61. package/dist/cli.d.ts.map +1 -0
  62. package/dist/cli.js +317 -0
  63. package/dist/cli.js.map +1 -0
  64. package/dist/connect/calls.d.ts +13 -0
  65. package/dist/connect/calls.d.ts.map +1 -0
  66. package/dist/connect/calls.js +130 -0
  67. package/dist/connect/calls.js.map +1 -0
  68. package/dist/connect/http.d.ts +14 -0
  69. package/dist/connect/http.d.ts.map +1 -0
  70. package/dist/connect/http.js +122 -0
  71. package/dist/connect/http.js.map +1 -0
  72. package/dist/connect/index.d.ts +41 -0
  73. package/dist/connect/index.d.ts.map +1 -0
  74. package/dist/connect/index.js +168 -0
  75. package/dist/connect/index.js.map +1 -0
  76. package/dist/connect/lists.d.ts +12 -0
  77. package/dist/connect/lists.d.ts.map +1 -0
  78. package/dist/connect/lists.js +70 -0
  79. package/dist/connect/lists.js.map +1 -0
  80. package/dist/connect/modern.d.ts +13 -0
  81. package/dist/connect/modern.d.ts.map +1 -0
  82. package/dist/connect/modern.js +169 -0
  83. package/dist/connect/modern.js.map +1 -0
  84. package/dist/connect/session.d.ts +29 -0
  85. package/dist/connect/session.d.ts.map +1 -0
  86. package/dist/connect/session.js +96 -0
  87. package/dist/connect/session.js.map +1 -0
  88. package/dist/connect/stdio.d.ts +36 -0
  89. package/dist/connect/stdio.d.ts.map +1 -0
  90. package/dist/connect/stdio.js +127 -0
  91. package/dist/connect/stdio.js.map +1 -0
  92. package/dist/diff.d.ts +23 -0
  93. package/dist/diff.d.ts.map +1 -0
  94. package/dist/diff.js +255 -0
  95. package/dist/diff.js.map +1 -0
  96. package/dist/evaluate.d.ts +70 -0
  97. package/dist/evaluate.d.ts.map +1 -0
  98. package/dist/evaluate.js +104 -0
  99. package/dist/evaluate.js.map +1 -0
  100. package/dist/explain.d.ts +4 -0
  101. package/dist/explain.d.ts.map +1 -0
  102. package/dist/explain.js +46 -0
  103. package/dist/explain.js.map +1 -0
  104. package/dist/fix.d.ts +19 -0
  105. package/dist/fix.d.ts.map +1 -0
  106. package/dist/fix.js +116 -0
  107. package/dist/fix.js.map +1 -0
  108. package/dist/index.d.ts +3 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +54 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/oauth.d.ts +85 -0
  113. package/dist/oauth.d.ts.map +1 -0
  114. package/dist/oauth.js +287 -0
  115. package/dist/oauth.js.map +1 -0
  116. package/dist/policy.d.ts +29 -0
  117. package/dist/policy.d.ts.map +1 -0
  118. package/dist/policy.js +63 -0
  119. package/dist/policy.js.map +1 -0
  120. package/dist/profiles/chatgpt.d.ts +3 -0
  121. package/dist/profiles/chatgpt.d.ts.map +1 -0
  122. package/dist/profiles/chatgpt.js +29 -0
  123. package/dist/profiles/chatgpt.js.map +1 -0
  124. package/dist/profiles/claude-code.d.ts +3 -0
  125. package/dist/profiles/claude-code.d.ts.map +1 -0
  126. package/dist/profiles/claude-code.js +62 -0
  127. package/dist/profiles/claude-code.js.map +1 -0
  128. package/dist/profiles/claude-desktop.d.ts +3 -0
  129. package/dist/profiles/claude-desktop.d.ts.map +1 -0
  130. package/dist/profiles/claude-desktop.js +51 -0
  131. package/dist/profiles/claude-desktop.js.map +1 -0
  132. package/dist/profiles/cline.d.ts +4 -0
  133. package/dist/profiles/cline.d.ts.map +1 -0
  134. package/dist/profiles/cline.js +118 -0
  135. package/dist/profiles/cline.js.map +1 -0
  136. package/dist/profiles/codex.d.ts +4 -0
  137. package/dist/profiles/codex.d.ts.map +1 -0
  138. package/dist/profiles/codex.js +168 -0
  139. package/dist/profiles/codex.js.map +1 -0
  140. package/dist/profiles/continue.d.ts +4 -0
  141. package/dist/profiles/continue.d.ts.map +1 -0
  142. package/dist/profiles/continue.js +93 -0
  143. package/dist/profiles/continue.js.map +1 -0
  144. package/dist/profiles/cursor.d.ts +3 -0
  145. package/dist/profiles/cursor.d.ts.map +1 -0
  146. package/dist/profiles/cursor.js +52 -0
  147. package/dist/profiles/cursor.js.map +1 -0
  148. package/dist/profiles/gemini-cli.d.ts +4 -0
  149. package/dist/profiles/gemini-cli.d.ts.map +1 -0
  150. package/dist/profiles/gemini-cli.js +137 -0
  151. package/dist/profiles/gemini-cli.js.map +1 -0
  152. package/dist/profiles/goose.d.ts +4 -0
  153. package/dist/profiles/goose.d.ts.map +1 -0
  154. package/dist/profiles/goose.js +114 -0
  155. package/dist/profiles/goose.js.map +1 -0
  156. package/dist/profiles/index.d.ts +7 -0
  157. package/dist/profiles/index.d.ts.map +1 -0
  158. package/dist/profiles/index.js +43 -0
  159. package/dist/profiles/index.js.map +1 -0
  160. package/dist/profiles/opencode.d.ts +3 -0
  161. package/dist/profiles/opencode.d.ts.map +1 -0
  162. package/dist/profiles/opencode.js +47 -0
  163. package/dist/profiles/opencode.js.map +1 -0
  164. package/dist/profiles/types.d.ts +86 -0
  165. package/dist/profiles/types.d.ts.map +1 -0
  166. package/dist/profiles/types.js +2 -0
  167. package/dist/profiles/types.js.map +1 -0
  168. package/dist/profiles/vscode-copilot.d.ts +3 -0
  169. package/dist/profiles/vscode-copilot.d.ts.map +1 -0
  170. package/dist/profiles/vscode-copilot.js +71 -0
  171. package/dist/profiles/vscode-copilot.js.map +1 -0
  172. package/dist/profiles/windsurf.d.ts +4 -0
  173. package/dist/profiles/windsurf.d.ts.map +1 -0
  174. package/dist/profiles/windsurf.js +49 -0
  175. package/dist/profiles/windsurf.js.map +1 -0
  176. package/dist/project.d.ts +52 -0
  177. package/dist/project.d.ts.map +1 -0
  178. package/dist/project.js +291 -0
  179. package/dist/project.js.map +1 -0
  180. package/dist/reporters/escape.d.ts +7 -0
  181. package/dist/reporters/escape.d.ts.map +1 -0
  182. package/dist/reporters/escape.js +15 -0
  183. package/dist/reporters/escape.js.map +1 -0
  184. package/dist/reporters/github.d.ts +7 -0
  185. package/dist/reporters/github.d.ts.map +1 -0
  186. package/dist/reporters/github.js +19 -0
  187. package/dist/reporters/github.js.map +1 -0
  188. package/dist/reporters/index.d.ts +6 -0
  189. package/dist/reporters/index.d.ts.map +1 -0
  190. package/dist/reporters/index.js +10 -0
  191. package/dist/reporters/index.js.map +1 -0
  192. package/dist/reporters/json.d.ts +3 -0
  193. package/dist/reporters/json.d.ts.map +1 -0
  194. package/dist/reporters/json.js +4 -0
  195. package/dist/reporters/json.js.map +1 -0
  196. package/dist/reporters/markdown.d.ts +3 -0
  197. package/dist/reporters/markdown.d.ts.map +1 -0
  198. package/dist/reporters/markdown.js +98 -0
  199. package/dist/reporters/markdown.js.map +1 -0
  200. package/dist/run.d.ts +14 -0
  201. package/dist/run.d.ts.map +1 -0
  202. package/dist/run.js +163 -0
  203. package/dist/run.js.map +1 -0
  204. package/dist/sdk-facts.d.ts +27 -0
  205. package/dist/sdk-facts.d.ts.map +1 -0
  206. package/dist/sdk-facts.js +63 -0
  207. package/dist/sdk-facts.js.map +1 -0
  208. package/dist/snapshot.d.ts +189 -0
  209. package/dist/snapshot.d.ts.map +1 -0
  210. package/dist/snapshot.js +22 -0
  211. package/dist/snapshot.js.map +1 -0
  212. package/dist/ui.d.ts +18 -0
  213. package/dist/ui.d.ts.map +1 -0
  214. package/dist/ui.js +22 -0
  215. package/dist/ui.js.map +1 -0
  216. package/dist/upgrade.d.ts +12 -0
  217. package/dist/upgrade.d.ts.map +1 -0
  218. package/dist/upgrade.js +115 -0
  219. package/dist/upgrade.js.map +1 -0
  220. package/dist/version.d.ts +3 -0
  221. package/dist/version.d.ts.map +1 -0
  222. package/dist/version.js +5 -0
  223. package/dist/version.js.map +1 -0
  224. package/package.json +65 -0
  225. package/schema/report.schema.json +327 -0
@@ -0,0 +1,4 @@
1
+ import type { ClientProfile } from "./types.js";
2
+ /** Generated from research notes (2026-09-27); every fact links to its source. */
3
+ export declare const goose: ClientProfile;
4
+ //# sourceMappingURL=goose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goose.d.ts","sourceRoot":"","sources":["../../src/profiles/goose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,kFAAkF;AAClF,eAAO,MAAM,KAAK,EAAE,aA+GnB,CAAC"}
@@ -0,0 +1,114 @@
1
+ /** Generated from research notes (2026-09-27); every fact links to its source. */
2
+ export const goose = {
3
+ id: "goose",
4
+ aliases: [],
5
+ displayName: "Goose",
6
+ versionTested: "block/goose @ 04ed836 (1.52.0)",
7
+ supports: {
8
+ stdio: {
9
+ value: true,
10
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/extension.rs#L157-L158",
11
+ verifiedOn: "2026-09-27"
12
+ },
13
+ streamableHttp: {
14
+ value: true,
15
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/extension.rs#L207-L208",
16
+ verifiedOn: "2026-09-27"
17
+ },
18
+ sse: {
19
+ value: false,
20
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/extension.rs#L156",
21
+ verifiedOn: "2026-09-27",
22
+ note: "No SSE variant in ExtensionConfig."
23
+ },
24
+ toolsListChanged: {
25
+ value: true,
26
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/mcp_client.rs#L377-L379",
27
+ verifiedOn: "2026-09-27"
28
+ },
29
+ resources: {
30
+ value: true,
31
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/extension_manager/mod.rs#L1067",
32
+ verifiedOn: "2026-09-27"
33
+ },
34
+ prompts: {
35
+ value: true,
36
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/extension_manager/mod.rs#L1450",
37
+ verifiedOn: "2026-09-27"
38
+ },
39
+ sampling: {
40
+ value: false,
41
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/mcp_client.rs#L1516-L1521",
42
+ verifiedOn: "2026-09-27",
43
+ note: "A test asserts sampling is not advertised."
44
+ },
45
+ elicitation: {
46
+ value: true,
47
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/mcp_client.rs#L466-L472",
48
+ verifiedOn: "2026-09-27"
49
+ },
50
+ oauth: {
51
+ value: true,
52
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/oauth/mod.rs#L255-L276",
53
+ verifiedOn: "2026-09-27"
54
+ },
55
+ cimd: {
56
+ value: true,
57
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/oauth/mod.rs#L273-L275",
58
+ verifiedOn: "2026-09-27",
59
+ note: "Uses a client_metadata_url unless a static client is configured."
60
+ },
61
+ uiResources: {
62
+ value: true,
63
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/mcp_client.rs#L300-L311",
64
+ verifiedOn: "2026-09-27",
65
+ note: "The MCP Apps UI extension is advertised when the host sets mcpui."
66
+ },
67
+ structuredContent: {
68
+ value: false,
69
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose-provider-types/src/formats/anthropic.rs#L314-L404",
70
+ verifiedOn: "2026-09-27",
71
+ note: "Provider formatting reads result.content only."
72
+ }
73
+ },
74
+ limits: {
75
+ toolNamePrefix: {
76
+ value: {
77
+ format: "{server}__",
78
+ lowercase: true
79
+ },
80
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/extension_manager/mod.rs#L850-L854",
81
+ verifiedOn: "2026-09-27",
82
+ note: "{server} is the extension key: name_to_key() lowercases, removes whitespace and replaces chars other than [A-Za-z0-9_-] with '_' (config/extensions.rs#L22-L32). The tool name itself is not sanitised. unprefixed extensions skip the prefix."
83
+ },
84
+ structuredContent: {
85
+ value: "textOnly",
86
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose-provider-types/src/formats/anthropic.rs#L314-L404",
87
+ verifiedOn: "2026-09-27",
88
+ note: "Provider formatting reads result.content only."
89
+ },
90
+ maxToolResult: {
91
+ value: {
92
+ max: 200000,
93
+ unit: "chars",
94
+ onExceed: "file"
95
+ },
96
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/agents/large_response_handler.rs#L5-L50",
97
+ verifiedOn: "2026-09-27",
98
+ note: "Text blocks over 200,000 chars (GOOSE_MAX_TOOL_RESPONSE_SIZE) are written to a temp file and replaced by a pointer message."
99
+ },
100
+ toolTimeoutMs: {
101
+ value: 300000,
102
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/config/extensions.rs#L10",
103
+ verifiedOn: "2026-09-27",
104
+ note: "Per-extension timeout, default 300 s."
105
+ },
106
+ readOnlySkipsApproval: {
107
+ value: true,
108
+ source: "https://github.com/block/goose/blob/04ed836c8cde23e540cc77d256992e00be99298b/crates/goose/src/permission/permission_inspector.rs#L52-L64",
109
+ verifiedOn: "2026-09-27",
110
+ note: "Smart-approve: readOnlyHint:true tools are treated as read-only (no prompt), and readOnlyHint:false tools are set to AskBefore."
111
+ }
112
+ },
113
+ };
114
+ //# sourceMappingURL=goose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goose.js","sourceRoot":"","sources":["../../src/profiles/goose.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,MAAM,CAAC,MAAM,KAAK,GAAkB;IAClC,EAAE,EAAE,OAAO;IACX,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,OAAO;IACpB,aAAa,EAAE,gCAAgC;IAC/C,QAAQ,EAAE;QACR,KAAK,EAAE;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,6HAA6H;YACrI,UAAU,EAAE,YAAY;SACzB;QACD,cAAc,EAAE;YACd,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,6HAA6H;YACrI,UAAU,EAAE,YAAY;SACzB;QACD,GAAG,EAAE;YACH,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,wHAAwH;YAChI,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,oCAAoC;SAC3C;QACD,gBAAgB,EAAE;YAChB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,8HAA8H;YACtI,UAAU,EAAE,YAAY;SACzB;QACD,SAAS,EAAE;YACT,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,qIAAqI;YAC7I,UAAU,EAAE,YAAY;SACzB;QACD,OAAO,EAAE;YACP,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,qIAAqI;YAC7I,UAAU,EAAE,YAAY;SACzB;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,gIAAgI;YACxI,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,4CAA4C;SACnD;QACD,WAAW,EAAE;YACX,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,8HAA8H;YACtI,UAAU,EAAE,YAAY;SACzB;QACD,KAAK,EAAE;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,sHAAsH;YAC9H,UAAU,EAAE,YAAY;SACzB;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,sHAAsH;YAC9H,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,kEAAkE;SACzE;QACD,WAAW,EAAE;YACX,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,8HAA8H;YACtI,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,mEAAmE;SAC1E;QACD,iBAAiB,EAAE;YACjB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,6IAA6I;YACrJ,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,gDAAgD;SACvD;KACF;IACD,MAAM,EAAE;QACN,cAAc,EAAE;YACd,KAAK,EAAE;gBACL,MAAM,EAAE,YAAY;gBACpB,SAAS,EAAE,IAAI;aAChB;YACD,MAAM,EAAE,yIAAyI;YACjJ,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,gPAAgP;SACvP;QACD,iBAAiB,EAAE;YACjB,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,6IAA6I;YACrJ,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,gDAAgD;SACvD;QACD,aAAa,EAAE;YACb,KAAK,EAAE;gBACL,GAAG,EAAE,MAAM;gBACX,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM;aACjB;YACD,MAAM,EAAE,uIAAuI;YAC/I,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,6HAA6H;SACpI;QACD,aAAa,EAAE;YACb,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,wHAAwH;YAChI,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,uCAAuC;SAC9C;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,0IAA0I;YAClJ,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,iIAAiI;SACxI;KACF;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ClientProfile } from "./types.js";
2
+ export declare const ALL_PROFILES: ClientProfile[];
3
+ export declare class UnknownClientError extends Error {
4
+ }
5
+ /** Resolves ids/aliases to profiles; undefined selects all. */
6
+ export declare function selectProfiles(ids: string[] | undefined, profiles?: ClientProfile[]): ClientProfile[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/profiles/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,eAAO,MAAM,YAAY,EAAE,aAAa,EAavC,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAEhD,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,kBAAe,GAAG,aAAa,EAAE,CAWlG"}
@@ -0,0 +1,43 @@
1
+ import { chatgpt } from "./chatgpt.js";
2
+ import { cline } from "./cline.js";
3
+ import { codex } from "./codex.js";
4
+ import { continueDev } from "./continue.js";
5
+ import { geminiCli } from "./gemini-cli.js";
6
+ import { goose } from "./goose.js";
7
+ import { windsurf } from "./windsurf.js";
8
+ import { claudeCode } from "./claude-code.js";
9
+ import { claudeDesktop } from "./claude-desktop.js";
10
+ import { cursor } from "./cursor.js";
11
+ import { opencode } from "./opencode.js";
12
+ import { vscodeCopilot } from "./vscode-copilot.js";
13
+ export const ALL_PROFILES = [
14
+ claudeDesktop,
15
+ claudeCode,
16
+ chatgpt,
17
+ cursor,
18
+ vscodeCopilot,
19
+ opencode,
20
+ codex,
21
+ geminiCli,
22
+ cline,
23
+ goose,
24
+ continueDev,
25
+ windsurf,
26
+ ];
27
+ export class UnknownClientError extends Error {
28
+ }
29
+ /** Resolves ids/aliases to profiles; undefined selects all. */
30
+ export function selectProfiles(ids, profiles = ALL_PROFILES) {
31
+ if (!ids)
32
+ return profiles;
33
+ return ids.map((id) => {
34
+ const wanted = id.toLowerCase();
35
+ const found = profiles.find((p) => p.id === wanted || p.aliases.includes(wanted));
36
+ if (!found) {
37
+ const known = profiles.map((p) => p.id).join(", ") || "(none)";
38
+ throw new UnknownClientError(`Unknown client "${id}". Known clients: ${known}`);
39
+ }
40
+ return found;
41
+ });
42
+ }
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/profiles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,aAAa;IACb,UAAU;IACV,OAAO;IACP,MAAM;IACN,aAAa;IACb,QAAQ;IACR,KAAK;IACL,SAAS;IACT,KAAK;IACL,KAAK;IACL,WAAW;IACX,QAAQ;CACT,CAAC;AAEF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG;AAEhD,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,GAAyB,EAAE,QAAQ,GAAG,YAAY;IAC/E,IAAI,CAAC,GAAG;QAAE,OAAO,QAAQ,CAAC;IAC1B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;YAC/D,MAAM,IAAI,kBAAkB,CAAC,mBAAmB,EAAE,qBAAqB,KAAK,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ClientProfile } from "./types.js";
2
+ export declare const opencode: ClientProfile;
3
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/profiles/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD,eAAO,MAAM,QAAQ,EAAE,aA0CtB,CAAC"}
@@ -0,0 +1,47 @@
1
+ const DOCS = "https://opencode.ai/docs/mcp-servers/";
2
+ const SRC = "https://github.com/anomalyco/opencode/blob/a42f393c850bec0c0f395fb91bf19b1ee8b31666/packages/opencode/src/mcp";
3
+ const verifiedOn = "2026-09-26";
4
+ export const opencode = {
5
+ id: "opencode",
6
+ aliases: [],
7
+ displayName: "OpenCode",
8
+ versionTested: "opencode-ai 1.18.32 (anomalyco/opencode @ a42f393)",
9
+ supports: {
10
+ stdio: { value: true, source: DOCS, verifiedOn },
11
+ streamableHttp: { value: true, source: `${SRC}/index.ts#L268-L283`, verifiedOn },
12
+ sse: { value: true, source: `${SRC}/index.ts#L268-L283`, verifiedOn },
13
+ toolsListChanged: { value: true, source: `${SRC}/index.ts#L461-L471`, verifiedOn },
14
+ promptsListChanged: { value: false, source: `${SRC}/index.ts`, verifiedOn, note: "No handler in the client source." },
15
+ resourcesListChanged: { value: false, source: `${SRC}/index.ts`, verifiedOn, note: "No handler in the client source." },
16
+ resources: { value: true, source: `${SRC}/catalog.ts#L130-L134`, verifiedOn },
17
+ prompts: { value: true, source: `${SRC}/catalog.ts#L122-L126`, verifiedOn },
18
+ sampling: { value: false, source: `${SRC}/index.ts#L39-L49`, verifiedOn },
19
+ elicitation: { value: false, source: `${SRC}/index.ts#L39-L49`, verifiedOn },
20
+ oauth: { value: true, source: DOCS, verifiedOn },
21
+ dcr: { value: true, source: DOCS, verifiedOn },
22
+ uiResources: { value: false, source: `${SRC}/`, verifiedOn, note: "No MCP Apps handling in the source." },
23
+ structuredContent: { value: "partial", source: `${SRC}/catalog.ts#L75-L80`, verifiedOn },
24
+ },
25
+ limits: {
26
+ toolNamePrefix: { value: { format: "{server}_" }, source: `${SRC}/catalog.ts#L117-L119`, verifiedOn },
27
+ toolNameChars: {
28
+ value: { allowed: "A-Za-z0-9_-", onInvalid: "replace" },
29
+ source: `${SRC}/catalog.ts#L117`,
30
+ verifiedOn,
31
+ },
32
+ structuredContent: { value: "fallbackOnly", source: `${SRC}/catalog.ts#L75-L80`, verifiedOn },
33
+ maxToolResult: {
34
+ value: { max: 51200, unit: "bytes", onExceed: "file" },
35
+ source: "https://github.com/anomalyco/opencode/blob/b471c2b4495747353af768fbf2e0790c9d820ce2/packages/opencode/src/tool/truncate.ts#L14-L15",
36
+ verifiedOn: "2026-09-27",
37
+ note: "2000 lines / 50 KB by default; the full output is saved to a file.",
38
+ },
39
+ toolTimeoutMs: {
40
+ value: 60000,
41
+ source: "https://github.com/anomalyco/opencode/blob/b471c2b4495747353af768fbf2e0790c9d820ce2/packages/opencode/src/mcp/catalog.ts#L54-L66",
42
+ verifiedOn: "2026-09-27",
43
+ note: "Per-server timeout, else the MCP SDK default of 60 s.",
44
+ },
45
+ },
46
+ };
47
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/profiles/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /** Client features a finding can depend on. */
2
+ export type ClientFeature = "stdio" | "streamableHttp" | "sse" | "toolsListChanged" | "resourcesListChanged" | "promptsListChanged" | "resources" | "prompts" | "sampling" | "elicitation" | "oauth" | "dcr" | "cimd" | "uiResources" | "structuredContent";
3
+ /** A fact about a client, with where we learned it. */
4
+ export interface Sourced<T> {
5
+ value: T;
6
+ source: string;
7
+ /** YYYY-MM-DD */
8
+ verifiedOn: string;
9
+ note?: string;
10
+ }
11
+ /** "partial" = supported but known to be unreliable or incomplete; see the note. */
12
+ export type Support = boolean | "partial";
13
+ /** What a client does with a tool name it doesn't accept as-is. */
14
+ export type NameHandling = "reject" | "replace" | "truncate"
15
+ /** Truncated (or renamed), then made unique with a hash suffix. */
16
+ | "truncateWithHash"
17
+ /** Keeps the start and end, joined by "...". */
18
+ | "truncateMiddle"
19
+ /** Replaced; names that then collide get a hash suffix, so they stay unique. */
20
+ | "replaceUnique" | "unknown";
21
+ /** How a client passes a tool result with structuredContent to the model. */
22
+ export type StructuredContentHandling =
23
+ /** Model sees JSON of structuredContent instead of the text content. */
24
+ "replacesText"
25
+ /** Model sees both. */
26
+ | "alongsideText"
27
+ /** Model sees text content; structuredContent only if content is empty. */
28
+ | "fallbackOnly"
29
+ /** Model only ever sees the text content. */
30
+ | "textOnly";
31
+ export interface ClientProfile {
32
+ id: string;
33
+ aliases: string[];
34
+ displayName: string;
35
+ versionTested?: string;
36
+ /** Absent feature = unknown. Unknown never produces a FAIL or WARN. */
37
+ supports: Partial<Record<ClientFeature, Sourced<Support>>>;
38
+ limits: {
39
+ maxTools?: Sourced<number>;
40
+ /**
41
+ * Prefix the client adds before the tool name. {server} is the name the
42
+ * user gave the server; maxLength caps the prefix, lowercase lowercases it.
43
+ */
44
+ toolNamePrefix?: Sourced<{
45
+ format: string;
46
+ maxLength?: number;
47
+ lowercase?: boolean;
48
+ }>;
49
+ /** Allowed characters (regex character class body, e.g. "A-Za-z0-9_-") and what happens to others. */
50
+ toolNameChars?: Sourced<{
51
+ allowed: string;
52
+ onInvalid: NameHandling;
53
+ }>;
54
+ /** Max length of prefix + tool name and what happens beyond it. */
55
+ maxToolNameLength?: Sourced<{
56
+ max: number;
57
+ onExceed: NameHandling;
58
+ }>;
59
+ /** Descriptions (and server instructions) longer than this are truncated. */
60
+ maxDescriptionLength?: Sourced<number>;
61
+ /** Top-level inputSchema property names must match this regex, or the tool is dropped. */
62
+ inputPropertyNamePattern?: Sourced<string>;
63
+ /** JSON Schema keywords the client rejects or drops. */
64
+ schemaUnsupported?: Sourced<string[]>;
65
+ structuredContent?: Sourced<StructuredContentHandling>;
66
+ /** Root-level oneOf/anyOf with a non-object branch makes the client drop the server's tools. */
67
+ rootCombinatorNonObject?: Sourced<"dropsServerTools">;
68
+ /** Type arrays like ["string","null"] fail the client's argument validation. */
69
+ typeArraysRejected?: Sourced<boolean>;
70
+ /** JSON Schema keywords the client silently removes before the model sees the schema. */
71
+ schemaDroppedKeywords?: Sourced<string[]>;
72
+ /** inputSchema size (JSON characters) above which the client compacts or strips it. */
73
+ maxSchemaChars?: Sourced<number>;
74
+ /** Tool result size the model gets before the client truncates or offloads it. */
75
+ maxToolResult?: Sourced<{
76
+ max: number;
77
+ unit: "chars" | "tokens" | "bytes";
78
+ onExceed: "truncate" | "file" | "unknown";
79
+ }>;
80
+ /** Default tool call timeout. */
81
+ toolTimeoutMs?: Sourced<number>;
82
+ /** readOnlyHint: true lets tools run without a confirmation prompt. */
83
+ readOnlySkipsApproval?: Sourced<boolean>;
84
+ };
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/profiles/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/profiles/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { ClientProfile } from "./types.js";
2
+ export declare const vscodeCopilot: ClientProfile;
3
+ //# sourceMappingURL=vscode-copilot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode-copilot.d.ts","sourceRoot":"","sources":["../../src/profiles/vscode-copilot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD,eAAO,MAAM,aAAa,EAAE,aAkE3B,CAAC"}
@@ -0,0 +1,71 @@
1
+ const GUIDE = "https://code.visualstudio.com/api/extension-guides/ai/mcp";
2
+ const SRC = "https://github.com/microsoft/vscode/blob/a460613c57b4c1eb2bc8edc97be694e05ae286b2/src/vs/workbench/contrib/mcp/common";
3
+ const verifiedOn = "2026-09-26";
4
+ export const vscodeCopilot = {
5
+ id: "vscode-copilot",
6
+ aliases: ["vscode", "copilot"],
7
+ displayName: "VS Code (GitHub Copilot)",
8
+ versionTested: "microsoft/vscode @ a460613 (1.140.0)",
9
+ supports: {
10
+ stdio: { value: true, source: GUIDE, verifiedOn },
11
+ streamableHttp: { value: true, source: GUIDE, verifiedOn },
12
+ sse: { value: true, source: GUIDE, verifiedOn },
13
+ toolsListChanged: { value: true, source: `${SRC}/mcpServer.ts#L1224-L1227`, verifiedOn },
14
+ promptsListChanged: { value: true, source: `${SRC}/mcpServer.ts#L1229-L1232`, verifiedOn },
15
+ resourcesListChanged: {
16
+ value: "partial",
17
+ source: `${SRC}/mcpServerRequestHandler.ts#L368-L370`,
18
+ verifiedOn,
19
+ note: "The notification is parsed but nothing listens to it; resources are listed on demand.",
20
+ },
21
+ resources: { value: true, source: GUIDE, verifiedOn },
22
+ prompts: { value: true, source: GUIDE, verifiedOn },
23
+ sampling: { value: true, source: GUIDE, verifiedOn },
24
+ elicitation: { value: true, source: `${SRC}/mcpServerRequestHandler.ts#L120-L134`, verifiedOn },
25
+ oauth: { value: true, source: GUIDE, verifiedOn },
26
+ dcr: { value: true, source: GUIDE, verifiedOn },
27
+ cimd: {
28
+ value: true,
29
+ source: "https://github.com/microsoft/vscode/blob/a460613c57b4c1eb2bc8edc97be694e05ae286b2/src/vs/workbench/api/browser/mainThreadAuthentication.ts#L178-L192",
30
+ verifiedOn,
31
+ },
32
+ uiResources: { value: true, source: GUIDE, verifiedOn },
33
+ structuredContent: { value: true, source: `${SRC}/mcpLanguageModelToolContribution.ts#L331-L392`, verifiedOn },
34
+ },
35
+ limits: {
36
+ maxTools: {
37
+ value: 128,
38
+ source: "https://code.visualstudio.com/docs/agents/run/tools",
39
+ verifiedOn,
40
+ note: "per chat request, across all servers",
41
+ },
42
+ toolNamePrefix: {
43
+ value: { format: "mcp_{server}_", maxLength: 18, lowercase: true },
44
+ source: `${SRC}/mcpServer.ts#L232-L252`,
45
+ verifiedOn,
46
+ },
47
+ toolNameChars: {
48
+ value: { allowed: "A-Za-z0-9_-", onInvalid: "replace" },
49
+ source: `${SRC}/mcpServer.ts#L1086-L1089`,
50
+ verifiedOn,
51
+ note: "Other characters are replaced with '_' and a warning is logged.",
52
+ },
53
+ maxToolNameLength: {
54
+ value: { max: 64, onExceed: "truncate" },
55
+ source: `${SRC}/mcpServer.ts#L1333`,
56
+ verifiedOn,
57
+ },
58
+ structuredContent: {
59
+ value: "replacesText",
60
+ source: `${SRC}/mcpLanguageModelToolContribution.ts#L331-L392`,
61
+ verifiedOn,
62
+ },
63
+ readOnlySkipsApproval: {
64
+ value: true,
65
+ source: "https://github.com/microsoft/vscode/blob/43dd9070f75d527ab38035c0562acbfe9de4209b/src/vs/workbench/contrib/mcp/common/mcpLanguageModelToolContribution.ts#L231-L243",
66
+ verifiedOn: "2026-09-27",
67
+ note: "Without readOnlyHint every call needs confirmation.",
68
+ },
69
+ },
70
+ };
71
+ //# sourceMappingURL=vscode-copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode-copilot.js","sourceRoot":"","sources":["../../src/profiles/vscode-copilot.ts"],"names":[],"mappings":"AAEA,MAAM,KAAK,GAAG,2DAA2D,CAAC;AAC1E,MAAM,GAAG,GAAG,uHAAuH,CAAC;AACpI,MAAM,UAAU,GAAG,YAAY,CAAC;AAEhC,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,EAAE,gBAAgB;IACpB,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC9B,WAAW,EAAE,0BAA0B;IACvC,aAAa,EAAE,sCAAsC;IACrD,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QACjD,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QAC1D,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QAC/C,gBAAgB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,2BAA2B,EAAE,UAAU,EAAE;QACxF,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,2BAA2B,EAAE,UAAU,EAAE;QAC1F,oBAAoB,EAAE;YACpB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,GAAG,GAAG,uCAAuC;YACrD,UAAU;YACV,IAAI,EAAE,uFAAuF;SAC9F;QACD,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QACrD,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QACnD,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QACpD,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,uCAAuC,EAAE,UAAU,EAAE;QAC/F,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QACjD,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QAC/C,IAAI,EAAE;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,sJAAsJ;YAC9J,UAAU;SACX;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QACvD,iBAAiB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,gDAAgD,EAAE,UAAU,EAAE;KAC/G;IACD,MAAM,EAAE;QACN,QAAQ,EAAE;YACR,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,qDAAqD;YAC7D,UAAU;YACV,IAAI,EAAE,sCAAsC;SAC7C;QACD,cAAc,EAAE;YACd,KAAK,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;YAClE,MAAM,EAAE,GAAG,GAAG,yBAAyB;YACvC,UAAU;SACX;QACD,aAAa,EAAE;YACb,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE;YACvD,MAAM,EAAE,GAAG,GAAG,2BAA2B;YACzC,UAAU;YACV,IAAI,EAAE,iEAAiE;SACxE;QACD,iBAAiB,EAAE;YACjB,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;YACxC,MAAM,EAAE,GAAG,GAAG,qBAAqB;YACnC,UAAU;SACX;QACD,iBAAiB,EAAE;YACjB,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,GAAG,GAAG,gDAAgD;YAC9D,UAAU;SACX;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,qKAAqK;YAC7K,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,qDAAqD;SAC5D;KACF;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ClientProfile } from "./types.js";
2
+ /** Generated from research notes (2026-09-27); every fact links to its source. */
3
+ export declare const windsurf: ClientProfile;
4
+ //# sourceMappingURL=windsurf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/profiles/windsurf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,kFAAkF;AAClF,eAAO,MAAM,QAAQ,EAAE,aA8CtB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /** Generated from research notes (2026-09-27); every fact links to its source. */
2
+ export const windsurf = {
3
+ id: "windsurf",
4
+ aliases: ["devin-desktop", "cascade"],
5
+ displayName: "Windsurf / Devin Desktop",
6
+ versionTested: "docs only (closed source)",
7
+ supports: {
8
+ stdio: {
9
+ value: true,
10
+ source: "https://docs.devin.ai/desktop/cascade/mcp",
11
+ verifiedOn: "2026-09-27"
12
+ },
13
+ streamableHttp: {
14
+ value: true,
15
+ source: "https://docs.devin.ai/desktop/cascade/mcp",
16
+ verifiedOn: "2026-09-27"
17
+ },
18
+ sse: {
19
+ value: true,
20
+ source: "https://docs.devin.ai/desktop/cascade/mcp",
21
+ verifiedOn: "2026-09-27"
22
+ },
23
+ oauth: {
24
+ value: true,
25
+ source: "https://docs.devin.ai/desktop/cascade/mcp",
26
+ verifiedOn: "2026-09-27",
27
+ note: "'supports OAuth for each transport type'."
28
+ },
29
+ resources: {
30
+ value: true,
31
+ source: "https://docs.devin.ai/desktop/cascade/mcp",
32
+ verifiedOn: "2026-09-27"
33
+ },
34
+ prompts: {
35
+ value: true,
36
+ source: "https://docs.devin.ai/desktop/cascade/mcp",
37
+ verifiedOn: "2026-09-27"
38
+ }
39
+ },
40
+ limits: {
41
+ maxTools: {
42
+ value: 100,
43
+ source: "https://docs.devin.ai/desktop/cascade/mcp",
44
+ verifiedOn: "2026-09-27",
45
+ note: "'Cascade has a limit of 100 total tools'. docs.windsurf.com now redirects here; the page calls Cascade the legacy agent."
46
+ }
47
+ },
48
+ };
49
+ //# sourceMappingURL=windsurf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/profiles/windsurf.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,MAAM,CAAC,MAAM,QAAQ,GAAkB;IACrC,EAAE,EAAE,UAAU;IACd,OAAO,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC;IACrC,WAAW,EAAE,0BAA0B;IACvC,aAAa,EAAE,2BAA2B;IAC1C,QAAQ,EAAE;QACR,KAAK,EAAE;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE,YAAY;SACzB;QACD,cAAc,EAAE;YACd,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE,YAAY;SACzB;QACD,GAAG,EAAE;YACH,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE,YAAY;SACzB;QACD,KAAK,EAAE;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,2CAA2C;SAClD;QACD,SAAS,EAAE;YACT,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE,YAAY;SACzB;QACD,OAAO,EAAE;YACP,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE,YAAY;SACzB;KACF;IACD,MAAM,EAAE;QACN,QAAQ,EAAE;YACR,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,0HAA0H;SACjI;KACF;CACF,CAAC"}
@@ -0,0 +1,52 @@
1
+ export type Ecosystem = "npm" | "pypi" | "go" | "crates";
2
+ /** An MCP SDK or framework the server's project depends on. */
3
+ export interface DetectedSdk {
4
+ ecosystem: Ecosystem;
5
+ name: string;
6
+ /** Version actually installed (node_modules, site-packages, lockfile), if found. */
7
+ installed?: string;
8
+ /** Version or range declared in the manifest. */
9
+ declared?: string;
10
+ /** Latest release from the registry (filled in by lookupLatest). */
11
+ latest?: string;
12
+ manifest: string;
13
+ /** Package manager used to upgrade it (npm, pnpm, yarn, bun, uv, poetry, pipenv, pip, go, cargo). */
14
+ manager: string;
15
+ /** For pip: the interpreter that owns the environment. */
16
+ python?: string;
17
+ }
18
+ export interface ProjectInfo {
19
+ dir: string;
20
+ sdks: DetectedSdk[];
21
+ }
22
+ /** SDK packages we know, with verified facts about protocol support. */
23
+ export declare const KNOWN_SDKS: Record<Ecosystem, string[]>;
24
+ /**
25
+ * Finds the project a stdio server runs from: the cwd, directories of file
26
+ * arguments (e.g. dist/index.js) and a venv interpreter, walking up to the
27
+ * nearest manifest. Reads files only; no network.
28
+ */
29
+ export declare function detectProject(command: string, args: string[], cwd: string): ProjectInfo | undefined;
30
+ /**
31
+ * The version specifier for `name` in a requirements file ("" if unpinned),
32
+ * or undefined if it isn't listed. Comments and other packages are ignored.
33
+ */
34
+ export declare function requirementsLine(text: string, name: string): string | undefined;
35
+ /**
36
+ * The specifier for `name` in pyproject.toml: PEP 621 quoted requirements
37
+ * ("mcp[cli]>=1.2") or Poetry tables (mcp = "^1.2" / mcp = { version = "^1.2" }).
38
+ */
39
+ export declare function pyprojectRequirement(text: string, name: string): string | undefined;
40
+ /** Looks up the latest release of each SDK. Failures leave `latest` unset. */
41
+ export declare function lookupLatest(sdks: DetectedSdk[], timeoutMs?: number): Promise<void>;
42
+ /** Compares dotted numeric versions (ignores a leading v and pre-release suffixes). */
43
+ export declare function compareVersions(a: string, b: string): number;
44
+ export declare const majorOf: (v: string) => number;
45
+ /** Registry versions end up in shell commands, so only plain version strings are allowed. */
46
+ export declare const SAFE_VERSION: RegExp;
47
+ /**
48
+ * Shell command that upgrades the SDK to `version` (or the newest) with the
49
+ * project's package manager. Unsafe version strings are ignored (→ "latest").
50
+ */
51
+ export declare function upgradeCommand(sdk: DetectedSdk, requested?: string | undefined): string;
52
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEzD,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,qGAAqG;IACrG,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,wEAAwE;AACxE,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAKlD,CAAC;AAKF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAsBnG;AA6FD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ/E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOnF;AAkDD,8EAA8E;AAC9E,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvF;AAmBD,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAa5D;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,WAAyD,CAAC;AAE3F,6FAA6F;AAC7F,eAAO,MAAM,YAAY,QAA6B,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,qBAAa,GAAG,MAAM,CA4B/E"}