@createsomething/ground-mcp 0.3.4 → 0.3.6

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.
Files changed (3) hide show
  1. package/README.md +42 -59
  2. package/install.js +5 -5
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
  [![npm version](https://img.shields.io/npm/v/@createsomething/ground-mcp.svg)](https://www.npmjs.com/package/@createsomething/ground-mcp)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
- **Grounded claims for code.** An MCP server that prevents AI hallucination in code analysis.
6
+ **Grounded claims for code.** An MCP server that computes evidence before code-analysis claims.
7
7
 
8
- Works with Claude Code, Cursor, Windsurf, VS Code Copilot, Claude Desktop, and any MCP-compatible AI coding assistant.
8
+ The verified setup contract covers Claude Code, Codex, Cursor, and Windsurf.
9
9
 
10
10
  **[View Landing Page →](https://createsomething.agency/products/ground)**
11
11
 
@@ -13,12 +13,12 @@ Works with Claude Code, Cursor, Windsurf, VS Code Copilot, Claude Desktop, and a
13
13
 
14
14
  | Capability | Without Ground | With Ground |
15
15
  |------------|---------------|-------------|
16
- | Duplicate detection | "These look 95% similar" | Computed 87.3% similarity via AST + token analysis |
16
+ | Duplicate detection | "These look similar" | Computed AST + token similarity evidence |
17
17
  | Dead code claims | "This appears unused" | Verified: 0 imports, 0 type references |
18
18
  | Orphan detection | "Nothing imports this" | Checked: not a Worker entry point, not framework-implicit |
19
- | Design drift | "Colors look hardcoded" | Adoption ratio: 73% tokens, 27% violations |
19
+ | Design drift | "Colors look hardcoded" | Token usage and violation counts |
20
20
 
21
- **The difference**: Ground requires computation before claims. No hallucinated analysis.
21
+ **The difference**: Ground requires computation before its claim tools accept a claim.
22
22
 
23
23
  ## Recommended agent path
24
24
 
@@ -55,7 +55,7 @@ check in `check_coverage.<check>.status`. The contract is explicit:
55
55
  - `PASS`: the check completed for the relevant supported files and found no issue.
56
56
  - `FAIL`: the check found an issue or could not complete because of a read/parse failure.
57
57
  - `NOT_APPLICABLE`: no changed file needs that check.
58
- - `UNSUPPORTED`: relevant source exists, but the requested check cannot analyze its language (including Svelte duplicate-function scans).
58
+ - `UNSUPPORTED`: relevant source exists, but the requested check cannot analyze its language.
59
59
  - `TIMEOUT`: duplicate analysis reached its deadline before a complete result was available.
60
60
 
61
61
  `ground analyze` and `ground diff` accept `--timeout-ms` (120000 by default).
@@ -67,13 +67,21 @@ view; read `discovered_changed_files`, `analyzable_changed_files`, and
67
67
  `unsupported_changed_files` and `excluded_changed_files`, so a clean claim is
68
68
  valid only with `PASS`.
69
69
 
70
- Ground 0.3.4 adds source-bearing entry-point evidence to orphan analysis, so
71
- declarative Promptfoo and manual Ground configurations are recognized alongside
72
- package scripts. It keeps `ground diff`'s complete changed-file coverage and
73
- deterministic, cycle-safe source traversal. Diff mode parses the complete corpus
74
- but only compares pairs involving changed files. Standalone broad duplicate scans
75
- retain their safety bound and report a non-pass status with `scan_complete: false`
76
- when the bound is hit.
70
+ Ground 0.3.6 supports TypeScript (`.ts`, `.tsx`), JavaScript (`.js`, `.jsx`,
71
+ `.mjs`), and Svelte (`.svelte`) in the declared analysis lane. Svelte component
72
+ scripts participate in duplicate analysis, while SvelteKit configuration,
73
+ routes, aliases, actions, stores, and framework entry points inform reachability
74
+ and dead-export evidence. Svelte dead-export checks analyze module-context
75
+ scripts only; instance-script exports such as legacy `export let` props are
76
+ component API and are excluded. Inputs outside that contract remain unsupported
77
+ rather than being reported as clean.
78
+
79
+ Ground 0.3.5 extended source-bearing orphan evidence to nested Cloudflare Worker
80
+ configurations: `wrangler.toml` and `wrangler.json` `main` entries are protected
81
+ with their exact config source. The legacy `ground find orphans` command now
82
+ returns the same verified canonical report as `ground analyze --checks orphans`.
83
+ Promptfoo and manual Ground configurations remain recognized alongside package
84
+ scripts, and broad duplicate scans retain their explicit safety bound.
77
85
 
78
86
  The release package ships thin command wrappers for every platform. Install
79
87
  downloads the matching versioned release asset and verifies its SHA-256 against
@@ -103,9 +111,10 @@ manifest have completed successfully.
103
111
  If a release was built successfully but npm publication was blocked (for
104
112
  example, during Trusted Publishing setup), rerun **Ground Release** manually
105
113
  with its exact `ground-v<version>` tag and **publish only** enabled. That path
106
- checks out the tag, requires it to match `package.json`, and verifies the
107
- existing release checksum manifest before publishing; it does not rebuild or
108
- replace GitHub Release assets.
114
+ checks out the tag, executes the governed calibration fixture suite, binds its
115
+ result to the exact source, recomputes the ledger thresholds, requires the tag
116
+ to match `package.json`, and verifies the existing release checksum manifest
117
+ before publishing; it does not rebuild or replace GitHub Release assets.
109
118
 
110
119
  ## The Problem
111
120
 
@@ -121,8 +130,8 @@ This is hallucination dressed up as analysis.
121
130
 
122
131
  Ground is an MCP server that:
123
132
  - Finds duplicates, dead code, and orphaned modules
124
- - Requires verification before claims
125
- - Blocks hallucinated analysis
133
+ - Requires verification before its claim tools record a finding
134
+ - Keeps checked inputs with the recorded claim
126
135
  - Provides confidence scores with evidence
127
136
 
128
137
  ---
@@ -138,8 +147,7 @@ This is the one everyone gets wrong. Claude Code doesn't read `.claude/mcp.json`
138
147
  **Option A: User scope (available everywhere)**
139
148
 
140
149
  ```bash
141
- npm install @createsomething/ground-mcp
142
- claude mcp add --scope user --transport stdio ground -- npx @createsomething/ground-mcp
150
+ claude mcp add --scope user --transport stdio ground -- npx --yes -p @createsomething/ground-mcp ground-mcp
143
151
  ```
144
152
 
145
153
  Restart Claude Code, run `/mcp`, and you should see "ground" connected.
@@ -153,7 +161,7 @@ Create `.mcp.json` in your project root:
153
161
  "mcpServers": {
154
162
  "ground": {
155
163
  "command": "npx",
156
- "args": ["@createsomething/ground-mcp"]
164
+ "args": ["--yes", "-p", "@createsomething/ground-mcp", "ground-mcp"]
157
165
  }
158
166
  }
159
167
  }
@@ -161,37 +169,16 @@ Create `.mcp.json` in your project root:
161
169
 
162
170
  Claude Code will prompt you to approve it on first use.
163
171
 
164
- ### Cursor (One-Click)
165
-
166
- [**Install in Cursor →**](cursor://anysphere.cursor-deeplink/mcp/install?name=ground&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyJAY3JlYXRlc29tZXRoaW5nL2dyb3VuZC1tY3AiXX0%3D)
172
+ ### Cursor
167
173
 
168
- Or add to `.mcp.json` at your project root:
174
+ Add to `.mcp.json` at your project root:
169
175
 
170
176
  ```json
171
177
  {
172
178
  "mcpServers": {
173
179
  "ground": {
174
180
  "command": "npx",
175
- "args": ["@createsomething/ground-mcp"]
176
- }
177
- }
178
- }
179
- ```
180
-
181
- ### Claude Desktop
182
-
183
- Add to `claude_desktop_config.json`:
184
-
185
- - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
186
- - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
187
- - **Linux**: `~/.config/Claude/claude_desktop_config.json`
188
-
189
- ```json
190
- {
191
- "mcpServers": {
192
- "ground": {
193
- "command": "npx",
194
- "args": ["@createsomething/ground-mcp"]
181
+ "args": ["--yes", "-p", "@createsomething/ground-mcp", "ground-mcp"]
195
182
  }
196
183
  }
197
184
  }
@@ -206,22 +193,16 @@ Settings → MCP → View raw config, add:
206
193
  "mcpServers": {
207
194
  "ground": {
208
195
  "command": "npx",
209
- "args": ["@createsomething/ground-mcp"]
196
+ "args": ["--yes", "-p", "@createsomething/ground-mcp", "ground-mcp"]
210
197
  }
211
198
  }
212
199
  }
213
200
  ```
214
201
 
215
- ### VS Code + Copilot
216
-
217
- 1. Open Extensions panel
218
- 2. Filter by "MCP Server"
219
- 3. Search "ground"
220
-
221
202
  ### Codex CLI
222
203
 
223
204
  ```bash
224
- codex mcp add ground --command "npx @createsomething/ground-mcp"
205
+ codex mcp add ground -- npx --yes -p @createsomething/ground-mcp ground-mcp
225
206
  ```
226
207
 
227
208
  ### Global Install (When npx Isn't Your Thing)
@@ -269,7 +250,7 @@ Ground needs to know where your code is. For project-specific analysis, run it f
269
250
  "mcpServers": {
270
251
  "ground": {
271
252
  "command": "npx",
272
- "args": ["@createsomething/ground-mcp", "--workspace", "/path/to/your/project"]
253
+ "args": ["--yes", "-p", "@createsomething/ground-mcp", "ground-mcp", "--workspace", "/path/to/your/project"]
273
254
  }
274
255
  }
275
256
  }
@@ -392,7 +373,7 @@ Ground is based on a simple principle: **no claim without evidence**.
392
373
  - **Dead code** → You have to count the uses first
393
374
  - **Orphans** → You have to check the connections first
394
375
 
395
- This prevents AI hallucination by requiring computation before synthesis.
376
+ This keeps Ground's recorded claims tied to prerequisite computation.
396
377
 
397
378
  ## Configuration
398
379
 
@@ -416,11 +397,13 @@ entry_points:
416
397
  For `ground_find_orphans` and `ground_analyze`, orphan coverage includes
417
398
  `entry_point_evidence`: the exact path, entry-point type, and source Ground used
418
399
  to protect it. Alongside package, framework, test, and script entry points,
419
- Ground recognizes exact `entry_points.manual` declarations and local
400
+ Ground recognizes exact `entry_points.manual` declarations, nested
401
+ `wrangler.toml` and `wrangler.json` Worker `main` entries, and local
420
402
  `providers[].id`, `prompts[].id`, and assertion-value `file://…` references in
421
- `promptfooconfig*.yaml`. The Promptfoo adapter accepts only existing source
422
- files beneath that configuration file; it does not scan arbitrary YAML or
423
- follow parent/absolute paths.
403
+ `promptfooconfig*.yaml`. The config adapters accept only existing source files
404
+ beneath their configuration file; they do not scan arbitrary YAML or follow
405
+ parent/absolute paths. The legacy `ground find orphans` command returns this
406
+ same canonical orphan evidence.
424
407
 
425
408
  See [Full Documentation](https://github.com/createsomethingtoday/create-something-monorepo/tree/main/packages/ground) for configuration reference.
426
409
 
package/install.js CHANGED
@@ -17,11 +17,10 @@ const VERSION = require('./package.json').version;
17
17
  const SKIP_INSTALL = process.env.GROUND_MCP_SKIP_BINARY_INSTALL === '1';
18
18
  const IS_SOURCE_TREE_INSTALL = fs.existsSync(path.resolve(__dirname, '../Cargo.toml'));
19
19
 
20
- // Platform mapping
21
- // Note: macOS Intel uses arm64 binary via Rosetta 2
20
+ // Platform mapping. Every supported host receives a native archive.
22
21
  const PLATFORMS = {
23
22
  'darwin-arm64': 'darwin-arm64',
24
- 'darwin-x64': 'darwin-arm64', // Rosetta 2 compatibility
23
+ 'darwin-x64': 'darwin-x64',
25
24
  'linux-arm64': 'linux-arm64',
26
25
  'linux-x64': 'linux-x64',
27
26
  'win32-x64': 'win32-x64',
@@ -33,8 +32,8 @@ function getPlatformKey() {
33
32
  return `${platform}-${arch}`;
34
33
  }
35
34
 
36
- function getBinaryName() {
37
- const key = getPlatformKey();
35
+ function getBinaryName(platform = process.platform, arch = process.arch) {
36
+ const key = `${platform}-${arch}`;
38
37
  const name = PLATFORMS[key];
39
38
 
40
39
  if (!name) {
@@ -205,6 +204,7 @@ if (require.main === module) {
205
204
 
206
205
  module.exports = {
207
206
  download,
207
+ getBinaryName,
208
208
  getDownloadUrl,
209
209
  getChecksumsUrl,
210
210
  verifyArchiveIntegrity,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@createsomething/ground-mcp",
3
- "version": "0.3.4",
4
- "description": "Grounded claims for code. MCP server that prevents AI hallucination in code analysis.",
3
+ "version": "0.3.6",
4
+ "description": "Evidence-first code analysis for agents in TypeScript, JavaScript, and Svelte codebases.",
5
5
  "author": "CREATE SOMETHING <hello@createsomething.io>",
6
6
  "license": "MIT",
7
7
  "repository": {