diff --git a/buildtools/cli.go b/buildtools/cli.go index 23094b2b0..a9d398e15 100644 --- a/buildtools/cli.go +++ b/buildtools/cli.go @@ -366,8 +366,8 @@ func GetCommands() []cli.Command { { Name: "uv", Flags: cliutils.GetCommandFlags(cliutils.Uv), - Usage: uvcommand.GetDescription(), - HelpName: corecommon.CreateUsage("uv", uvcommand.GetDescription(), uvcommand.Usage), + Usage: corecommon.ResolveDescription(uvcommand.GetDescription(), uvcommand.GetAIDescription()), + HelpName: corecommon.CreateUsage("uv", corecommon.ResolveDescription(uvcommand.GetDescription(), uvcommand.GetAIDescription()), uvcommand.Usage), UsageText: uvcommand.GetArguments(), ArgsUsage: common.CreateEnvVars(), SkipFlagParsing: true, diff --git a/docs/buildtools/uvcommand/help.go b/docs/buildtools/uvcommand/help.go index 27f41b26f..044de1ee1 100644 --- a/docs/buildtools/uvcommand/help.go +++ b/docs/buildtools/uvcommand/help.go @@ -6,6 +6,29 @@ func GetDescription() string { return "Run uv command" } +func GetAIDescription() string { + return `Run a uv (Python package manager) command through JFrog CLI so dependencies resolve against Artifactory and build-info can be recorded. Arguments are forwarded to the uv binary unchanged; the jf-specific flags are the build-info and server options. + +When to use: +- Running 'uv pip install' / 'uv sync' / 'uv add' in a project that resolves through an Artifactory-backed index. +- Capturing build-info for a uv-based Python build by passing --build-name and --build-number. + +Prerequisites: +- uv installed and available on PATH. +- A configured JFrog Platform server (jf c add or jf login), or pass --server-id. + +Common patterns: + $ jf uv pip install -r requirements.txt + $ jf uv sync --build-name=my-app --build-number=7 + $ jf uv add requests --build-name=my-app --build-number=7 --module=api + +Gotchas: +- All arguments after the uv sub-command are passed straight to uv (the command uses SkipFlagParsing); only --build-name, --build-number, --module, --project, and --server-id are interpreted by jf. +- Build-info is collected only when --build-name and --build-number are provided; publish it afterwards with 'jf rt build-publish'. + +Related: jf rt build-publish, jf pip-install` +} + func GetArguments() string { return ` sub-command Arguments and options for the uv command.` diff --git a/docs/mcp/install/help.go b/docs/mcp/install/help.go index 0254bd3d5..67b16acf4 100644 --- a/docs/mcp/install/help.go +++ b/docs/mcp/install/help.go @@ -6,6 +6,30 @@ func GetDescription() string { return "Configure an AI agent (cursor or claude) to connect to the remote JFrog MCP server." } +func GetAIDescription() string { + return `Add the remote JFrog MCP server to an AI agent's configuration so the agent can call JFrog Platform tools. Writes the MCP entry for Cursor or Claude Code; authentication is completed via OAuth in the agent itself, so no credentials are written to the agent config. + +When to use: +- Onboarding Cursor or Claude Code to the JFrog Platform MCP integration. +- Adding the MCP server at project scope (default) or user scope (--global). + +Prerequisites: +- A configured JFrog Platform server (jf c add or jf login), or pass --server-id / --url. +- The target agent (Cursor or Claude Code) installed locally. + +Common patterns: + $ jf mcp install --agent=cursor + $ jf mcp install --agent=claude --global + $ jf mcp install --agent=cursor --dry-run + +Gotchas: +- Before writing config, the command verifies the MCP server is reachable; pass --skip-check to bypass that probe. +- After installing, complete the OAuth authorization in the agent (e.g. run /mcp in Claude Code, or approve the server in Cursor) to activate the connection. +- Default scope is the current project; --global writes the user-level agent config instead. + +Related: jf mcp show, jf mcp uninstall` +} + func GetArguments() string { return ` EXAMPLES # Configure Cursor for the current project diff --git a/docs/mcp/show/help.go b/docs/mcp/show/help.go index db1df5389..32037829d 100644 --- a/docs/mcp/show/help.go +++ b/docs/mcp/show/help.go @@ -6,6 +6,27 @@ func GetDescription() string { return "Print the remote MCP (Model Context Protocol) server endpoint for the configured JFrog Platform." } +func GetAIDescription() string { + return `Print the remote MCP (Model Context Protocol) server endpoint for the configured JFrog Platform, derived as /mcp. Use this to discover the URL an AI agent should connect to, or to confirm which platform the MCP integration points at. + +When to use: +- Looking up the MCP endpoint to configure an agent manually (rather than via 'jf mcp install'). +- Verifying which platform / server the MCP integration resolves to before installing. + +Prerequisites: +- A configured JFrog Platform server (jf c add or jf login), or pass --server-id / --url. + +Common patterns: + $ jf mcp show + $ jf mcp show --server-id=my-platform --format=json + +Gotchas: +- The endpoint defaults to /mcp; override it with --mcp-url or the JFROG_CLI_MCP_URL environment variable. +- This is the remote, platform-hosted MCP server. It is unrelated to 'jf source-mcp', which runs a local MCP server for source-code analysis. + +Related: jf mcp install, jf mcp uninstall` +} + func GetArguments() string { return ` EXAMPLES # Print the MCP endpoint for the default server diff --git a/docs/mcp/uninstall/help.go b/docs/mcp/uninstall/help.go index 783830a41..fd7773d9c 100644 --- a/docs/mcp/uninstall/help.go +++ b/docs/mcp/uninstall/help.go @@ -6,6 +6,27 @@ func GetDescription() string { return "Remove the JFrog MCP server entry previously added to an AI agent's configuration." } +func GetAIDescription() string { + return `Remove the JFrog MCP server entry previously added to an AI agent's configuration (Cursor or Claude Code). Only the JFrog entry is removed; other configured MCP servers are left untouched. + +When to use: +- Disconnecting an agent from the JFrog Platform MCP integration. +- Cleaning up before re-installing against a different platform or scope. + +Prerequisites: +- The agent (Cursor or Claude Code) with a JFrog MCP entry previously added by 'jf mcp install'. + +Common patterns: + $ jf mcp uninstall --agent=cursor + $ jf mcp uninstall --agent=claude --global + +Gotchas: +- Match the scope used at install time: a --global install is removed with --global; a project install is removed from the project config. +- If the entry was installed under a non-default name, pass --name to target it. + +Related: jf mcp install, jf mcp show` +} + func GetArguments() string { return ` EXAMPLES # Remove the JFrog MCP server from Cursor (current project) diff --git a/mcp/cli.go b/mcp/cli.go index bcdb174d8..741fde56f 100644 --- a/mcp/cli.go +++ b/mcp/cli.go @@ -25,8 +25,8 @@ func GetCommands() []cli.Command { { Name: "show", Flags: cliutils.GetCommandFlags(cliutils.McpShow), - Usage: showDocs.GetDescription(), - HelpName: corecommon.CreateUsage("mcp show", showDocs.GetDescription(), showDocs.Usage), + Usage: corecommon.ResolveDescription(showDocs.GetDescription(), showDocs.GetAIDescription()), + HelpName: corecommon.CreateUsage("mcp show", corecommon.ResolveDescription(showDocs.GetDescription(), showDocs.GetAIDescription()), showDocs.Usage), UsageText: showDocs.GetArguments(), ArgsUsage: common.CreateEnvVars(), BashComplete: corecommon.CreateBashCompletionFunc(), @@ -35,8 +35,8 @@ func GetCommands() []cli.Command { { Name: "install", Flags: cliutils.GetCommandFlags(cliutils.McpInstall), - Usage: installDocs.GetDescription(), - HelpName: corecommon.CreateUsage("mcp install", installDocs.GetDescription(), installDocs.Usage), + Usage: corecommon.ResolveDescription(installDocs.GetDescription(), installDocs.GetAIDescription()), + HelpName: corecommon.CreateUsage("mcp install", corecommon.ResolveDescription(installDocs.GetDescription(), installDocs.GetAIDescription()), installDocs.Usage), UsageText: installDocs.GetArguments(), ArgsUsage: common.CreateEnvVars(), BashComplete: corecommon.CreateBashCompletionFunc("cursor", "claude"), @@ -45,8 +45,8 @@ func GetCommands() []cli.Command { { Name: "uninstall", Flags: cliutils.GetCommandFlags(cliutils.McpUninstall), - Usage: uninstallDocs.GetDescription(), - HelpName: corecommon.CreateUsage("mcp uninstall", uninstallDocs.GetDescription(), uninstallDocs.Usage), + Usage: corecommon.ResolveDescription(uninstallDocs.GetDescription(), uninstallDocs.GetAIDescription()), + HelpName: corecommon.CreateUsage("mcp uninstall", corecommon.ResolveDescription(uninstallDocs.GetDescription(), uninstallDocs.GetAIDescription()), uninstallDocs.Usage), UsageText: uninstallDocs.GetArguments(), ArgsUsage: common.CreateEnvVars(), BashComplete: corecommon.CreateBashCompletionFunc("cursor", "claude"),