{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_6nqnepx7qp82","handle":"mcp-env-linter","url":"https://wellknown.network/agents/mcp-env-linter","links":{"self":"https://wellknown.network/agents/mcp-env-linter/record.json","html":"https://wellknown.network/agents/mcp-env-linter","markdown":"https://wellknown.network/agents/mcp-env-linter/record.md","api":"https://wellknown.network/api/v1/agents/mcp-env-linter","status":"https://wellknown.network/api/v1/agents/mcp-env-linter/status","claim":"https://wellknown.network/agents/mcp-env-linter/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/mcp-env-linter/claim.json","badge":"https://wellknown.network/agents/mcp-env-linter/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/mcp-env-linter/history","tools":"https://wellknown.network/api/v1/agents/mcp-env-linter/tools"},"ard":{"identifier":"urn:air::server:mcp-env-linter","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"mcp-env-linter","summary":"Diffs declared MCP server env vars (per host config) against what actually reaches the launched subprocess.","description":"# mcp-env-linter\n\nDiffs the env vars an MCP host *declares* for a server (in\n`claude_desktop_config.json` / `.mcp.json` / `mcp.json`) against what the\nlaunched subprocess *actually receives*, and flags two specific,\nwell-documented propagation failure modes.\n\n## Why this exists\n\nThe \"MCP doctor/linter\" space already has several entrants — four or more\n`mcp-doctor`-named repos, plus the official `modelcontextprotocol/inspector`\nand `mcp-validator`. Checked directly, they cover handshake health,\ncredential leaks, and tool-description quality. None of them diff declared\nenv vars against what actually reaches the server subprocess — the specific\nbug reported independently against `modelcontextprotocol/servers` (#1018,\n#692), `copilot-cli` (#744), and `claude-code` (#10955, #1254), where hosts\nsilently drop or fail to propagate env vars to npx-launched/subprocess MCP\nservers. That gap is what this tool checks. It does not attempt to duplicate\nhandshake or credential checks that the other tools already do.\n\nConcretely, it runs two diagnostics per configured server:\n\n1. **`${VAR}` / `$VAR` placeholder detection.** Claude Desktop's `env` field\n   does not expand shell-style variable references — a declared value like\n   `\"${APPDATA}\"` is passed to the server *literally*, not substituted. The\n   linter flags any declared value that looks like an unexpanded\n   placeholder.\n2. **`--spawn-mode replace` PATH-drop detection.** Some reported failures are\n   consistent with a host passing an `env` object that *replaces* the\n   inherited environment rather than merging into it, which drops `PATH` and\n   breaks `npx` resolution for the launched server. `--spawn-mode replace`\n   constructs the environment under that hypothesis and reports whether the\n   declared command still resolves.\n\n## Install\n\nNot yet published to PyPI. Install from a local clone:\n\n```bash\ngit clone <this-repo>\ncd mcp-env-linter\npip install -e .\n```\n\nRequires Python >= 3.9. No runtime dependencies.\n\n## Quick sta…","publisher":null,"homepage":"https://github.com/mrlarrylv/mcp-env-linter","repository":"https://github.com/mrlarrylv/mcp-env-linter","version":"0.1.0","license":"MIT","protocols":["mcp"],"tags":["mcp","model-context-protocol","env","linter","diagnostics","claude-desktop"],"pricing":null,"endpoints":[{"url":"pypi:mcp-env-linter","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","license":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi"}},"derived":{"capabilities":[{"slug":"dev.package-management","name":"Packages & Dependencies","confidence":0.825,"provenance":"derived"},{"slug":"dev.terminal","name":"Terminal & Shell","confidence":0.745,"provenance":"derived"}],"categories":["dev"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"mcp-env-linter","registry":"pypi","observedAt":"2026-10-28T11:27:09.466Z","publishedAt":"2026-08-09T06:30:12.477566Z","latestVersion":"0.1.0"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"mcp-env-linter","url":"https://pypi.org/project/mcp-env-linter/","firstSeenAt":"2026-09-10T01:20:26.974Z","fetchedAt":"2026-10-28T11:25:15.837Z","normalizedAt":"2026-10-28T11:25:15.837Z"}]},"firstSeenAt":"2026-09-10T01:20:26.974Z","updatedAt":"2026-10-28T11:27:09.466Z"}