@uluops/ops-mcp 0.2.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 +383 -0
- package/LICENSE +21 -0
- package/README.md +272 -0
- package/dist/client/sdk-error-mapper.d.ts +24 -0
- package/dist/client/sdk-error-mapper.d.ts.map +1 -0
- package/dist/client/sdk-error-mapper.js +205 -0
- package/dist/client/sdk-error-mapper.js.map +1 -0
- package/dist/config/index.d.ts +26 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +121 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/tool-registry.d.ts +25 -0
- package/dist/config/tool-registry.d.ts.map +1 -0
- package/dist/config/tool-registry.js +439 -0
- package/dist/config/tool-registry.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +245 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/index.d.ts +12 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +16 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/projects.d.ts +12 -0
- package/dist/resources/projects.d.ts.map +1 -0
- package/dist/resources/projects.js +45 -0
- package/dist/resources/projects.js.map +1 -0
- package/dist/resources/response-helpers.d.ts +15 -0
- package/dist/resources/response-helpers.d.ts.map +1 -0
- package/dist/resources/response-helpers.js +34 -0
- package/dist/resources/response-helpers.js.map +1 -0
- package/dist/resources/taxonomy.d.ts +19 -0
- package/dist/resources/taxonomy.d.ts.map +1 -0
- package/dist/resources/taxonomy.js +45 -0
- package/dist/resources/taxonomy.js.map +1 -0
- package/dist/tools/add-issue-note.d.ts +25 -0
- package/dist/tools/add-issue-note.d.ts.map +1 -0
- package/dist/tools/add-issue-note.js +19 -0
- package/dist/tools/add-issue-note.js.map +1 -0
- package/dist/tools/archive-runs.d.ts +33 -0
- package/dist/tools/archive-runs.d.ts.map +1 -0
- package/dist/tools/archive-runs.js +21 -0
- package/dist/tools/archive-runs.js.map +1 -0
- package/dist/tools/bulk-update-status.d.ts +54 -0
- package/dist/tools/bulk-update-status.d.ts.map +1 -0
- package/dist/tools/bulk-update-status.js +22 -0
- package/dist/tools/bulk-update-status.js.map +1 -0
- package/dist/tools/create-issue.d.ts +52 -0
- package/dist/tools/create-issue.d.ts.map +1 -0
- package/dist/tools/create-issue.js +25 -0
- package/dist/tools/create-issue.js.map +1 -0
- package/dist/tools/create-project.d.ts +21 -0
- package/dist/tools/create-project.d.ts.map +1 -0
- package/dist/tools/create-project.js +17 -0
- package/dist/tools/create-project.js.map +1 -0
- package/dist/tools/delete-project.d.ts +28 -0
- package/dist/tools/delete-project.d.ts.map +1 -0
- package/dist/tools/delete-project.js +34 -0
- package/dist/tools/delete-project.js.map +1 -0
- package/dist/tools/delete-run.d.ts +24 -0
- package/dist/tools/delete-run.d.ts.map +1 -0
- package/dist/tools/delete-run.js +18 -0
- package/dist/tools/delete-run.js.map +1 -0
- package/dist/tools/diff-runs.d.ts +30 -0
- package/dist/tools/diff-runs.d.ts.map +1 -0
- package/dist/tools/diff-runs.js +20 -0
- package/dist/tools/diff-runs.js.map +1 -0
- package/dist/tools/edit-issue.d.ts +34 -0
- package/dist/tools/edit-issue.d.ts.map +1 -0
- package/dist/tools/edit-issue.js +25 -0
- package/dist/tools/edit-issue.js.map +1 -0
- package/dist/tools/get-agent-lifecycle.d.ts +10 -0
- package/dist/tools/get-agent-lifecycle.d.ts.map +1 -0
- package/dist/tools/get-agent-lifecycle.js +20 -0
- package/dist/tools/get-agent-lifecycle.js.map +1 -0
- package/dist/tools/get-agent-matrix.d.ts +24 -0
- package/dist/tools/get-agent-matrix.d.ts.map +1 -0
- package/dist/tools/get-agent-matrix.js +29 -0
- package/dist/tools/get-agent-matrix.js.map +1 -0
- package/dist/tools/get-agent-reliability.d.ts +22 -0
- package/dist/tools/get-agent-reliability.d.ts.map +1 -0
- package/dist/tools/get-agent-reliability.js +14 -0
- package/dist/tools/get-agent-reliability.js.map +1 -0
- package/dist/tools/get-agent-runs-analysis.d.ts +33 -0
- package/dist/tools/get-agent-runs-analysis.d.ts.map +1 -0
- package/dist/tools/get-agent-runs-analysis.js +26 -0
- package/dist/tools/get-agent-runs-analysis.js.map +1 -0
- package/dist/tools/get-analytics.d.ts +30 -0
- package/dist/tools/get-analytics.d.ts.map +1 -0
- package/dist/tools/get-analytics.js +29 -0
- package/dist/tools/get-analytics.js.map +1 -0
- package/dist/tools/get-burndown.d.ts +24 -0
- package/dist/tools/get-burndown.d.ts.map +1 -0
- package/dist/tools/get-burndown.js +26 -0
- package/dist/tools/get-burndown.js.map +1 -0
- package/dist/tools/get-discovery.d.ts +24 -0
- package/dist/tools/get-discovery.d.ts.map +1 -0
- package/dist/tools/get-discovery.js +26 -0
- package/dist/tools/get-discovery.js.map +1 -0
- package/dist/tools/get-full-taxonomy-analytics.d.ts +27 -0
- package/dist/tools/get-full-taxonomy-analytics.d.ts.map +1 -0
- package/dist/tools/get-full-taxonomy-analytics.js +19 -0
- package/dist/tools/get-full-taxonomy-analytics.js.map +1 -0
- package/dist/tools/get-issue-by-fingerprint.d.ts +24 -0
- package/dist/tools/get-issue-by-fingerprint.d.ts.map +1 -0
- package/dist/tools/get-issue-by-fingerprint.js +18 -0
- package/dist/tools/get-issue-by-fingerprint.js.map +1 -0
- package/dist/tools/get-issue-details.d.ts +27 -0
- package/dist/tools/get-issue-details.d.ts.map +1 -0
- package/dist/tools/get-issue-details.js +19 -0
- package/dist/tools/get-issue-details.js.map +1 -0
- package/dist/tools/get-issue-history.d.ts +19 -0
- package/dist/tools/get-issue-history.d.ts.map +1 -0
- package/dist/tools/get-issue-history.js +13 -0
- package/dist/tools/get-issue-history.js.map +1 -0
- package/dist/tools/get-latest-run.d.ts +24 -0
- package/dist/tools/get-latest-run.d.ts.map +1 -0
- package/dist/tools/get-latest-run.js +18 -0
- package/dist/tools/get-latest-run.js.map +1 -0
- package/dist/tools/get-project-analysis.d.ts +36 -0
- package/dist/tools/get-project-analysis.d.ts.map +1 -0
- package/dist/tools/get-project-analysis.js +28 -0
- package/dist/tools/get-project-analysis.js.map +1 -0
- package/dist/tools/get-project-summary.d.ts +21 -0
- package/dist/tools/get-project-summary.d.ts.map +1 -0
- package/dist/tools/get-project-summary.js +17 -0
- package/dist/tools/get-project-summary.js.map +1 -0
- package/dist/tools/get-project-trends.d.ts +24 -0
- package/dist/tools/get-project-trends.d.ts.map +1 -0
- package/dist/tools/get-project-trends.js +27 -0
- package/dist/tools/get-project-trends.js.map +1 -0
- package/dist/tools/get-project.d.ts +21 -0
- package/dist/tools/get-project.d.ts.map +1 -0
- package/dist/tools/get-project.js +17 -0
- package/dist/tools/get-project.js.map +1 -0
- package/dist/tools/get-run-analysis.d.ts +21 -0
- package/dist/tools/get-run-analysis.d.ts.map +1 -0
- package/dist/tools/get-run-analysis.js +17 -0
- package/dist/tools/get-run-analysis.js.map +1 -0
- package/dist/tools/get-run-details.d.ts +27 -0
- package/dist/tools/get-run-details.d.ts.map +1 -0
- package/dist/tools/get-run-details.js +19 -0
- package/dist/tools/get-run-details.js.map +1 -0
- package/dist/tools/get-run.d.ts +21 -0
- package/dist/tools/get-run.d.ts.map +1 -0
- package/dist/tools/get-run.js +17 -0
- package/dist/tools/get-run.js.map +1 -0
- package/dist/tools/get-taxonomy.d.ts +15 -0
- package/dist/tools/get-taxonomy.d.ts.map +1 -0
- package/dist/tools/get-taxonomy.js +15 -0
- package/dist/tools/get-taxonomy.js.map +1 -0
- package/dist/tools/get-velocity.d.ts +24 -0
- package/dist/tools/get-velocity.d.ts.map +1 -0
- package/dist/tools/get-velocity.js +28 -0
- package/dist/tools/get-velocity.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +119 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-agents.d.ts +15 -0
- package/dist/tools/list-agents.d.ts.map +1 -0
- package/dist/tools/list-agents.js +29 -0
- package/dist/tools/list-agents.js.map +1 -0
- package/dist/tools/list-projects.d.ts +15 -0
- package/dist/tools/list-projects.d.ts.map +1 -0
- package/dist/tools/list-projects.js +15 -0
- package/dist/tools/list-projects.js.map +1 -0
- package/dist/tools/list-runs.d.ts +30 -0
- package/dist/tools/list-runs.d.ts.map +1 -0
- package/dist/tools/list-runs.js +23 -0
- package/dist/tools/list-runs.js.map +1 -0
- package/dist/tools/merge-issues.d.ts +25 -0
- package/dist/tools/merge-issues.d.ts.map +1 -0
- package/dist/tools/merge-issues.js +19 -0
- package/dist/tools/merge-issues.js.map +1 -0
- package/dist/tools/query-analysis-records.d.ts +39 -0
- package/dist/tools/query-analysis-records.d.ts.map +1 -0
- package/dist/tools/query-analysis-records.js +31 -0
- package/dist/tools/query-analysis-records.js.map +1 -0
- package/dist/tools/query-issues.d.ts +54 -0
- package/dist/tools/query-issues.d.ts.map +1 -0
- package/dist/tools/query-issues.js +41 -0
- package/dist/tools/query-issues.js.map +1 -0
- package/dist/tools/restore-issue.d.ts +21 -0
- package/dist/tools/restore-issue.d.ts.map +1 -0
- package/dist/tools/restore-issue.js +17 -0
- package/dist/tools/restore-issue.js.map +1 -0
- package/dist/tools/restore-project.d.ts +21 -0
- package/dist/tools/restore-project.d.ts.map +1 -0
- package/dist/tools/restore-project.js +17 -0
- package/dist/tools/restore-project.js.map +1 -0
- package/dist/tools/save-run.d.ts +1570 -0
- package/dist/tools/save-run.d.ts.map +1 -0
- package/dist/tools/save-run.js +50 -0
- package/dist/tools/save-run.js.map +1 -0
- package/dist/tools/search-issues.d.ts +42 -0
- package/dist/tools/search-issues.d.ts.map +1 -0
- package/dist/tools/search-issues.js +25 -0
- package/dist/tools/search-issues.js.map +1 -0
- package/dist/tools/soft-delete-issue.d.ts +21 -0
- package/dist/tools/soft-delete-issue.d.ts.map +1 -0
- package/dist/tools/soft-delete-issue.js +17 -0
- package/dist/tools/soft-delete-issue.js.map +1 -0
- package/dist/tools/soft-delete-project.d.ts +27 -0
- package/dist/tools/soft-delete-project.d.ts.map +1 -0
- package/dist/tools/soft-delete-project.js +22 -0
- package/dist/tools/soft-delete-project.js.map +1 -0
- package/dist/tools/undo-issue-status.d.ts +21 -0
- package/dist/tools/undo-issue-status.d.ts.map +1 -0
- package/dist/tools/undo-issue-status.js +17 -0
- package/dist/tools/undo-issue-status.js.map +1 -0
- package/dist/tools/update-issue-by-fingerprint.d.ts +30 -0
- package/dist/tools/update-issue-by-fingerprint.d.ts.map +1 -0
- package/dist/tools/update-issue-by-fingerprint.js +24 -0
- package/dist/tools/update-issue-by-fingerprint.js.map +1 -0
- package/dist/tools/update-project.d.ts +24 -0
- package/dist/tools/update-project.d.ts.map +1 -0
- package/dist/tools/update-project.js +21 -0
- package/dist/tools/update-project.js.map +1 -0
- package/dist/tools/update-run.d.ts +1495 -0
- package/dist/tools/update-run.d.ts.map +1 -0
- package/dist/tools/update-run.js +60 -0
- package/dist/tools/update-run.js.map +1 -0
- package/dist/tools/update-status.d.ts +64 -0
- package/dist/tools/update-status.d.ts.map +1 -0
- package/dist/tools/update-status.js +28 -0
- package/dist/tools/update-status.js.map +1 -0
- package/dist/tools/validate-run.d.ts +228 -0
- package/dist/tools/validate-run.d.ts.map +1 -0
- package/dist/tools/validate-run.js +25 -0
- package/dist/tools/validate-run.js.map +1 -0
- package/dist/types/config.d.ts +33 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mcp.d.ts +21 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +30 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/run-schemas.d.ts +996 -0
- package/dist/types/run-schemas.d.ts.map +1 -0
- package/dist/types/run-schemas.js +91 -0
- package/dist/types/run-schemas.js.map +1 -0
- package/dist/types/schemas.d.ts +288 -0
- package/dist/types/schemas.d.ts.map +1 -0
- package/dist/types/schemas.js +218 -0
- package/dist/types/schemas.js.map +1 -0
- package/dist/types/server.d.ts +59 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/types/server.js +7 -0
- package/dist/types/server.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +90 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/normalize-keys.d.ts +20 -0
- package/dist/utils/normalize-keys.d.ts.map +1 -0
- package/dist/utils/normalize-keys.js +38 -0
- package/dist/utils/normalize-keys.js.map +1 -0
- package/dist/utils/tool-handler.d.ts +64 -0
- package/dist/utils/tool-handler.d.ts.map +1 -0
- package/dist/utils/tool-handler.js +138 -0
- package/dist/utils/tool-handler.js.map +1 -0
- package/package.json +83 -0
- package/tool-policies.json +96 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.2.1] - 2026-06-05
|
|
11
|
+
|
|
12
|
+
First post-ship hardening pass. Driven by the run #1 ship pipeline (which
|
|
13
|
+
failed Stage 3 public-interface at 56/100) and the run #2 anxiety reading
|
|
14
|
+
(which surfaced two silent runtime failures the static gates missed:
|
|
15
|
+
`tool-policies.json` never loaded by `npx` consumers, and `ULUOPS_API_KEY`
|
|
16
|
+
format documented but unvalidated). All 7 ship gates now pass; 34 of the 39
|
|
17
|
+
tracker findings closed (87%).
|
|
18
|
+
|
|
19
|
+
### Security
|
|
20
|
+
|
|
21
|
+
- **`tool-policies.json` now actually loaded.** The bundled policy file ships
|
|
22
|
+
in `files[]` but mcp-secure-server's resolution order (env var, then
|
|
23
|
+
`./tool-policies.json` in CWD, then `~/.config`) never found it for
|
|
24
|
+
`npx -y @uluops/ops-mcp` invocations — CWD is the MCP host's project
|
|
25
|
+
directory, not the package directory. Resolved via
|
|
26
|
+
`require.resolve('../tool-policies.json')` passed as `toolPoliciesPath`.
|
|
27
|
+
Without this fix every public consumer ran with default-level enforcement
|
|
28
|
+
and the `relaxedFields` that suppress UUID-as-credit-card false positives
|
|
29
|
+
were decorative.
|
|
30
|
+
- **`ULUOPS_API_KEY` format validated at startup.** README documented the
|
|
31
|
+
`ulr_` prefix + 20-char minimum but `validateConfig` only checked for
|
|
32
|
+
non-empty. Mis-prefixed keys silently routed through `sessionToken` auth
|
|
33
|
+
and surfaced as opaque 401s. Now enforced via
|
|
34
|
+
`/^ulr_[A-Za-z0-9_-]{16,}$/` with an actionable error message.
|
|
35
|
+
- **`NotFoundError` and `NetworkError` now pass through `sanitizeErrorMessage`.**
|
|
36
|
+
Closed a credential-redaction gap where 2 of 7 typed error branches
|
|
37
|
+
forwarded raw SDK error messages — low probability of leaking `ulr_*`
|
|
38
|
+
keys today, but the redaction layer is now consistent across all branches.
|
|
39
|
+
- **402 tier-gating payload uses defensive type guards.** Previously cast
|
|
40
|
+
`details.definitions`, `details.currentTier`, `details.upgradeUrl` without
|
|
41
|
+
shape validation. Now `Array.isArray` + `typeof === 'string'` guards
|
|
42
|
+
with graceful fallback to `'above-tier definitions'` / `'unknown'` when
|
|
43
|
+
the API payload shape drifts.
|
|
44
|
+
- **HTTPS-only base URL warning.** `loadConfig` now warns when
|
|
45
|
+
`ULUOPS_BASE_URL` uses a non-`https:` scheme outside `NODE_ENV=development`.
|
|
46
|
+
Closes CWE-319 cleartext-credential-transmission visibility gap.
|
|
47
|
+
- **`ENABLE_DETAILED_ERRORS=false` env gate** for tightened production
|
|
48
|
+
deployments that want mcp-secure-server to suppress redacted error
|
|
49
|
+
reasons in `error.message`.
|
|
50
|
+
- **`Number.isFinite` coercion guard.** `coerceNumericFields` now rejects
|
|
51
|
+
`Infinity` / `-Infinity` / `NaN` from string-typed numeric inputs.
|
|
52
|
+
- **Input size bounds.** `delete_project.confirmation_phrase` and
|
|
53
|
+
`search_issues.query` now have `.max()` constraints (200 / 500 chars).
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
|
|
57
|
+
- **Server protocol identity is now `@uluops/ops-mcp`.** Three call sites
|
|
58
|
+
still said `uluops-tracker-client` from before the package rename
|
|
59
|
+
(`SecureMcpServer.create` name, internal config default, startup log).
|
|
60
|
+
MCP host UIs now display the correct identity and bug reports can be
|
|
61
|
+
correlated to the npm package name.
|
|
62
|
+
- **Verbose file logging defaults to `false`.** `ENABLE_FILE_LOGGING`,
|
|
63
|
+
`VERBOSE_LOGGING`, and `LOG_PERFORMANCE_METRICS` previously defaulted
|
|
64
|
+
to `true`, which created a `logs/` directory in every consumer's working
|
|
65
|
+
directory without opt-in. All three now default `false`; opt in
|
|
66
|
+
explicitly via env vars.
|
|
67
|
+
- **README rewritten for npm/npx consumers.** Installation section was
|
|
68
|
+
the contributor `npm install` + `npm run build` workflow; now leads
|
|
69
|
+
with `npx -y @uluops/ops-mcp` and `npm install -g @uluops/ops-mcp`.
|
|
70
|
+
`.mcp.json` example uses the correct binary name (`uluops-ops-mcp`,
|
|
71
|
+
not the stale `uluops-tracker-client`). Quick Start field names
|
|
72
|
+
corrected (`agents`/`decision`/`agent`, not the pre-rename
|
|
73
|
+
`validators`/`status`/`validator`).
|
|
74
|
+
- **Documentation parity with 48 registered tools.** README previously
|
|
75
|
+
documented 47 (off-by-one from `soft_delete_issue` addition) and
|
|
76
|
+
4 stale tool names from the validator→agent rename (`list_validators`,
|
|
77
|
+
`validate_features_list`, `get_validator_reliability`,
|
|
78
|
+
`get_validator_matrix`). All corrected; 10 previously-undocumented
|
|
79
|
+
tools added (the full Analysis Tools group plus `get_agent_lifecycle`,
|
|
80
|
+
`soft_delete_issue`, and renames).
|
|
81
|
+
- **Six previously-undocumented environment variables documented**:
|
|
82
|
+
`ULUOPS_ORG_SLUG`, `ULUOPS_TRACKER_RETRIES`, `ENABLE_FILE_LOGGING`,
|
|
83
|
+
`LOG_DIR`, `VERBOSE_LOGGING`, `LOG_PERFORMANCE_METRICS`.
|
|
84
|
+
- **Graceful shutdown awaits server close.** `SIGINT`/`SIGTERM` handlers
|
|
85
|
+
now `await Promise.race([server.close(), 2s timeout])` before
|
|
86
|
+
`process.exit(0)` so in-flight tool responses can flush back through
|
|
87
|
+
stdio.
|
|
88
|
+
|
|
89
|
+
### Added
|
|
90
|
+
|
|
91
|
+
- **API key fingerprint in startup log.** `apiKeyFingerprint(apiKey)`
|
|
92
|
+
emits `ulr_…XXXX` (last 4 chars) so operators can distinguish which
|
|
93
|
+
key the server loaded across multiple deployments without leaking
|
|
94
|
+
the secret.
|
|
95
|
+
- **7 tests covering the 402 tier-gating error path** (`sdk-error-mapper.test.ts`)
|
|
96
|
+
including happy path, `?source=mcp` vs `&source=mcp` upgrade-URL tracking,
|
|
97
|
+
missing-details fallback, malformed-definitions tolerance,
|
|
98
|
+
non-array/non-string defensive handling, and credential-not-leaked check.
|
|
99
|
+
- **`coerceNumericFields` boundary tests** verifying MCP JSON-RPC string-typed
|
|
100
|
+
numerics are coerced and `Infinity`/`NaN` rejected.
|
|
101
|
+
- **`save_run` timestamp injection tests** verifying ISO-8601 timestamp is
|
|
102
|
+
injected when the caller omits one and caller-supplied timestamps are
|
|
103
|
+
preserved verbatim.
|
|
104
|
+
|
|
105
|
+
### Removed
|
|
106
|
+
|
|
107
|
+
- **Dead `config.server` stanza.** `ServerConfig` interface, the
|
|
108
|
+
`server: { name, version: '1.0.0' }` block in `loadConfig`, and the
|
|
109
|
+
matching test assertion. The static `'1.0.0'` was a pinned falsehood
|
|
110
|
+
(package was at 0.2.0); the dynamic version path at `src/index.ts:22`
|
|
111
|
+
reads from `package.json` and remains.
|
|
112
|
+
- **`ValidatorResultSchema` / `ValidatorResult` deprecated aliases**
|
|
113
|
+
removed from `src/types/schemas.ts`. All consumers migrated to
|
|
114
|
+
`AgentResultSchema` / `AgentResult`. Deprecation introduced post-rename
|
|
115
|
+
in 0.2.0; alias dropped now to reduce surface.
|
|
116
|
+
|
|
117
|
+
### Internal
|
|
118
|
+
|
|
119
|
+
- 10 ESLint errors fixed (3× `restrict-template-expressions`,
|
|
120
|
+
3× `no-deprecated`, 3× `no-unnecessary-type-assertion`,
|
|
121
|
+
1× `no-unnecessary-type-assertion`). Lint now exits clean.
|
|
122
|
+
- Shared run-related schemas extracted to `src/types/run-schemas.ts`
|
|
123
|
+
(`CategoryScoreSchema`, `ExplorationSectionSchema`,
|
|
124
|
+
`ExplorationMapSchema`, `AnalysisRecordBaseSchema`,
|
|
125
|
+
`AnalysisSummaryBaseSchema`). `save-run.ts` shrank 173 → 76 lines;
|
|
126
|
+
`update-run.ts` shrank 167 → 80 lines.
|
|
127
|
+
- `main()` body extracted into `buildServerOptions()` plus
|
|
128
|
+
`STARTUP_TOOL_GROUPS` / `STARTUP_RESOURCES` constants. Function body
|
|
129
|
+
shrank 197 → 88 lines.
|
|
130
|
+
- `EXPECTED_TOOLS` unified to a single fixture
|
|
131
|
+
(`src/__tests__/fixtures/expected-tools.ts`) consumed by both
|
|
132
|
+
`tools-integration.test.ts` and `tool-registry.test.ts`.
|
|
133
|
+
- `createToolHandler` `preProcess` discriminates on a `Symbol`
|
|
134
|
+
marker (`shortCircuit()`) instead of `'content' in result`
|
|
135
|
+
duck-typing. Future tool schemas with top-level `content` fields
|
|
136
|
+
no longer trigger an accidental error-response interpretation.
|
|
137
|
+
- `isNumericSchema` uses Zod's public `unwrap()` /
|
|
138
|
+
`removeDefault()` API instead of accessing `_def.innerType`
|
|
139
|
+
via `as any`. Stable across Zod minor versions.
|
|
140
|
+
- `list_agents` handler now guards SDK return shape with
|
|
141
|
+
`Array.isArray` + a type predicate filter. Previously cast
|
|
142
|
+
`data as Array<{ name: string }>` blind.
|
|
143
|
+
- `assertion` guarding `toolPoliciesPath` argument added to
|
|
144
|
+
`index.test.ts` — the fix above would otherwise have no test
|
|
145
|
+
coverage protecting it from refactor regression.
|
|
146
|
+
- Stale `tool-policies.json` CWD-fallback comment in `src/index.ts`
|
|
147
|
+
replaced with an accurate description of the bundled-file lookup.
|
|
148
|
+
- LICENSE file added (MIT, matching sibling `@uluops/*` packages)
|
|
149
|
+
and `LICENSE` added to `files[]`.
|
|
150
|
+
- CHANGELOG `[Unreleased]` compare base corrected from `v1.21.0`
|
|
151
|
+
(pre-rename) to `v0.2.0` and `[0.2.0]` tag link added in 0.2.0
|
|
152
|
+
release; this release adds `[0.2.1]` link.
|
|
153
|
+
|
|
154
|
+
### Test count
|
|
155
|
+
|
|
156
|
+
655 passing (up from 645 in 0.2.0). Net +10: +7 tier-gating, +2
|
|
157
|
+
`coerceNumericFields` boundary, +2 `save_run` timestamp, +2 ulr_
|
|
158
|
+
format validation, −5 retired (one `loadConfig` server-defaults
|
|
159
|
+
test deleted with the dead stanza, removed assertions migrated).
|
|
160
|
+
|
|
161
|
+
## [0.2.0] - 2026-06-05
|
|
162
|
+
|
|
163
|
+
First release under the scoped name `@uluops/ops-mcp`. Forward-ports the
|
|
164
|
+
operational drift from the legacy `uluops-ops-mcp-client` 1.22.0 codebase
|
|
165
|
+
and aligns the package with the broader UluOps supply-chain policy.
|
|
166
|
+
|
|
167
|
+
### Added
|
|
168
|
+
|
|
169
|
+
- **`soft_delete_issue` tool** — write-side tool for soft-deleting issues
|
|
170
|
+
with standard 10KB/10KB size budgets and 60/min, 1000/hr rate limits.
|
|
171
|
+
Brings total tool count to 48.
|
|
172
|
+
- **`add_issue_note` size relaxation** — `maxArgsSize` 50→80 KB and
|
|
173
|
+
`maxEgressBytes` 20→100 KB. The MySQL `TEXT` content column tolerates
|
|
174
|
+
64KB; the prior 20KB egress was too tight for stack-trace-heavy notes.
|
|
175
|
+
|
|
176
|
+
### Changed
|
|
177
|
+
|
|
178
|
+
- **`@uluops/ops-sdk` bumped `^2.0.0` → `3.1.0`** (two major versions).
|
|
179
|
+
All tool source compiles unchanged against the new SDK surface.
|
|
180
|
+
- **All runtime and dev dependencies pinned to exact versions** — removed
|
|
181
|
+
caret ranges across the board per the 2026-06-01 UluOps supply-chain
|
|
182
|
+
hardening policy.
|
|
183
|
+
|
|
184
|
+
### Historical lineage (legacy `uluops-ops-mcp-client` versions below)
|
|
185
|
+
|
|
186
|
+
## [1.21.0] - 2026-05-21
|
|
187
|
+
|
|
188
|
+
### Changed
|
|
189
|
+
- Score field now optional/nullable across MCP schemas to support generator/executor agents
|
|
190
|
+
|
|
191
|
+
## [1.20.0] - 2026-05-20
|
|
192
|
+
|
|
193
|
+
### Changed
|
|
194
|
+
- `save_run` and `update_run` pass `{ _skipClientValidation: true }` to SDK — eliminates redundant double validation
|
|
195
|
+
|
|
196
|
+
### Fixed
|
|
197
|
+
- `edit_issue` tool aligned with SDK rename (`issues.edit()` → `issues.update()`)
|
|
198
|
+
- `ConflictError` details (`nextAvailable`, `status`) forwarded to MCP response
|
|
199
|
+
- Tool count assertions updated from 45 → 47
|
|
200
|
+
|
|
201
|
+
## [1.19.0] - 2026-05-18
|
|
202
|
+
|
|
203
|
+
### Fixed
|
|
204
|
+
- `ExplorationSection` schemas aligned with API discriminated union type
|
|
205
|
+
|
|
206
|
+
## [1.18.0] - 2026-05-11
|
|
207
|
+
|
|
208
|
+
### Added
|
|
209
|
+
- `get_agent_runs_analysis` MCP tool for per-agent analysis history
|
|
210
|
+
- `exploration_maps` on `save_run` and `update_run` tool schemas
|
|
211
|
+
- Per-agent analysis summary array on `save_run`
|
|
212
|
+
|
|
213
|
+
## [1.17.0] - 2026-05-10
|
|
214
|
+
|
|
215
|
+
### Added
|
|
216
|
+
- Per-agent analysis attribution on `update_run` tool
|
|
217
|
+
- `analysis_records` and `analysis_summary` exposed on `update_run` tool
|
|
218
|
+
|
|
219
|
+
## [1.16.0] - 2026-05-06
|
|
220
|
+
|
|
221
|
+
### Added
|
|
222
|
+
- `high` priority level added to MCP schemas
|
|
223
|
+
|
|
224
|
+
### Changed
|
|
225
|
+
- Legacy `ULUOPS_TRACKER_API_KEY`/`ULUOPS_TRACKER_URL` env var support removed
|
|
226
|
+
|
|
227
|
+
## [1.15.0] - 2026-05-03
|
|
228
|
+
|
|
229
|
+
### Added
|
|
230
|
+
- `get_agent_lifecycle` tool with `definition_version` on agent snapshots
|
|
231
|
+
|
|
232
|
+
### Fixed
|
|
233
|
+
- `save_features_list` references replaced with `save_run` in docs
|
|
234
|
+
|
|
235
|
+
## [1.14.0] - 2026-05-01
|
|
236
|
+
|
|
237
|
+
### Fixed
|
|
238
|
+
- `classified_by` enum value renamed from `validator` to `agent` in MCP schema
|
|
239
|
+
|
|
240
|
+
## [1.13.0] - 2026-04-28
|
|
241
|
+
|
|
242
|
+
### Added
|
|
243
|
+
- 402 `SubscriptionRequired` error handling with `source=mcp` tracking
|
|
244
|
+
|
|
245
|
+
## [1.12.0] - 2026-04-19
|
|
246
|
+
|
|
247
|
+
### Added
|
|
248
|
+
- `definition_id` field on `save_run` MCP tool input schema
|
|
249
|
+
|
|
250
|
+
## [1.11.0] - 2026-04-16
|
|
251
|
+
|
|
252
|
+
### Added
|
|
253
|
+
- `summary` field on `AgentResultSchema`
|
|
254
|
+
|
|
255
|
+
### Fixed
|
|
256
|
+
- `mcp-secure-server` upgraded to 0.0.13-security (UUID false-positive fix)
|
|
257
|
+
|
|
258
|
+
## [1.10.0] - 2026-04-15
|
|
259
|
+
|
|
260
|
+
### Added
|
|
261
|
+
- Detailed error diagnostics from `mcp-secure-server`
|
|
262
|
+
|
|
263
|
+
## [1.9.0] - 2026-04-12
|
|
264
|
+
|
|
265
|
+
### Added
|
|
266
|
+
- Session token authentication as alternative to API keys
|
|
267
|
+
|
|
268
|
+
## [1.8.0] - 2026-04-10
|
|
269
|
+
|
|
270
|
+
### Added
|
|
271
|
+
- `observation` as first-class issue status
|
|
272
|
+
|
|
273
|
+
### Changed
|
|
274
|
+
- Divergent taxonomy resource replaced with SDK-fetched data
|
|
275
|
+
|
|
276
|
+
## [1.7.0] - 2026-04-04
|
|
277
|
+
|
|
278
|
+
### Added
|
|
279
|
+
- Structured error context with tool name, type, and suggestions
|
|
280
|
+
- `recommendations` field on `update_run` tool
|
|
281
|
+
|
|
282
|
+
## [1.6.0] - 2026-03-29
|
|
283
|
+
|
|
284
|
+
### Added
|
|
285
|
+
- Org context support via `ULUOPS_ORG_SLUG` env var
|
|
286
|
+
|
|
287
|
+
### Fixed
|
|
288
|
+
- Error handling overhauled for actionable agent-facing messages
|
|
289
|
+
- Analysis record type enum enforced at MCP layer on `save_run`
|
|
290
|
+
|
|
291
|
+
## [1.5.0] - 2026-03-14
|
|
292
|
+
|
|
293
|
+
### Added
|
|
294
|
+
- Analysis query tools: `get_run_analysis`, `get_project_analysis`, `query_analysis_records`
|
|
295
|
+
- `analysis_records` and `analysis_summary` fields on `save_run`
|
|
296
|
+
|
|
297
|
+
### Fixed
|
|
298
|
+
- `get_project_analysis` uses project name instead of UUID
|
|
299
|
+
|
|
300
|
+
## [1.4.0] - 2026-03-08
|
|
301
|
+
|
|
302
|
+
### Changed
|
|
303
|
+
- `save_features_list` renamed to `save_run`
|
|
304
|
+
- `validator` renamed to `agent` across Zod schemas, tool descriptions, and tracker tools
|
|
305
|
+
|
|
306
|
+
### Fixed
|
|
307
|
+
- Test data updated for validators→agents schema rename
|
|
308
|
+
- String-typed numeric params coerced before Zod validation
|
|
309
|
+
|
|
310
|
+
## [1.3.0] - 2026-03-01
|
|
311
|
+
|
|
312
|
+
### Added
|
|
313
|
+
- Definition metadata enrichment and background registry sync
|
|
314
|
+
|
|
315
|
+
## [1.2.0] - 2026-02-15
|
|
316
|
+
|
|
317
|
+
### Changed
|
|
318
|
+
- `BackendApiClient` replaced with `@uluops/ops-sdk`
|
|
319
|
+
- Production URL default added so users only need API key
|
|
320
|
+
|
|
321
|
+
### Fixed
|
|
322
|
+
- 9 DX validator issues resolved
|
|
323
|
+
- 4 live-testing bugs in MCP tools fixed
|
|
324
|
+
- Missing `get_discovery` and `get_validator_matrix` tool specs added
|
|
325
|
+
- Deferred deprecation logging, `apiKey` validation, and tool description enrichment
|
|
326
|
+
- Post-implementation validation issues resolved
|
|
327
|
+
|
|
328
|
+
## [1.1.0] - 2026-02-07
|
|
329
|
+
|
|
330
|
+
### Added
|
|
331
|
+
- `false-positive` status added to issue lifecycle
|
|
332
|
+
- `IssueType` classification on MCP tool schemas
|
|
333
|
+
- Domain-specific issue types accepted
|
|
334
|
+
- Discovery timeline and validator-matrix analytics tools
|
|
335
|
+
- Burndown and velocity MCP tools
|
|
336
|
+
|
|
337
|
+
### Fixed
|
|
338
|
+
- `workflow_type` included in run update path
|
|
339
|
+
- Null `line_number` allowed in recommendation and issue inputs
|
|
340
|
+
- `type` field included in `createIssue` request body
|
|
341
|
+
- `run_id` sent in `X-Confirm-Delete` header instead of `'true'`
|
|
342
|
+
|
|
343
|
+
## [1.0.0] - 2026-01-19
|
|
344
|
+
|
|
345
|
+
### Added
|
|
346
|
+
- Core MCP tools (P0): `save_run`, `query_issues`, `update_status`, `get_project_summary`, `delete_project`
|
|
347
|
+
- Extended MCP tools (P1): `get_issue_details`, `get_run_details`, `diff_runs`, `archive_runs`, `get_analytics`, `search_issues`
|
|
348
|
+
- P2 MCP tools: 17 additional tools for full API coverage (projects, runs, issues, taxonomy)
|
|
349
|
+
- MCP resources for `validation://` URI scheme
|
|
350
|
+
- API client with retry logic and error mapping
|
|
351
|
+
- Structured logging with optional file output
|
|
352
|
+
- Configuration for `mcp-secure-server` framework
|
|
353
|
+
- Initial project setup with TypeScript, ESLint, Prettier, and Vitest
|
|
354
|
+
|
|
355
|
+
### Fixed
|
|
356
|
+
- Security limits increased for large validation payloads
|
|
357
|
+
- `id` field handling standardized in status update tools
|
|
358
|
+
|
|
359
|
+
[Unreleased]: https://github.com/Uluops/ops-uluops-mcp/compare/v0.2.1...HEAD
|
|
360
|
+
[0.2.1]: https://github.com/Uluops/ops-uluops-mcp/compare/v0.2.0...v0.2.1
|
|
361
|
+
[0.2.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.21.0...v0.2.0
|
|
362
|
+
[1.21.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.20.0...v1.21.0
|
|
363
|
+
[1.20.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.19.0...v1.20.0
|
|
364
|
+
[1.19.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.18.0...v1.19.0
|
|
365
|
+
[1.18.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.17.0...v1.18.0
|
|
366
|
+
[1.17.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.16.0...v1.17.0
|
|
367
|
+
[1.16.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.15.0...v1.16.0
|
|
368
|
+
[1.15.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.14.0...v1.15.0
|
|
369
|
+
[1.14.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.13.0...v1.14.0
|
|
370
|
+
[1.13.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.12.0...v1.13.0
|
|
371
|
+
[1.12.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.11.0...v1.12.0
|
|
372
|
+
[1.11.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.10.0...v1.11.0
|
|
373
|
+
[1.10.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.9.0...v1.10.0
|
|
374
|
+
[1.9.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.8.0...v1.9.0
|
|
375
|
+
[1.8.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.7.0...v1.8.0
|
|
376
|
+
[1.7.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.6.0...v1.7.0
|
|
377
|
+
[1.6.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.5.0...v1.6.0
|
|
378
|
+
[1.5.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.4.0...v1.5.0
|
|
379
|
+
[1.4.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.3.0...v1.4.0
|
|
380
|
+
[1.3.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.2.0...v1.3.0
|
|
381
|
+
[1.2.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.1.0...v1.2.0
|
|
382
|
+
[1.1.0]: https://github.com/Uluops/ops-uluops-mcp/compare/v1.0.0...v1.1.0
|
|
383
|
+
[1.0.0]: https://github.com/Uluops/ops-uluops-mcp/releases/tag/v1.0.0
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 UluOps
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# @uluops/ops-mcp
|
|
2
|
+
|
|
3
|
+
MCP (Model Context Protocol) server for the UluOps Platform API. Provides **48 tools** and **3 resources** (2 functional, 1 template placeholder) that enable Claude Code, Cursor, and other MCP hosts to interact with the UluOps Platform.
|
|
4
|
+
|
|
5
|
+
## Design Philosophy
|
|
6
|
+
|
|
7
|
+
**Thin Client Pattern**: This MCP server contains **zero business logic**. All data processing, validation, storage, and analytics are handled by the backend API. The server's sole responsibility is protocol translation between MCP's stdio-based JSON-RPC and the backend's REST API.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
Requires **Node.js 18** or later.
|
|
12
|
+
|
|
13
|
+
**Option A — npx (no install):**
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx -y @uluops/ops-mcp
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Option B — global install:**
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install -g @uluops/ops-mcp
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
This exposes the `uluops-ops-mcp` binary on your PATH.
|
|
26
|
+
|
|
27
|
+
## Configuration
|
|
28
|
+
|
|
29
|
+
Set environment variables in your MCP host configuration (see "Usage with Claude Code" below) or in a `.env` file when developing locally.
|
|
30
|
+
|
|
31
|
+
| Variable | Description | Required |
|
|
32
|
+
|----------|-------------|----------|
|
|
33
|
+
| `ULUOPS_BASE_URL` | Backend API URL | Yes |
|
|
34
|
+
| `ULUOPS_API_KEY` | API authentication key (must start with `ulr_`, min 20 chars) | Yes |
|
|
35
|
+
| `ULUOPS_ORG_SLUG` | Organization slug for multi-org contexts | No |
|
|
36
|
+
| `ULUOPS_TRACKER_TIMEOUT` | Request timeout (ms) | No (default: 30000) |
|
|
37
|
+
| `ULUOPS_TRACKER_RETRIES` | Number of retry attempts on failure | No (default: 3) |
|
|
38
|
+
| `LOG_LEVEL` | Logging level (`debug`, `info`, `warn`, `error`) | No (default: info) |
|
|
39
|
+
|
|
40
|
+
### Advanced Logging
|
|
41
|
+
|
|
42
|
+
By default this server logs only to stderr at `info` level. To enable structured file logging, set:
|
|
43
|
+
|
|
44
|
+
| Variable | Description | Default |
|
|
45
|
+
|----------|-------------|---------|
|
|
46
|
+
| `ENABLE_FILE_LOGGING` | Write JSON logs to disk | `false` |
|
|
47
|
+
| `LOG_DIR` | Directory for log files | `logs` |
|
|
48
|
+
| `VERBOSE_LOGGING` | Include extra diagnostic detail | `false` |
|
|
49
|
+
| `LOG_PERFORMANCE_METRICS` | Emit per-call timing metrics | `false` |
|
|
50
|
+
|
|
51
|
+
When `ENABLE_FILE_LOGGING=true`, a `logs/` directory is created in the process's working directory.
|
|
52
|
+
|
|
53
|
+
### Production Tightening
|
|
54
|
+
|
|
55
|
+
| Variable | Description | Default |
|
|
56
|
+
|----------|-------------|---------|
|
|
57
|
+
| `ENABLE_DETAILED_ERRORS` | Propagate redacted error reasons in `error.message` so callers can diagnose failures without parsing the data envelope. Set to `false` to suppress in tightened production deployments. | `true` |
|
|
58
|
+
|
|
59
|
+
## Usage with Claude Code
|
|
60
|
+
|
|
61
|
+
Add to your Claude Code MCP configuration (`.mcp.json`):
|
|
62
|
+
|
|
63
|
+
**Option 1: npx (lowest friction — no install)**
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"mcpServers": {
|
|
67
|
+
"uluops-ops": {
|
|
68
|
+
"command": "npx",
|
|
69
|
+
"args": ["-y", "@uluops/ops-mcp"],
|
|
70
|
+
"env": {
|
|
71
|
+
"ULUOPS_BASE_URL": "https://api.uluops.ai/api/v1",
|
|
72
|
+
"ULUOPS_API_KEY": "ulr_your-api-key-here"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Option 2: Globally installed binary**
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"mcpServers": {
|
|
83
|
+
"uluops-ops": {
|
|
84
|
+
"command": "uluops-ops-mcp",
|
|
85
|
+
"args": [],
|
|
86
|
+
"env": {
|
|
87
|
+
"ULUOPS_BASE_URL": "https://api.uluops.ai/api/v1",
|
|
88
|
+
"ULUOPS_API_KEY": "ulr_your-api-key-here"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Quick Start Examples
|
|
96
|
+
|
|
97
|
+
Once configured, Claude Code can use the uluops tracker tools:
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
// Save validation results from a workflow run
|
|
101
|
+
save_run({
|
|
102
|
+
project: "my-project",
|
|
103
|
+
workflow_type: "ship",
|
|
104
|
+
agents: [{ name: "code-validator", score: 85, decision: "PASS" }],
|
|
105
|
+
recommendations: [{ agent: "code-validator", title: "Fix lint error", priority: "suggested" }]
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
// Query open issues for a project
|
|
109
|
+
query_issues({ project: "my-project", status: "open", priority: "critical" })
|
|
110
|
+
|
|
111
|
+
// Get project summary with issue counts and trends
|
|
112
|
+
get_project_summary({ project: "my-project" })
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Rate Limiting Configuration
|
|
116
|
+
|
|
117
|
+
This server uses `mcp-secure-server` with configuration optimized for Claude Code's usage patterns.
|
|
118
|
+
|
|
119
|
+
### Claude Code Usage Patterns
|
|
120
|
+
|
|
121
|
+
| Operation | Typical Parallel Calls | Notes |
|
|
122
|
+
|-----------|------------------------|-------|
|
|
123
|
+
| Query context (summary, issues, runs) | 3-5 | Low burst |
|
|
124
|
+
| Create issues from validation workflow | 10-30 | High burst |
|
|
125
|
+
| Update agents with metrics | 6 | Medium burst |
|
|
126
|
+
| Save recommendations | 1 (with array) | Single call |
|
|
127
|
+
|
|
128
|
+
Claude Code issues tool calls in short, intense bursts (<2s) followed by "thinking" pauses. The default configuration accounts for this:
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
{
|
|
132
|
+
securityLevel: 'basic',
|
|
133
|
+
maxRequestsPerMinute: 120,
|
|
134
|
+
burstThreshold: 15, // Covers 90% of parallel operations
|
|
135
|
+
burstWindowMs: 5000, // 5s window resets between thinking periods
|
|
136
|
+
automationDetection: {
|
|
137
|
+
enabled: false, // Claude Code is trusted automation
|
|
138
|
+
},
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Why These Settings
|
|
143
|
+
|
|
144
|
+
- **`burstThreshold: 15`** - Handles typical validation workflow bursts (10-15 parallel issue creates or queries)
|
|
145
|
+
- **`burstWindowMs: 5000`** - Short window resets between Claude's "thinking" periods, preventing false positives
|
|
146
|
+
- **`automationDetection: disabled`** - Claude Code IS automation with consistent timing patterns; detecting it as a "bot" would block legitimate use
|
|
147
|
+
|
|
148
|
+
## Available Tools
|
|
149
|
+
|
|
150
|
+
### Core Tools (P0)
|
|
151
|
+
| Tool | Description |
|
|
152
|
+
|------|-------------|
|
|
153
|
+
| `save_run` | Save validation pipeline output with issue correlation |
|
|
154
|
+
| `query_issues` | Query issues with filtering by status, priority, validator |
|
|
155
|
+
| `update_status` | Update issue status (completed, deferred, wontfix) |
|
|
156
|
+
| `get_project_summary` | Get project overview with workflow and validator stats |
|
|
157
|
+
| `delete_project` | Delete project data (requires confirmation) |
|
|
158
|
+
|
|
159
|
+
### Extended Tools (P1)
|
|
160
|
+
| Tool | Description |
|
|
161
|
+
|------|-------------|
|
|
162
|
+
| `create_issue` | Create a user-submitted issue directly (outside validation runs) |
|
|
163
|
+
| `get_issue_details` | Full issue lifecycle with occurrences, notes, history |
|
|
164
|
+
| `get_run_details` | Run information with all recommendations and stats |
|
|
165
|
+
| `diff_runs` | Compare two validation runs (fixed, new, unchanged issues) |
|
|
166
|
+
| `archive_runs` | Archive old runs without deletion |
|
|
167
|
+
| `get_analytics` | Cross-project analytics (8 metric types available) |
|
|
168
|
+
| `search_issues` | Search issues across projects with relevance ranking |
|
|
169
|
+
| `list_agents` | List canonical agents from manifest |
|
|
170
|
+
| `validate_run` | Preview save operation without modifying database |
|
|
171
|
+
| `get_issue_history` | Full issue history with changes between runs |
|
|
172
|
+
| `add_issue_note` | Add context, resolution, or blocker notes to issues |
|
|
173
|
+
| `edit_issue` | Edit issue metadata (title, file_path, severity, etc.) |
|
|
174
|
+
| `merge_issues` | Merge duplicate issues into a target issue |
|
|
175
|
+
| `bulk_update_status` | Bulk update multiple issue statuses in one transaction |
|
|
176
|
+
| `update_run` | Update run metadata post-hoc (tokens, scores, timestamps) |
|
|
177
|
+
| `get_agent_reliability` | Analyze agent effectiveness and reliability scores |
|
|
178
|
+
| `get_agent_lifecycle` | Lifecycle metrics for an agent across runs |
|
|
179
|
+
|
|
180
|
+
### Project Tools (P2)
|
|
181
|
+
| Tool | Description |
|
|
182
|
+
|------|-------------|
|
|
183
|
+
| `list_projects` | List all active projects |
|
|
184
|
+
| `get_project` | Get a single project by ID or name |
|
|
185
|
+
| `get_project_trends` | Get issue trends over time for a project |
|
|
186
|
+
| `create_project` | Create a new project |
|
|
187
|
+
| `update_project` | Update a project name |
|
|
188
|
+
| `soft_delete_project` | Soft delete a project (can be restored later) |
|
|
189
|
+
| `restore_project` | Restore a soft-deleted project |
|
|
190
|
+
|
|
191
|
+
### Run Tools (P2)
|
|
192
|
+
| Tool | Description |
|
|
193
|
+
|------|-------------|
|
|
194
|
+
| `get_run` | Get a run by UUID |
|
|
195
|
+
| `list_runs` | List runs for a project |
|
|
196
|
+
| `get_latest_run` | Get the latest run for a project |
|
|
197
|
+
| `delete_run` | Delete a run (requires confirmation) |
|
|
198
|
+
|
|
199
|
+
### Issue Tools (P2)
|
|
200
|
+
| Tool | Description |
|
|
201
|
+
|------|-------------|
|
|
202
|
+
| `get_issue_by_fingerprint` | Get an issue by its SHA-256 fingerprint |
|
|
203
|
+
| `update_issue_by_fingerprint` | Update an issue status by its fingerprint |
|
|
204
|
+
| `restore_issue` | Restore a soft-deleted issue |
|
|
205
|
+
| `soft_delete_issue` | Soft delete an issue (can be restored later) |
|
|
206
|
+
| `undo_issue_status` | Undo the last status change on an issue |
|
|
207
|
+
|
|
208
|
+
### Taxonomy Tools (P2)
|
|
209
|
+
| Tool | Description |
|
|
210
|
+
|------|-------------|
|
|
211
|
+
| `get_taxonomy` | Get the failure taxonomy schema (domains, modes, severities) |
|
|
212
|
+
| `get_full_taxonomy_analytics` | Get full taxonomy analytics with distribution by domain |
|
|
213
|
+
| `get_burndown` | Get taxonomy burndown with time series and trend analysis per failure domain |
|
|
214
|
+
| `get_velocity` | Get velocity metrics per failure mode with sparkline data and trend reliability |
|
|
215
|
+
| `get_discovery` | Get discovery timeline showing new vs recurring issues over time |
|
|
216
|
+
| `get_agent_matrix` | Get agent-taxonomy coverage matrix with blind spot detection |
|
|
217
|
+
|
|
218
|
+
### Analysis Tools (P2)
|
|
219
|
+
| Tool | Description |
|
|
220
|
+
|------|-------------|
|
|
221
|
+
| `get_run_analysis` | Structured analysis records for a single run (decision, scoring, findings) |
|
|
222
|
+
| `get_project_analysis` | Aggregated analysis records across all runs in a project |
|
|
223
|
+
| `query_analysis_records` | Query analysis records by type, classification, severity |
|
|
224
|
+
| `get_agent_runs_analysis` | Per-run analysis records grouped by agent |
|
|
225
|
+
|
|
226
|
+
## Available Resources
|
|
227
|
+
|
|
228
|
+
MCP resources provide read-only access to validation data via the `validation://` URI scheme.
|
|
229
|
+
|
|
230
|
+
| Resource | URI | Description |
|
|
231
|
+
|----------|-----|-------------|
|
|
232
|
+
| Projects | `validation://projects` | List all tracked projects |
|
|
233
|
+
| Project Summary | `validation://projects/{project}` | Template placeholder (use `get_project_summary` tool) |
|
|
234
|
+
| Taxonomy | `validation://taxonomy` | Failure taxonomy schema for classifying issues |
|
|
235
|
+
|
|
236
|
+
### Resource Usage
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
// List all projects (returns JSON array of project names)
|
|
240
|
+
read_resource("validation://projects")
|
|
241
|
+
|
|
242
|
+
// Get the failure taxonomy schema (domains, modes, severity codes)
|
|
243
|
+
read_resource("validation://taxonomy")
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Note:** For project-specific data, use the `get_project_summary` tool instead of resources. MCP resource templates with parameters are not fully supported by the SDK.
|
|
247
|
+
|
|
248
|
+
## Development
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# Install dependencies
|
|
252
|
+
npm install
|
|
253
|
+
|
|
254
|
+
# Development mode with watch
|
|
255
|
+
npm run dev
|
|
256
|
+
|
|
257
|
+
# Run tests
|
|
258
|
+
npm test
|
|
259
|
+
|
|
260
|
+
# Type checking
|
|
261
|
+
npm run typecheck
|
|
262
|
+
|
|
263
|
+
# Linting
|
|
264
|
+
npm run lint
|
|
265
|
+
|
|
266
|
+
# Build for production
|
|
267
|
+
npm run build
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## License
|
|
271
|
+
|
|
272
|
+
MIT
|