Conversation
…, and config fixes
Rewrite template variable substitution with a recursive descent
expression parser supporting all 13 MCPBX spec functions: base64,
base64url, urlEncode, hex, concat, lower, upper, trim, default,
basicAuth, bearer, timestamp, uuid, and jsonEncode. Supports
nested calls like ${base64(concat(user_config.user, ':', pass))}.
Add auto-install for local path tools: when running tool info,
call, run, or config set on a local path, automatically create a
symlink in ~/.tool/tools/ so config is stored by name. Prompts
on conflict with existing link.
Additional changes:
- Fix config unset to work on stored config names when the tool
is not installed, by falling back to PluginRef lookup
- Fix config re-prompting: only prompt for required fields on
subsequent runs when a saved config already exists
- Add single-letter aliases for config (s/g/l/u) and host
(a/r/l/p) subcommands
- Validate user-specified tools are installed in host add
appcypher
added a commit
that referenced
this pull request
Feb 6, 2026
Changes since v0.1.13: Features: - Add progress bars to tool pack with improved UX (#97) - Add --json and --concise support to tool config get (#95) - Add OpenCode as supported MCP host (#94) - Add tool config list <ref|path> command (#93) - Implement all template functions and auto-install local tools (#91) Fixes: - Pass Authorization header from manifest to HTTP transport (#96) - Fix OAuth re-authentication flow (#93) - Correct config path derivation for path-resolved tools (#92)
appcypher
added a commit
that referenced
this pull request
Feb 6, 2026
Changes since v0.1.13: Features: - Add progress bars to tool pack with improved UX (#97) - Add --json and --concise support to tool config get (#95) - Add OpenCode as supported MCP host (#94) - Add tool config list <ref|path> command (#93) - Implement all template functions and auto-install local tools (#91) Fixes: - Pass Authorization header from manifest to HTTP transport (#96) - Fix OAuth re-authentication flow (#93) - Correct config path derivation for path-resolved tools (#92)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Title: feat(cli): implement all template functions, auto-install local tools, and config fixes
Summary
These changes make local tool workflows seamless: users can point at a local directory and the CLI handles installation, config storage, and cleanup without manual install steps.
Changes
lib/vars.rs (+684/-68) - Complete rewrite of template variable substitution:
lib/handlers/tool/registry.rs (+109) - New local tool linking functions:
lib/handlers/tool/common.rs (+99/-6) - Auto-install integration:
lib/handlers/tool/config_cmd.rs (+64/-17) - Config command fixes:
lib/handlers/tool/call.rs (+46/-14) - Config prompt improvements:
lib/handlers/tool/host_cmd.rs (+14) - Host add validation:
lib/commands.rs (+14/-7) - Subcommand aliases:
Test Plan
cargo buildto verify compilationcargo testto verify all 140 tests pass (including 37 new template function tests)tool info external/mongodbwith a manifest using${default(user_config.connection_string, '')}should resolve without "Undefined variable" errorstool info ./path/to/local/toolshould print "Linked name from path" on first usetool info ./different/pathfor same name -- should prompt "Overwrite? [y/N]"tool config set ./local-tool key=value, then uninstall the tool, thentool config unset local-tool --allshould succeedtool info external/mongodbtwice -- second run should not re-prompt for optional fieldstool config s <tool>,tool host a claude-desktoptool host add claude-desktop nonexistent-toolshould error with install hint