Skip to content

Commit 0333a04

Browse files
authored
Merge pull request #176 from WolframResearch/feature/default-toolset
Per-client default toolset for Automatic resolution
2 parents 9d849f3 + 77d2ace commit 0333a04

14 files changed

Lines changed: 539 additions & 32 deletions

.cspell.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"alnum",
55
"AmazonQ",
66
"amzq",
7+
"appname",
78
"Auggie",
89
"BUILDKIT",
910
"buildx",

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
.claude/settings.local.json
22
.claude/worktrees/
3+
.mcp.json
34

45
# Git merge-conflict artifacts (created by 3-way mergetools)
56
*_BACKUP_*

Kernel/CommonSymbols.wl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ BeginPackage[ "Wolfram`AgentTools`Common`" ];
7979
`exportMarkdownString;
8080

8181
(* Shared symbols with DeployAgentTools: *)
82+
`defaultToolsetForTarget;
8283
`guessClientName;
8384
`installLocation;
8485
`projectInstallLocation;

Kernel/DeployAgentTools.wl

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,18 @@ DeployAgentTools[ target_, opts: $$deployAgentToolsOptions ] :=
265265
catchMine @ DeployAgentTools[ target, Automatic, opts ];
266266

267267
DeployAgentTools[ target_, Automatic, opts: $$deployAgentToolsOptions ] :=
268-
catchMine @ DeployAgentTools[ target, $defaultMCPServer, opts ];
268+
catchMine @ DeployAgentTools[
269+
target,
270+
defaultToolsetForTarget[
271+
target,
272+
OptionValue[
273+
InstallMCPServer,
274+
FilterRules[ { opts }, Options @ InstallMCPServer ],
275+
"ApplicationName"
276+
]
277+
],
278+
opts
279+
];
269280

270281
DeployAgentTools[ target_, server_, opts: $$deployAgentToolsOptions ] :=
271282
catchMine @ deployAgentTools[ target, ensureMCPServerExists @ MCPServerObject @ server, opts ];

Kernel/InstallMCPServer.wl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ InstallMCPServer[ target_, opts: OptionsPattern[ ] ] :=
3838
catchMine @ InstallMCPServer[ target, Automatic, opts ];
3939

4040
InstallMCPServer[ target_, Automatic, opts: OptionsPattern[ ] ] :=
41-
catchMine @ InstallMCPServer[ target, $defaultMCPServer, opts ];
41+
catchMine @ InstallMCPServer[
42+
target,
43+
defaultToolsetForTarget[ target, OptionValue[ "ApplicationName" ] ],
44+
opts
45+
];
4246

4347
InstallMCPServer[ target_File? fileQ, server0_String? pacletQualifiedNameQ, opts: OptionsPattern[ ] ] :=
4448
catchMine @ (

Kernel/SupportedClients.wl

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ $SupportedMCPClients := WithCleanup[
2121
$supportedMCPClients = <|
2222
"ClaudeDesktop" -> <|
2323
"DisplayName" -> "Claude Desktop",
24+
"DefaultToolset" -> "Wolfram",
2425
"Aliases" -> { "Claude" },
2526
"ConfigFormat" -> "JSON",
2627
"ConfigKey" -> { "mcpServers" },
@@ -32,6 +33,7 @@ $supportedMCPClients = <|
3233
|>,
3334
"ClaudeCode" -> <|
3435
"DisplayName" -> "Claude Code",
36+
"DefaultToolset" -> "WolframLanguage",
3537
"Aliases" -> { },
3638
"ConfigFormat" -> "JSON",
3739
"ConfigKey" -> { "mcpServers" },
@@ -41,6 +43,7 @@ $supportedMCPClients = <|
4143
|>,
4244
"Cursor" -> <|
4345
"DisplayName" -> "Cursor",
46+
"DefaultToolset" -> "WolframLanguage",
4447
"Aliases" -> { },
4548
"ConfigFormat" -> "JSON",
4649
"ConfigKey" -> { "mcpServers" },
@@ -49,6 +52,7 @@ $supportedMCPClients = <|
4952
|>,
5053
"GeminiCLI" -> <|
5154
"DisplayName" -> "Gemini CLI",
55+
"DefaultToolset" -> "WolframLanguage",
5256
"Aliases" -> { "Gemini" },
5357
"ConfigFormat" -> "JSON",
5458
"ConfigKey" -> { "mcpServers" },
@@ -57,6 +61,7 @@ $supportedMCPClients = <|
5761
|>,
5862
"Goose" -> <|
5963
"DisplayName" -> "Goose",
64+
"DefaultToolset" -> "Wolfram",
6065
"Aliases" -> { },
6166
"ConfigFormat" -> "YAML",
6267
"ConfigKey" -> { "extensions" },
@@ -69,6 +74,7 @@ $supportedMCPClients = <|
6974
|>,
7075
"Antigravity" -> <|
7176
"DisplayName" -> "Antigravity",
77+
"DefaultToolset" -> "WolframLanguage",
7278
"Aliases" -> { "GoogleAntigravity" },
7379
"ConfigFormat" -> "JSON",
7480
"ConfigKey" -> { "mcpServers" },
@@ -77,6 +83,7 @@ $supportedMCPClients = <|
7783
|>,
7884
"AugmentCode" -> <|
7985
"DisplayName" -> "Augment Code",
86+
"DefaultToolset" -> "WolframLanguage",
8087
"Aliases" -> { "Auggie", "Augment" },
8188
"ConfigFormat" -> "JSON",
8289
"ConfigKey" -> { "mcpServers" },
@@ -86,6 +93,7 @@ $supportedMCPClients = <|
8693
|>,
8794
"AugmentCodeIDE" -> <|
8895
"DisplayName" -> "Augment Code IDE",
96+
"DefaultToolset" -> "WolframLanguage",
8997
"Aliases" -> { "AugmentIDE", "AuggieIDE" },
9098
"ConfigFormat" -> "JSON",
9199
"ConfigKey" -> { },
@@ -102,6 +110,7 @@ $supportedMCPClients = <|
102110
|>,
103111
"Codex" -> <|
104112
"DisplayName" -> "Codex CLI",
113+
"DefaultToolset" -> "WolframLanguage",
105114
"Aliases" -> { "OpenAICodex" },
106115
"ConfigFormat" -> "TOML",
107116
"ConfigKey" -> { "mcp_servers" },
@@ -111,6 +120,7 @@ $supportedMCPClients = <|
111120
|>,
112121
"CopilotCLI" -> <|
113122
"DisplayName" -> "Copilot CLI",
123+
"DefaultToolset" -> "WolframLanguage",
114124
"Aliases" -> { "Copilot" },
115125
"ConfigFormat" -> "JSON",
116126
"ConfigKey" -> { "mcpServers" },
@@ -120,6 +130,7 @@ $supportedMCPClients = <|
120130
|>,
121131
"Kiro" -> <|
122132
"DisplayName" -> "Kiro",
133+
"DefaultToolset" -> "WolframLanguage",
123134
"Aliases" -> { },
124135
"ConfigFormat" -> "JSON",
125136
"ConfigKey" -> { "mcpServers" },
@@ -130,6 +141,7 @@ $supportedMCPClients = <|
130141
|>,
131142
"OpenCode" -> <|
132143
"DisplayName" -> "OpenCode",
144+
"DefaultToolset" -> "WolframLanguage",
133145
"Aliases" -> { },
134146
"ConfigFormat" -> "JSON",
135147
"ConfigKey" -> { "mcp" },
@@ -140,6 +152,7 @@ $supportedMCPClients = <|
140152
|>,
141153
"VisualStudioCode" -> <|
142154
"DisplayName" -> "Visual Studio Code",
155+
"DefaultToolset" -> "WolframLanguage",
143156
"Aliases" -> { "VSCode" },
144157
"ConfigFormat" -> "JSON",
145158
"ConfigKey" -> { "servers" },
@@ -153,6 +166,7 @@ $supportedMCPClients = <|
153166
|>,
154167
"Windsurf" -> <|
155168
"DisplayName" -> "Windsurf",
169+
"DefaultToolset" -> "WolframLanguage",
156170
"Aliases" -> { "Codeium" },
157171
"ConfigFormat" -> "JSON",
158172
"ConfigKey" -> { "mcpServers" },
@@ -161,6 +175,7 @@ $supportedMCPClients = <|
161175
|>,
162176
"AmazonQ" -> <|
163177
"DisplayName" -> "Amazon Q Developer",
178+
"DefaultToolset" -> "WolframLanguage",
164179
"Aliases" -> { "AmazonQDeveloper", "Q", "QDeveloper" },
165180
"ConfigFormat" -> "JSON",
166181
"ConfigKey" -> { "mcpServers" },
@@ -170,6 +185,7 @@ $supportedMCPClients = <|
170185
|>,
171186
"Cline" -> <|
172187
"DisplayName" -> "Cline",
188+
"DefaultToolset" -> "WolframLanguage",
173189
"Aliases" -> { },
174190
"ConfigFormat" -> "JSON",
175191
"ConfigKey" -> { "mcpServers" },
@@ -186,6 +202,7 @@ $supportedMCPClients = <|
186202
|>,
187203
"Zed" -> <|
188204
"DisplayName" -> "Zed",
205+
"DefaultToolset" -> "WolframLanguage",
189206
"Aliases" -> { },
190207
"ConfigFormat" -> "JSON",
191208
"ConfigKey" -> { "context_servers" },
@@ -229,6 +246,40 @@ $aliasToCanonicalName := $aliasToCanonicalName = Association @ Flatten @ KeyValu
229246
$supportedMCPClients
230247
];
231248

249+
(* ::**************************************************************************************************************:: *)
250+
(* ::Subsection::Closed:: *)
251+
(*defaultToolsetForTarget*)
252+
defaultToolsetForTarget // beginDefinition;
253+
254+
defaultToolsetForTarget[ name_String ] :=
255+
Replace[
256+
Lookup[
257+
Lookup[ $supportedMCPClients, toInstallName @ name, <| |> ],
258+
"DefaultToolset",
259+
$defaultMCPServer
260+
],
261+
Except[ _String ] :> $defaultMCPServer
262+
];
263+
264+
defaultToolsetForTarget[ { name_String, _ } ] :=
265+
defaultToolsetForTarget @ name;
266+
267+
defaultToolsetForTarget[ file_? fileQ ] := Enclose[
268+
defaultToolsetForTarget @ ConfirmBy[ guessClientName @ file, StringQ, "Guess" ],
269+
$defaultMCPServer &
270+
];
271+
272+
defaultToolsetForTarget[ _ ] := $defaultMCPServer;
273+
274+
(* 2-arg form: an explicit ApplicationName takes precedence over target-based
275+
resolution. This lets callers like `InstallMCPServer[File[...], Automatic,
276+
"ApplicationName" -> "Cline"]` pick up Cline's `DefaultToolset` even when the
277+
file path doesn't reveal the client. *)
278+
defaultToolsetForTarget[ _, name_String ] := defaultToolsetForTarget @ name;
279+
defaultToolsetForTarget[ target_, _ ] := defaultToolsetForTarget @ target;
280+
281+
defaultToolsetForTarget // endDefinition;
282+
232283
(* ::**************************************************************************************************************:: *)
233284
(* ::Section::Closed:: *)
234285
(*Converter Functions*)

Kernel/Tools/Context.wl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,11 +262,14 @@ relatedWolframAlphaResults[ context_String ] := Enclose[
262262
includeWLResults = Replace[ $waIncludeWLResults, Except[ True|False ] :> Automatic ];
263263

264264
prompt = ConfirmBy[
265-
cb`RelatedWolframAlphaResults[
266-
context,
267-
"Prompt",
268-
"MaxItems" -> maxItems,
269-
"IncludeWLResults" -> includeWLResults
265+
Quiet[
266+
cb`RelatedWolframAlphaResults[
267+
context,
268+
"Prompt",
269+
"MaxItems" -> maxItems,
270+
"IncludeWLResults" -> includeWLResults
271+
],
272+
{ WolframAlpha::kbserr }
270273
],
271274
StringQ,
272275
"Prompt"

Kernel/Tools/WolframAlpha.wl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,13 @@ $defaultMCPTools[ "WolframAlpha" ] := LLMTool @ <|
5959
(*wolframAlphaToolEvaluate*)
6060
wolframAlphaToolEvaluate // beginDefinition;
6161

62-
wolframAlphaToolEvaluate[ as_ ] :=
62+
wolframAlphaToolEvaluate[ as_ ] := Quiet[
6363
If[ TrueQ @ $clientSupportsUI && TrueQ @ $deployCloudNotebooks,
6464
wolframAlphaToolEvaluateUI @ as,
6565
wolframAlphaToolEvaluate[ as, cb`$DefaultTools[ "WolframAlpha" ][ as ] ]
66-
];
66+
],
67+
{ WolframAlpha::kbserr }
68+
];
6769

6870
wolframAlphaToolEvaluate[ as_, result_String ] := extractWolframAlphaImages @ result;
6971
wolframAlphaToolEvaluate[ as_, KeyValuePattern[ "String" -> result_String ] ] := extractWolframAlphaImages @ result;

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ InstallMCPServer["ClaudeDesktop"]
7171
(* Out: Success["InstallMCPServer", <|...|>] *)
7272
```
7373

74+
When no server is specified, each named client gets a sensible default — chat clients (Claude Desktop, Goose) get the general-purpose `"Wolfram"` server, while coding clients (Claude Code, Cursor, VS Code, etc.) get `"WolframLanguage"`. For `File[...]` targets, the same per-client default applies when the path or content identifies a known client (or `"ApplicationName"` is supplied); otherwise it falls back to `"Wolfram"`. Pass an explicit server name as the second argument to override.
75+
7476
After restarting Claude Desktop, it will have access to Wolfram knowledge and tools:
7577

7678
![Claude Desktop Screenshot](.github/images/sk6raevruc0q.png)

0 commit comments

Comments
 (0)