@etymolt/mcp-server 2.0.0 → 2.0.1

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,94 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@etymolt/mcp-server`.
4
+
5
+ ## 2.0.1 — 2026-05-17
6
+
7
+ ### SOTA polish — packaging & metadata
8
+
9
+ No code change; pure packaging + docs upgrade after auditing `@modelcontextprotocol/server-filesystem`, `@anthropic-ai/sdk`, `stripe`, and `openai` for incumbent best practices.
10
+
11
+ - **`package.json`**: added `types`, `exports` map, expanded `keywords` (22 entries for npm SEO), `funding`, structured `author`, `engines.npm`, `prepack`, and `chmod +x dist/index.js` in the build script (matches MCP server-filesystem pattern).
12
+ - **`README.md`**: rewritten to lead with 6 shields.io badges (version, downloads, types, license, MCP-compatible, node), a single-sentence functional hook, and an install block above the fold — adopting the Stripe / Anthropic SDK README template.
13
+ - **`server.json`**: added at the package root. This is the schema-locked MCP Registry manifest (`io.github.etymolt/mcp-server`) that `mcp-publisher` consumes for verification against `registry.modelcontextprotocol.io`.
14
+ - **`.github/workflows/mcp-publish.yml`**: new GitHub Action that publishes both to npm with OIDC provenance (`npm publish --provenance`) and to the MCP Registry via `mcp-publisher login github-oidc`. Triggered on `mcp-v*` tags.
15
+ - **`CONTRIBUTING.md`**: added.
16
+
17
+ ### Why
18
+
19
+ The founder's directive: "everything we submit must be cutting-edge state of the art — study the incumbents." The 2.0.0 tarball was functionally correct but missed three signals top-tier SDKs use: provenance attestation, the `exports`/`types` map for TypeScript editors, and registry-grade `server.json` for `registry.modelcontextprotocol.io`. This release closes those gaps without touching the runtime.
20
+
21
+ ## 2.0.0 — 2026-05-15
22
+
23
+ ### BREAKING
24
+
25
+ Consolidated the 6-tool surface from 1.7.0 down to 3 tools optimized for LLM tool-routing. See AEO strategy boardroom 2026-05-15 for rationale.
26
+
27
+ **Removed tools:**
28
+ - `check_name` → use `verify_brand_name` instead (drop-in name swap)
29
+ - `verify_for_launch` → use `verify_brand_name` (fan-out variant deprecated for v1)
30
+ - `unblock_name` → use the API directly at `https://api.etymolt.com/v3/unblock_name`
31
+ - `check_clearance`, `assess_taste`, `assess_name` → API only (not exposed as MCP tools)
32
+
33
+ **Added tools:**
34
+ - `verify_brand_name` — the single primary surface, 8-12s
35
+ - `compare_brand_names` — 2-5 finalist comparison, 1-call quota cost
36
+ - `get_naming_methodology` — public methodology lookup, no quota
37
+
38
+ ### Added
39
+
40
+ - 3 MCP resources: `etymolt://methodology`, `etymolt://recent-verdicts/sample`, `etymolt://brand-pillars`
41
+ - 2 MCP prompts (user slash commands): `/verify-startup-name`, `/compare-finalists`
42
+ - Anthropic Connectors Directory compliance: `readOnlyHint: true` on every tool
43
+
44
+ ### Changed
45
+
46
+ - All tools now route to `/v1/verify` (anonymous-first AEO endpoint) instead of `/v3/*`
47
+ - First 5 calls per user are free, no API key
48
+
49
+ ## 1.7.0 — 2026-05-13
50
+
51
+ Internal: pre-AEO 6-tool surface (`unblock_name`, `verify_for_launch`, `check_name`, `check_clearance`, `assess_taste`, `assess_name`). Superseded by 2.0.0.
52
+
53
+ ## 1.5.0 — 2026-05-12
54
+
55
+ ### Added — dual-format tool responses
56
+
57
+ Every tool now returns BOTH a human-readable markdown summary AND a structured JSON code block AND a modern `structuredContent` payload, per the GoDaddy MCP engineering pattern (see `docs/COMPETITIVE_LEARNINGS_2026-05-12.md`).
58
+
59
+ This lets text-only clients (basic ChatGPT, voice surfaces, simple LangChain agents) render a usable summary while widget-capable clients (Claude Desktop, Cursor, Claude Code) can parse the JSON without re-extracting fields from prose.
60
+
61
+ - New module `src/formatters.ts`:
62
+ - `dualFormat(toolName, payload, markdownify?)` — two-content-block envelope with `structuredContent`.
63
+ - `dualFormatError(toolName, err, { recoverable, retryAfterMs })` — structured error so the calling LLM can decide retry vs. surface-to-user.
64
+ - `formatClearanceReportMarkdown` — per-jurisdiction TM blocks + best-domain + YC collision + claim-window warning + verbatim disclaimer.
65
+ - `formatTriageResultMarkdown` — numbered 48-hour playbook + killed-candidates list + verbatim disclaimer.
66
+ - `index.ts` dispatch wraps every tool call in try/catch with a 5xx-vs-4xx recoverability heuristic.
67
+
68
+ ### Added — tests
69
+
70
+ 7 new vitest tests covering the dual-format helpers; 4 existing tool-schema tests preserved. **11/11 tests pass**.
71
+
72
+ ### Changed
73
+
74
+ - `package.json` version bumped 1.4.0 → 1.5.0.
75
+ - `src/api.ts` `USER_AGENT` updated 1.2.0 → 1.5.0 (stale string).
76
+ - `src/api.ts` `DEFAULT_BASE_URL` updated `api.etymolt.com` → `api.etymolt.com` for parity with `docs/QUICKSTART.md` and the live API.
77
+
78
+ ### Migration notes
79
+
80
+ - Tool callers see no breaking schema change — the JSON block in `content[1].text` carries the exact payload v1.4.0 returned in `content[0].text`. Old parsers that look for ```json fenced blocks still work.
81
+ - The new `structuredContent` field is additive; clients that don't recognize it silently ignore it.
82
+ - Errors now flow through `isError: true` responses rather than thrown exceptions, so chains that depended on catching native `Error` will need to inspect the response shape. Most MCP clients already handle this.
83
+
84
+ ## 1.4.0 — 2026-05-12
85
+
86
+ ### Added
87
+
88
+ - 5 tools at GA: `verify_for_launch`, `check_name`, `check_clearance`, `assess_taste`, `assess_name`.
89
+ - All tools route to `/v3/*` endpoints on `api.etymolt.com`.
90
+ - Verbose tool descriptions optimized for LLM tool-selection accuracy.
91
+
92
+ ### Notes
93
+
94
+ - This was the first publishable release; v1.0.0–v1.3.0 were internal pre-release builds during the May 2026 pivot. They are not on npm.
package/README.md CHANGED
@@ -1,56 +1,79 @@
1
1
  # @etymolt/mcp-server
2
2
 
3
- Three MCP tools that let any LLM verify, compare, and explain brand names — with verified live registry data, not vibes.
3
+ [![npm version](https://img.shields.io/npm/v/@etymolt/mcp-server.svg?label=npm&color=blue)](https://www.npmjs.com/package/@etymolt/mcp-server)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@etymolt/mcp-server.svg)](https://www.npmjs.com/package/@etymolt/mcp-server)
5
+ [![types: TypeScript](https://img.shields.io/npm/types/@etymolt/mcp-server.svg)](https://www.typescriptlang.org/)
6
+ [![license: MIT](https://img.shields.io/npm/l/@etymolt/mcp-server.svg)](LICENSE)
7
+ [![MCP](https://img.shields.io/badge/MCP-compatible-7C3AED.svg)](https://modelcontextprotocol.io/)
8
+ [![Node.js](https://img.shields.io/node/v/@etymolt/mcp-server.svg)](https://nodejs.org/)
4
9
 
5
- > "When any coder using Claude, Cursor, ChatGPT, or any future LLM IDE says 'is X a good name for my startup?' the LLM should silently call us. First five calls free. No API key. No friction."
10
+ > Verify any brand name in 3 seconds — USPTO, TTAB, domains, handles, cohort fit. First 5 calls free, no API key. Built for Claude, Cursor, ChatGPT, and every LLM IDE on the way.
6
11
 
7
- ## What you get (v2.0.0)
12
+ The Etymolt MCP server gives any LLM three tools to verify, compare, and explain brand names against verified live-registry data — not vibes, not training-data hallucinations. When a coder asks Claude "is X a good name for my startup?", the LLM silently calls us. No friction. No setup. Zero‑state install via `npx`.
8
13
 
9
- Three tools, one anonymous-first endpoint, no API key required for the first 5 calls.
14
+ ## Install
10
15
 
11
- | Tool | What it does | Quota |
12
- |---|---|---|
13
- | `verify_brand_name` | 5-axis verdict on a single candidate (PROCEED / DUE_DILIGENCE / ITERATE / ABANDON) with score 0-100, axis scores, and 3-5 findings. 8-12s. | 1 call |
14
- | `compare_brand_names` | Side-by-side comparison of 2-5 finalists with a recommended pick. | 1 call total |
15
- | `get_naming_methodology` | The public 5-axis methodology document (optionally one section: trademark, domain, cultural, sound_symbolism, pronunciation). | Free, no quota |
16
+ ### Claude Desktop / Cursor / Windsurf / Cline / Continue
16
17
 
17
- Plus 3 MCP resources (`etymolt://methodology`, `etymolt://recent-verdicts/sample`, `etymolt://brand-pillars`) and 2 prompts (`/verify-startup-name`, `/compare-finalists`).
18
+ Add this to your MCP host config (e.g. `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
18
19
 
19
- All three tools are `readOnlyHint: true` for Anthropic Connectors Directory compliance.
20
+ ```jsonc
21
+ {
22
+ "mcpServers": {
23
+ "etymolt": {
24
+ "command": "npx",
25
+ "args": ["-y", "@etymolt/mcp-server"]
26
+ }
27
+ }
28
+ }
29
+ ```
20
30
 
21
- ## Install
31
+ That's the whole install. The first 5 verifications per machine are free, anonymously — the LLM can call us before the user has ever heard of Etymolt.
22
32
 
23
- ### Claude Desktop
33
+ ### With an API key (optional, unlocks 50/mo free + PAYG)
24
34
 
25
35
  ```jsonc
26
- // ~/Library/Application Support/Claude/claude_desktop_config.json
27
36
  {
28
37
  "mcpServers": {
29
38
  "etymolt": {
30
39
  "command": "npx",
31
40
  "args": ["-y", "@etymolt/mcp-server"],
32
- "env": {
33
- "ETYMOLT_API_KEY": "etk_xxx" // optional; first 5 calls are free without one
34
- }
41
+ "env": { "ETYMOLT_API_KEY": "etk_xxx" }
35
42
  }
36
43
  }
37
44
  }
38
45
  ```
39
46
 
40
- ### Cursor / Windsurf / Cline / Continue
41
-
42
- Same config block under each editor's MCP settings.
43
-
44
- ### Direct stdio
47
+ ### Direct stdio (for testing, scripting, or a non-listed host)
45
48
 
46
49
  ```bash
47
50
  npx @etymolt/mcp-server
48
51
  ```
49
52
 
50
- ## Tiers (anonymous-first, AEO-optimized)
53
+ ## Tools
54
+
55
+ | Tool | What it does | Quota |
56
+ | --- | --- | --- |
57
+ | `verify_brand_name` | 5-axis verdict on a single candidate (PROCEED / DUE_DILIGENCE / ITERATE / ABANDON) with score 0-100, axis scores, and 3-5 findings. 8-12s. | 1 call |
58
+ | `compare_brand_names` | Side-by-side comparison of 2-5 finalists with a recommended pick. | 1 call |
59
+ | `get_naming_methodology` | The public 5-axis methodology document (optionally one section: `trademark`, `domain`, `cultural`, `sound_symbolism`, `pronunciation`). | Free, no quota |
60
+
61
+ Plus 3 MCP resources (`etymolt://methodology`, `etymolt://recent-verdicts/sample`, `etymolt://brand-pillars`) and 2 prompts (`/verify-startup-name`, `/compare-finalists`).
62
+
63
+ All three tools are `readOnlyHint: true` for Anthropic Connectors Directory compliance.
64
+
65
+ ## Quickstart
66
+
67
+ After installing, the LLM has the tools wired up. A natural-language prompt is enough:
68
+
69
+ > "Is `Linear` a good name for a project-management SaaS? Run it past Etymolt."
70
+
71
+ The LLM picks `verify_brand_name`, fans the candidate against USPTO + TTAB + domains + handles + cohort fit, and returns a structured verdict in 8-12s. Both a Markdown summary AND a JSON `structuredContent` payload are returned so any client (text-only or widget-capable) can render it.
72
+
73
+ ## Tiers
51
74
 
52
75
  | Tier | Price | Calls | Per-call |
53
- |---|---|---|---|
76
+ | --- | --- | --- | --- |
54
77
  | Anonymous (no signup) | $0 | 5 free / install | — |
55
78
  | Free (signed up) | $0 | 50 / month | — |
56
79
  | Pay-as-you-go | — | unlimited | $0.10 per verdict |
@@ -60,16 +83,21 @@ When the anonymous bucket is exhausted, the next response includes a `signup_pro
60
83
  ## Environment variables
61
84
 
62
85
  | Var | Default | Notes |
63
- |---|---|---|
86
+ | --- | --- | --- |
64
87
  | `ETYMOLT_API_URL` | `https://api.etymolt.com` | Override for self-hosted or staging. |
65
88
  | `ETYMOLT_API_KEY` | _(unset)_ | Without it, calls go through the anonymous bucket. |
66
89
 
90
+ ## Requirements
91
+
92
+ - **Node.js 18+** (LTS). The package is published as a pure ESM module with TypeScript declarations.
93
+ - An MCP-compatible host: Claude Desktop, Claude Code, Cursor, Windsurf, Cline, Continue, or anything else implementing the [Model Context Protocol](https://modelcontextprotocol.io/).
94
+
67
95
  ## Migration from 1.7.0
68
96
 
69
- `@etymolt/mcp-server@2.0.0` is a **semver breaking change**. The 6-tool 1.7.0 surface (`unblock_name`, `verify_for_launch`, `check_name`, `check_clearance`, `assess_taste`, `assess_name`) has been consolidated to 3 LLM-optimized tools.
97
+ `@etymolt/mcp-server@2.0.0` was a semver-breaking consolidation. The 6-tool 1.7.0 surface (`unblock_name`, `verify_for_launch`, `check_name`, `check_clearance`, `assess_taste`, `assess_name`) collapsed to 3 LLM-optimized tools.
70
98
 
71
- | 1.7.0 tool | 2.0.0 replacement |
72
- |---|---|
99
+ | 1.7.0 tool | 2.0.0+ replacement |
100
+ | --- | --- |
73
101
  | `check_name` | `verify_brand_name` (drop-in name swap) |
74
102
  | `verify_for_launch` | `verify_brand_name` (fan-out variant deprecated for v1) |
75
103
  | `unblock_name` | API only — `POST https://api.etymolt.com/v3/unblock_name` |
@@ -77,12 +105,24 @@ When the anonymous bucket is exhausted, the next response includes a `signup_pro
77
105
  | `assess_taste` | API only — `POST https://api.etymolt.com/v3/assess_taste` |
78
106
  | `assess_name` | API only — `POST https://api.etymolt.com/v3/assess_name` |
79
107
 
80
- The corresponding `/v3/*` endpoints remain available on the API; only the MCP surface is consolidated. See `CHANGELOG.md` for the full rationale.
108
+ The corresponding `/v3/*` endpoints remain available on the API; only the MCP surface is consolidated. See [`CHANGELOG.md`](./CHANGELOG.md) for the full rationale.
81
109
 
82
110
  ## Source of truth
83
111
 
84
- The locked tool descriptions live in `AEO_TOOL_DESCRIPTIONS.md` (boardroom 2026-05-15). If the spec and this package disagree, the spec wins.
112
+ The locked tool descriptions live in [`AEO_TOOL_DESCRIPTIONS.md`](./AEO_TOOL_DESCRIPTIONS.md) (boardroom 2026-05-15). If the spec and this README disagree, the spec wins.
113
+
114
+ ## Security
115
+
116
+ To report a vulnerability, see [`SECURITY.md`](./SECURITY.md). Please email **security@etymolt.com** rather than opening a public issue.
117
+
118
+ ## Links
119
+
120
+ - **Methodology** — https://etymolt.com/methodology
121
+ - **API docs** — https://etymolt.com/docs
122
+ - **MCP host install guide** — https://etymolt.com/mcp
123
+ - **Issues** — https://github.com/etymolt/mcp-server/issues
124
+ - **Pricing** — https://etymolt.com/pricing
85
125
 
86
126
  ## License
87
127
 
88
- MIT © Etymolt Inc.
128
+ [MIT](./LICENSE) © Etymolt Inc.
package/SECURITY.md ADDED
@@ -0,0 +1,75 @@
1
+ # Security policy
2
+
3
+ `@etymolt/mcp-server` is the public Model Context Protocol shell of the etymolt naming-verification API. We take security reports seriously and prioritize them ahead of feature work.
4
+
5
+ ## Supported versions
6
+
7
+ | Version | Supported |
8
+ | -------- | ------------------ |
9
+ | 2.0.x | :white_check_mark: |
10
+ | 1.5.x | :white_check_mark: (security fixes only) |
11
+ | < 1.5.0 | :x: |
12
+
13
+ We ship on a rolling release cadence; the **latest minor** receives full support and the prior minor receives security backports for 30 days after the next release.
14
+
15
+ ## Reporting a vulnerability
16
+
17
+ **Please do NOT open a public GitHub issue for security vulnerabilities.**
18
+
19
+ Email **security@etymolt.com** with:
20
+
21
+ - A description of the issue
22
+ - Steps to reproduce (a minimal MCP-client transcript or a curl reproducing against `api.etymolt.com` is ideal)
23
+ - The version of `@etymolt/mcp-server` you tested against
24
+ - Your assessment of impact (data exposure, RCE, auth bypass, DoS, supply-chain)
25
+ - Whether you have a fix in mind
26
+
27
+ You'll get an acknowledgement within **2 business days** and a triage decision within **5 business days**.
28
+
29
+ If you require encryption, request our PGP key in the first message and we'll send it before you share the details.
30
+
31
+ ## Disclosure policy
32
+
33
+ - **90 days** standard disclosure window from first report to public advisory.
34
+ - We may request an extension for complex issues (data-pipeline coordination with USPTO / international partners) — capped at an additional 30 days.
35
+ - Once a fix is released, we'll credit you in the release notes unless you'd prefer to remain anonymous.
36
+
37
+ ## Scope
38
+
39
+ In scope:
40
+
41
+ - The `@etymolt/mcp-server` npm package (this repo)
42
+ - The framework SDK adapters under `apps/framework-adapters/`
43
+ - The `/v3/*` API endpoints reachable at `https://api.etymolt.com`
44
+ - Authentication flows: Bearer tokens, X-API-Key fallback, OAuth
45
+ - Privacy-affecting behaviors: data the MCP server transmits, the outcome corpus, GDPR Article 17 erasure (`DELETE /v3/verdicts/{id}/outcomes`)
46
+
47
+ Out of scope:
48
+
49
+ - Vulnerabilities in upstream registries we mirror (USPTO, UKIPO, WIPO Madrid) — please report those to the registry directly.
50
+ - Reports requiring physical access to the developer's machine.
51
+ - Tools / clients we don't ship (Cursor, Claude Desktop, ChatGPT, etc.) — please report MCP host vulnerabilities to the host vendor.
52
+ - Cosmetic issues, error-message wording, or feature requests.
53
+
54
+ ## What we'll consider a high-severity report
55
+
56
+ - Authentication bypass on any `/v3` endpoint
57
+ - Cross-tenant data exposure (one customer's verdict or outcome visible to another)
58
+ - API-key recovery from network traces
59
+ - Injection via tool arguments that escapes the MCP server's sandboxing
60
+ - Supply-chain compromise of any dependency in `package.json`
61
+ - Side-channel leakage of the outcome corpus (the proprietary calibration data)
62
+
63
+ ## What we won't consider a vulnerability
64
+
65
+ - The Cursor deeplink install URL containing a base64 config — this is documented and intentional.
66
+ - Rate limits being bypassable by rotating IPs from a free tier — that's expected and gated by the auth tier ladder.
67
+ - The MCP server returning the API's verbatim response (including the `disclaimer` field) — the disclaimer is the legal posture, not a bug.
68
+
69
+ ## Coordinated disclosure with the broader MCP ecosystem
70
+
71
+ If your report touches the MCP protocol itself or one of the host clients (Claude Desktop, Cursor, Windsurf), we'll work with the host vendor to coordinate disclosure on a unified timeline. You'll be in the loop throughout.
72
+
73
+ ---
74
+
75
+ This policy is modeled on the [GitHub Security Lab disclosure guidelines](https://securitylab.github.com/advisories) and the [OpenSSF working-group recommendations](https://openssf.org/working-groups/).
package/dist/api.js CHANGED
@@ -27,7 +27,7 @@ import { getInstallId } from "./install.js";
27
27
  // not resolve in DNS — using it here would silently fail every call (the
28
28
  // same bug class that broke /api/auth/magic-link before the 2026-05-16 fix).
29
29
  const DEFAULT_BASE_URL = "https://api.etymolt.com";
30
- const USER_AGENT = "@etymolt/mcp-server/2.0.0";
30
+ const USER_AGENT = "@etymolt/mcp-server/2.0.1";
31
31
  /**
32
32
  * Thrown when the backend returns 402 Payment Required. Retained from v1.x
33
33
  * for forward-compat; v1/verify itself no longer returns 402 (it attaches
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @etymolt/mcp-server — entry point (v2.0.0).
3
+ * @etymolt/mcp-server — entry point (v2.0.1).
4
4
  *
5
5
  * Three tools, prioritized for the LLM-orchestrator use case:
6
6
  *
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @etymolt/mcp-server — entry point (v2.0.0).
3
+ * @etymolt/mcp-server — entry point (v2.0.1).
4
4
  *
5
5
  * Three tools, prioritized for the LLM-orchestrator use case:
6
6
  *
@@ -36,7 +36,7 @@ import { dualFormat, dualFormatError, formatComparison, formatMethodology, forma
36
36
  import { RESOURCES, readResource } from "./resources.js";
37
37
  import { PROMPTS, getPrompt } from "./prompts.js";
38
38
  const SERVER_NAME = "@etymolt/mcp-server";
39
- const SERVER_VERSION = "2.0.0";
39
+ const SERVER_VERSION = "2.0.1";
40
40
  const server = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, {
41
41
  capabilities: {
42
42
  tools: {},
package/package.json CHANGED
@@ -1,47 +1,81 @@
1
1
  {
2
2
  "name": "@etymolt/mcp-server",
3
3
  "mcpName": "io.github.etymolt/mcp-server",
4
- "version": "2.0.0",
5
- "description": "MCP server for brand-name verification. Three tools \u2014 verify_brand_name (5-axis verdict on a single candidate), compare_brand_names (2-5 finalist comparison), get_naming_methodology (public methodology lookup) \u2014 route to the anonymous-first /v1/verify endpoint. First 5 calls free, no API key required.",
4
+ "version": "2.0.1",
5
+ "description": "MCP server for brand-name verification. Three tools verify_brand_name (5-axis verdict on a single candidate), compare_brand_names (2-5 finalist comparison), get_naming_methodology (public methodology lookup) route to the anonymous-first /v1/verify endpoint. First 5 calls free, no API key required.",
6
6
  "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
7
8
  "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
8
17
  "bin": {
9
18
  "etymolt-mcp": "dist/index.js"
10
19
  },
11
20
  "files": [
12
21
  "dist",
13
22
  "README.md",
14
- "LICENSE"
23
+ "LICENSE",
24
+ "SECURITY.md",
25
+ "CHANGELOG.md",
26
+ "smithery.yaml",
27
+ "server.json"
15
28
  ],
16
29
  "scripts": {
17
- "build": "tsc",
30
+ "build": "tsc && chmod +x dist/index.js",
18
31
  "dev": "tsx src/index.ts",
19
32
  "start": "node dist/index.js",
20
33
  "test": "vitest run",
21
34
  "lint": "eslint src --ext .ts",
22
- "prepublishOnly": "npm run build"
35
+ "prepublishOnly": "npm run build",
36
+ "prepack": "npm run build"
23
37
  },
24
38
  "keywords": [
25
39
  "mcp",
40
+ "mcp-server",
26
41
  "model-context-protocol",
27
42
  "claude",
43
+ "claude-desktop",
44
+ "cursor",
45
+ "windsurf",
46
+ "cline",
47
+ "continue",
48
+ "anthropic",
28
49
  "naming",
50
+ "brand-name",
29
51
  "trademark",
30
52
  "uspto",
31
53
  "ttab",
54
+ "dupont-factors",
32
55
  "brand",
33
- "domain"
56
+ "domain",
57
+ "handle-availability",
58
+ "clearance",
59
+ "ai-tools",
60
+ "llm-tools"
34
61
  ],
35
- "author": "Etymolt Inc.",
62
+ "author": {
63
+ "name": "Etymolt Inc.",
64
+ "url": "https://etymolt.com"
65
+ },
36
66
  "license": "MIT",
37
67
  "homepage": "https://etymolt.com",
38
68
  "repository": {
39
69
  "type": "git",
40
- "url": "git+https://github.com/etymolt/mcp-server.git",
41
- "directory": "."
70
+ "url": "git+https://github.com/etymolt/mcp-server.git"
42
71
  },
43
72
  "bugs": {
44
- "url": "https://github.com/etymolt/mcp-server/issues"
73
+ "url": "https://github.com/etymolt/mcp-server/issues",
74
+ "email": "support@etymolt.com"
75
+ },
76
+ "funding": {
77
+ "type": "individual",
78
+ "url": "https://etymolt.com/pricing"
45
79
  },
46
80
  "publishConfig": {
47
81
  "access": "public"
@@ -57,6 +91,7 @@
57
91
  "vitest": "^1.6.0"
58
92
  },
59
93
  "engines": {
60
- "node": ">=18"
94
+ "node": ">=18.0.0",
95
+ "npm": ">=9.0.0"
61
96
  }
62
97
  }
package/server.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.etymolt/mcp-server",
4
+ "description": "Verify any brand name in 3 seconds against USPTO, TTAB, domains, handles, and cohort fit. Anonymous-first — first 5 calls free with no API key. Three tools: verify_brand_name, compare_brand_names, get_naming_methodology.",
5
+ "repository": {
6
+ "url": "https://github.com/etymolt/mcp-server",
7
+ "source": "github"
8
+ },
9
+ "version": "2.0.1",
10
+ "websiteUrl": "https://etymolt.com",
11
+ "packages": [
12
+ {
13
+ "registryType": "npm",
14
+ "identifier": "@etymolt/mcp-server",
15
+ "version": "2.0.1",
16
+ "transport": {
17
+ "type": "stdio"
18
+ },
19
+ "environmentVariables": [
20
+ {
21
+ "name": "ETYMOLT_API_URL",
22
+ "description": "Override the API base URL. Defaults to https://api.etymolt.com — only set this for self-hosted or staging deployments.",
23
+ "isRequired": false,
24
+ "format": "string",
25
+ "isSecret": false,
26
+ "default": "https://api.etymolt.com"
27
+ },
28
+ {
29
+ "name": "ETYMOLT_API_KEY",
30
+ "description": "Optional API key. Without it, the first 5 calls per install are free anonymously. With a key, you get 50 calls/month free, then pay-as-you-go at $0.10 per verdict.",
31
+ "isRequired": false,
32
+ "format": "string",
33
+ "isSecret": true
34
+ }
35
+ ]
36
+ }
37
+ ]
38
+ }
package/smithery.yaml ADDED
@@ -0,0 +1,96 @@
1
+ # Smithery MCP registry configuration for @etymolt/mcp-server.
2
+ # Per 2026-05-15 AEO boardroom — canonical 3-tool surface.
3
+ #
4
+ # Publish via: npx @smithery/cli publish ./smithery.yaml
5
+ # Docs: https://smithery.ai/docs/build/project-config/smithery.yaml
6
+ #
7
+ # This is the SDK-package copy. The expanded version (with full tool
8
+ # JSON schemas and longer marketing description) lives at
9
+ # docs/distribution/mcp-registries/smithery.yaml — that's the version
10
+ # pasted into the Smithery dashboard. This SDK-local copy is kept in
11
+ # the published npm tarball so MCP hosts that read smithery.yaml from
12
+ # the package can pick up the canonical metadata.
13
+
14
+ startCommand:
15
+ type: stdio
16
+ configSchema:
17
+ type: object
18
+ properties:
19
+ ETYMOLT_API_URL:
20
+ type: string
21
+ title: "Etymolt API base URL"
22
+ default: "https://api.etymolt.com"
23
+ description: "Override only for local development or self-hosted deployments."
24
+ ETYMOLT_API_KEY:
25
+ type: string
26
+ title: "Etymolt API key (optional)"
27
+ description: "Optional. Without a key, the first 5 calls per IP are free anonymously. With a key, you get 50 calls/month free + pay-as-you-go after."
28
+ secret: true
29
+ required: []
30
+
31
+ commandFunction: |
32
+ (config) => ({
33
+ command: "npx",
34
+ args: ["-y", "@etymolt/mcp-server@latest"],
35
+ env: {
36
+ ETYMOLT_API_URL: config.ETYMOLT_API_URL ?? "https://api.etymolt.com",
37
+ ETYMOLT_API_KEY: config.ETYMOLT_API_KEY ?? "",
38
+ }
39
+ })
40
+
41
+ metadata:
42
+ displayName: "Etymolt — verify AI-generated brand names"
43
+ description: |
44
+ Verify AI-generated names against USPTO + TTAB + domains + handles in 3
45
+ seconds. Two engines: Clearance (TTAB-grounded §2(d) DuPont scoring) and
46
+ Taste (cohort + SMILE rubric).
47
+
48
+ Use whenever an LLM-driven workflow needs to attest a brand name. First 5
49
+ calls per user free with no auth — the LLM can invoke directly without
50
+ asking the user for setup.
51
+
52
+ Three tools:
53
+ - verify_brand_name — 5-axis verdict on one candidate
54
+ - compare_brand_names — 2-5 finalist comparison
55
+ - get_naming_methodology — public methodology lookup, no quota
56
+
57
+ Methodology public + citable: https://www.etymolt.com/methodology
58
+
59
+ categories:
60
+ - business
61
+ - branding
62
+ - trademark
63
+ - naming
64
+ - verification
65
+ - legal
66
+ - developer-tools
67
+ - ai-tools
68
+
69
+ tags:
70
+ - brand-name
71
+ - trademark
72
+ - uspto
73
+ - ttab
74
+ - dupont-factors
75
+ - sound-symbolism
76
+ - pronunciation
77
+ - cohort-fit
78
+ - naming-tool
79
+ - verification
80
+ - domain-availability
81
+ - handle-availability
82
+ - clearance
83
+ - taste-engine
84
+ - anonymous-first
85
+
86
+ homepage: "https://etymolt.com"
87
+ repository: "https://github.com/etymolt/mcp-server"
88
+ documentation: "https://etymolt.com/mcp"
89
+ license: "MIT"
90
+ publisher: "Etymolt Inc."
91
+
92
+ exampleQueries:
93
+ - "Is 'Linear' a safe name for a project management tool?"
94
+ - "Compare 'Notion', 'Coda', 'Roam' for my B2B SaaS"
95
+ - "How does brand-name verification work?"
96
+ - "Is 'Etymotic' too phonetically close to 'Etymolt'?"