Skip to content

Lowercase MCP tool and prompt copy to match brand casing - #231

Merged
rgarcia merged 3 commits into
mainfrom
hypeship/lowercase-mcp-copy
Oct 2, 2026
Merged

rgarcia merged 3 commits into
mainfrom
hypeship/lowercase-mcp-copy

Conversation

@rgarcia

@rgarcia rgarcia commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Applies KERNEL brand casing to the human-readable text this server sends to MCP clients. Prose is now lowercase, including sentence starts, headings, acronyms (id, api, url, totp, cdp, json, http, mfa, oauth) and technology or third-party names (playwright, chrome, link, agentcard, stripe, 1password). Every prose reference to the company or product is now KERNEL.

728 string literals changed across 42 source files under src/lib/mcp.

What changed

  • Tool title/description, annotation titles, every zod .describe(...) in input and output schemas, and zod refinement and validation messages.
  • Prompt descriptions, argument descriptions and prompt bodies (prompts.ts, including the debug guide), plus TELEMETRY_EVENT_CATALOG.
  • Text returned to the model: errorResponse/textResponse messages, throwToolError prefixes (error in <tool> (<action>): …), next_actions, notes, emptyText, guidance arrays, feedback RESPONSE_MESSAGES, managed-auth status and instruction strings, and resource-template errors and labels.
  • prompts.test.ts gets a new guard test (keeps advertised metadata and prompts in brand casing). It reuses the existing collection of every advertised description, title and prompt text. After stripping fenced and inline code, double-quoted literals, URLs, paths and constant-style identifiers (ERR_HTTP2_PROTOCOL_ERROR, MINTLIFY_DOMAIN), it fails on any uppercase letter outside KERNEL and on \bkernel\b in prose. The existing access-language checks are unchanged; they now share the setup helper.
  • Test expectations updated to the new copy, including negative not.toContain(...) assertions, which would otherwise pass trivially against lowercase text.

What is not changed

  • Machine-sensitive strings: code spans, fenced code, tool, parameter and prompt names, enum values, double-quoted literals the model sends back (action "list", provider: "kernel", key names like "Return"/"Ctrl+t"), URLs, paths, env var names, error codes, CLI commands (kernel browsers get …) and JSON examples.
  • Anything from the API or from test fixtures (for example mocked API messages and status: "AUTHENTICATED").
  • src/lib/mcp/apps/ (managed-auth app UI and generated bundle), logs, code comments, the OAuth/HTTP auth layer, and server startup config errors (KERNEL_MCP_*_TOOLSETS).
  • README: its tool sections are developer docs that sit alongside capitalized prose in the rest of the file. Changing only those sections would leave the README inconsistent, so it is out of scope here.

Changes beyond casing

The guard can only tell code from prose when the code is marked up, and lowercasing some text would change what it means. These are the only non-casing edits:

  • browser_repl description: the three full JavaScript examples are now wrapped in ```js fences. Code identifiers that appeared in prose (repl.write(JSON.stringify(value)), accessibilitySnapshot().nodes, innerHTML, the native helper list, sessionId, !pwBrowser.isConnected(), …) are now in backticks. CDP's Target domain is in backticks so it doesn't read as the word "target".
  • browser_repl section headers (LANGUAGE AND OUTPUT, …) are now ### markdown headers (### language and output, …) so they still read as section markers.
  • execute_playwright_code: webmcp.listTools() is now in backticks. webmcp: tool metadata and annotation field names (inputSchema, readOnlyHint, …) and tool.inputSchema are now in backticks. 1Password guidance: noExistingCredentials is now in backticks.
  • browser_curl: defaults to GET → defaults to "GET", and POST, PUT, or PATCH → "POST", "PUT", or "PATCH". These are enum values; plain lowercase "get" would be ambiguous.
  • manage_proxies country example: 'US' → "US", since it's an API value and lowercase 'us' reads as a pronoun.
  • manage_auth_connections credential_path example: 'VaultName/ItemName' → `VaultName/ItemName` (backticked so it keeps the real name casing).
  • Two example sentences in quotes are prose the agent may say, not literals, so they were lowercased: the 1password-vs-KERNEL question in manage_vault_credentials, and the _intent example.

Testing

  • bunx tsc --noEmit --incremental false
  • bun test (847 pass, 0 fail)
  • bun run check:managed-auth-app
  • bunx prettier --check "src/**/*.ts"
  • I checked the guard against deliberate regressions: putting Kernel or kernel back in a tool title makes it fail.

@vercel

vercel Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
mcp Ready Ready Preview Oct 2, 2026 5:21pm UTC

@rgarcia
rgarcia requested a review from masnwilliams October 1, 2026 20:33

@masnwilliams masnwilliams left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm. the guard test catches the regressions that matter, and nothing in the server parses the old casing. two optional nits inline.

Comment thread src/lib/mcp/tools/auth-connections.ts Outdated
Comment thread src/lib/mcp/tools/browser-repl.ts Outdated
@rgarcia
rgarcia merged commit 52faf51 into main Oct 2, 2026
10 checks passed
@rgarcia
rgarcia deleted the hypeship/lowercase-mcp-copy branch October 2, 2026 18:23

This branch was successfully deployed

1 active deployment
Preview — 3b7506d4 Deployed Oct 2, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants