io.github.phoenice-labs/universal-test-framework
PYPI · UNIVERSAL-TEST-FRAMEWORK · SCANNED SEP 20
Polyglot MCP test generation with 8-section contract enforcement across Python, TS, Java, Go, C++.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security32
- Malware scan not yet available for this package.Unverified
- CVE check failed: a known high-severity CVE affects jinja2 3.1.4, a direct dependency. A fixed version is available. View diagnostics → Fail
- Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 1 of 29 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 158 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability73
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 1964 tokens (~140/item across 14 items; 14 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "run_tests" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the io.github.phoenice-labs/universal-test-framework MCP server?
io.github.phoenice-labs/universal-test-framework runs locally as a PyPI package, launched with uvx universal-test-framework. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · universal-test-framework
claude mcp add phoenice-labs-universal-test-framework -- uvx universal-test-framework
{
"mcpServers": {
"phoenice-labs-universal-test-framework": {
"command": "uvx",
"args": [
"universal-test-framework"
]
}
}
} {
"servers": {
"phoenice-labs-universal-test-framework": {
"command": "uvx",
"args": [
"universal-test-framework"
]
}
}
} codex mcp add phoenice-labs-universal-test-framework -- uvx universal-test-framework
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"phoenice-labs-universal-test-framework": {
"type": "local",
"command": [
"uvx",
"universal-test-framework"
],
"enabled": true
}
}
} openclaw mcp add phoenice-labs-universal-test-framework --command uvx --arg universal-test-framework
mcp_servers:
phoenice-labs-universal-test-framework:
command: "uvx"
args: ["universal-test-framework"] {
"McpServers": {
"phoenice-labs-universal-test-framework": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"universal-test-framework"
]
}
}
} assistant mcp add phoenice-labs-universal-test-framework -t stdio -c uvx -a universal-test-framework
{
"mcpServers": {
"phoenice-labs-universal-test-framework": {
"command": "uvx",
"args": [
"universal-test-framework"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- 19 Sept 26 −3
- Stability: pass → 0.80 functional
- 18 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- Stability: 0.97 → pass security
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- 14 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 12 Sept 26 −3
- Stability: pass → 0.80 functional
- 11 Sept 26 +1
- Stability: 0.97 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/universal-test-framework@1.0.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | setuptools.build_meta |
Background: Why install scripts are a supply-chain risk →
Vulnerabilities 6 findings
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-cpwx-vrp4-4pq7 | CVE-2025-27516 | medium | yes | |
| GHSA-gmj6-6f8f-6699 | CVE-2024-56201 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-q2x7-8rv6-6q7h | CVE-2024-56326 | high | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-1471 | CVE-2025-27516 | none | yes | |
| PYSEC-2026-1472 | CVE-2024-56201 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-1475 | CVE-2024-56326 | high | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 29 packages
| Packages resolved | 29 |
|---|---|
| Stale | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
analyze_coverage Analyze Coverage ~71
Analyze the coverage of a test suite and identify gaps.
| Name | Type | Req | Description |
|---|---|---|---|
| language | – | – | Language for tool recommendations |
| source_code | – | – | Source code to identify uncovered symbols |
| test_type | string | – | Test type for threshold lookup |
| tests | array | yes | List of test dicts (output from generate_tests) |
Structured output declared, but exposes no named fields.
No examples provided.
build_traceability_matrix Build Traceability Matrix ~53
Build a requirements-to-tests traceability matrix.
| Name | Type | Req | Description |
|---|---|---|---|
| requirements | – | – | Explicit list of requirement IDs to check coverage against |
| tests | array | yes | List of test dicts (must include test_id and requirement_mapping) |
Structured output declared, but exposes no named fields.
No examples provided.
detect_language_framework Detect Language Framework ~44
Detect programming language and test framework from source code.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | – | – | Optional file path for extension-based detection |
| source_code | string | yes | Source code to analyze |
Structured output declared, but exposes no named fields.
No examples provided.
feedback_status Feedback Status ~160
Get UTF feedback loop status: gap analysis, coverage health, trend, and delta requirements.
| Name | Type | Req | Description |
|---|---|---|---|
| check_gaps | boolean | – | Run gap analysis and coverage health check (default: True) |
| compute_trend | boolean | – | Compute coverage trend over time (default: True) |
| project_dir | – | – | Absolute path to the caller's project root. Points the registry at <project_dir>/.utf/utf.db. Defaults to the current working directory of the MCP client process. |
| project_id | – | – | Project to report on (defaults to current directory name) |
| requirements | – | – | Requirements text to compare against registry for delta detection |
| trend_days | integer | – | Number of days of history to include in trend (default: 30) |
Structured output declared, but exposes no named fields.
No examples provided.
generate_report Generate Report ~121
Generate the 8-section contract compliance report (Tool #12). Reads test records and execution results from the registry, builds the contract report in the requested formats, and returns report paths + summary.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | – | – | Project root directory (defaults to server cwd). |
| formats | – | – | Output formats: subset of ["html", "junit", "json"]. Defaults to all three. |
| open_html | boolean | – | Open the HTML report in the default browser (dev mode). |
| project_id | – | – | Registry project ID (defaults to current directory name). |
Structured output declared, but exposes no named fields.
No examples provided.
generate_tests Generate Tests ~291
Generate a complete test suite satisfying the 8-section test contract. The framework automatically: - Detects language and framework from source code - Generates tests for happy path, failure paths, and boundary cases - Validates every test against the 8-section contract before returning - Builds a traceability matrix linking tests to requirements - Identifies coverage gaps and makes recommendations
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | – | – | File path hint for language detection (e.g., 'src/auth.py') |
| framework | – | – | Override framework detection. One of: pytest | jest | junit5 | go-test | playwright | k6 |
| language | – | – | Override language detection. One of: python | typescript | javascript | java | go | cpp |
| project_dir | – | – | Absolute path to the caller's project root. The SQLite registry and reports will be stored under <project_dir>/.utf/. Defaults to the current working directory of the MCP client pro… |
| requirements_text | – | – | User stories, acceptance criteria, Jira tickets, or requirements. Include IDs like US-001, AC-2.1, REQ-042 for traceability. |
| source_code | – | – | Source code to analyze (function/class/module). Optional but recommended. |
| test_type | string | yes | Type of tests to generate. One of: unit | integration | api | e2e | contract | performance | security |
Structured output declared, but exposes no named fields.
No examples provided.
health Health ~96
Health check for the Universal Test Framework MCP server. Returns server status, version, and uptime. Suitable for use as a Docker HEALTHCHECK command, Kubernetes liveness/readiness probe, or basic availability verification. Returns: status : "ok" when the server is healthy version : UTF semantic version string uptime_s : seconds the server process has been running tools : number of registered MCP tools
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
import_test_results Import Test Results ~192
Import JUnit XML execution results into the UTF registry. Use this when you have already run tests with pytest / Maven / Go and want to register the results so that generate_report shows real pass/fail rates.
| Name | Type | Req | Description |
|---|---|---|---|
| framework | string | – | Framework label (pytest|jest|...). Default: pytest |
| junit_xml_path | string | yes | Path to the JUnit XML file (absolute or relative to project_dir). |
| language | string | – | Language label (python|typescript|...). Default: python |
| project_dir | – | – | Absolute path to caller's project root. Registry stored at <project_dir>/.utf/utf.db. Defaults to UTF_PROJECT_DIR or cwd. |
| project_id | – | – | Override project name in registry (defaults to project_dir name). |
| test_type | string | – | Test type label (unit|integration|api|e2e|...). Default: e2e |
Structured output declared, but exposes no named fields.
No examples provided.
query_registry Query Registry ~138
Query the UTF persistent test registry.
| Name | Type | Req | Description |
|---|---|---|---|
| language | – | – | Filter by language (python | typescript | …) |
| project_dir | – | – | Absolute path to the caller's project root. Points the registry query at <project_dir>/.utf/utf.db. Defaults to the current working directory of the MCP client process. |
| project_id | – | – | Filter by project (defaults to current directory name) |
| requirement_id | – | – | Filter tests that cover a specific requirement ID |
| status | – | – | Filter by status (generated | executed | failed | gap) |
| test_type | – | – | Filter by test type (unit | integration | api | …) |
Structured output declared, but exposes no named fields.
No examples provided.
register_contracts Register Contracts ~313
Parse test files and register per-method 8-section contract records. This is the UTF registration bridge — it reads LLM-written test files, extracts the per-method 8-section comment blocks, and upserts status=generated rows into the UTF registry. Without this step, generate_report has no Per-Test Contract Detail cards. IMPORTANT — Phase 1, Step ③ of the UTF 3-phase workflow: ① generate_tests (scaffold) ② Write real test methods with per-method TC-{PRJ}-{MODULE}-{NNN} blocks ③ register_contracts ← this tool ④ generate_report (verify contract detail cards) ⑤ pytest --junit-xml=... ⑥ import_test_results ⑦ generate_report (now shows both contract cards AND execution results)
| Name | Type | Req | Description |
|---|---|---|---|
| framework | string | – | One of pytest|jest|junit5|... Default: pytest |
| language | string | – | One of python|typescript|java|go|... Default: python |
| project_dir | – | – | Absolute path to project root (.utf/utf.db lives here). Defaults to UTF_PROJECT_DIR env var or cwd. |
| project_id | – | – | Registry project label. Defaults to project_dir basename. |
| test_files | array | yes | List of test file paths (absolute or relative to project_dir). |
| test_type | string | – | One of unit|integration|api|e2e|... Default: e2e |
Structured output declared, but exposes no named fields.
No examples provided.
run_mutation_tests Run Mutation Tests ~196
Run mutation testing on a source+test file pair and return coverage metrics. Supports mutmut (Python), Stryker (JS/TS), PIT (Java), and gremlins (Go). The adapter is auto-detected based on language and tool availability.
| Name | Type | Req | Description |
|---|---|---|---|
| block_below | number | – | Score below which the result is flagged as blocked (default: 0.50) |
| language | string | yes | Language of the files (python | javascript | typescript | java | go) |
| minimum_score | number | – | Threshold to pass (default: 0.70 = 70% killed) |
| project_dir | – | – | Project root directory (defaults to cwd) |
| source_file | string | yes | Path to the source file to mutate |
| test_file | string | yes | Path to the test file to run against mutants |
| timeout_seconds | integer | – | Mutation run timeout in seconds (default: 300) |
Structured output declared, but exposes no named fields.
No examples provided.
run_tests Run Tests ~128
Execute test files and return structured results with CI annotations. Execution is always optional — controlled by UTF config. Never blocks generation.
| Name | Type | Req | Description |
|---|---|---|---|
| framework | – | – | Test framework hint (pytest | vitest | jest | junit5 | maven | gradle | go) |
| language | string | yes | Language of the tests (python | typescript | javascript | java | go) |
| project_dir | – | – | Project root directory (defaults to cwd) |
| test_files | array | yes | List of test file paths to execute |
| timeout_seconds | integer | – | Per-file execution timeout in seconds (default: 120) |
Structured output declared, but exposes no named fields.
No examples provided.
suggest_test_types Suggest Test Types ~41
Analyze code/requirements and suggest which test types to apply.
| Name | Type | Req | Description |
|---|---|---|---|
| requirements_text | – | – | Requirements or user stories |
| source_code | – | – | Source code to analyze |
Structured output declared, but exposes no named fields.
No examples provided.
validate_test_contract Validate Test Contract ~120
Validate a test or test suite against the 8-section contract. Use this to check any existing test — generated or hand-written — for compliance. The contract requires all 8 sections: Test ID, Why Generated, Requirement Mapping, How it Exercises, Coverage Contribution, Expected Outcome, Gaps, Meaningfulness Check.
| Name | Type | Req | Description |
|---|---|---|---|
| test_content | – | – | Raw markdown test text (paste any test here for quick validation) |
| test_dict | – | – | Structured test as dict with 8-section keys |
| tests_list | – | – | List of raw markdown strings for suite-level validation |
Structured output declared, but exposes no named fields.
No examples provided.
What is the io.github.phoenice-labs/universal-test-framework MCP server?
io.github.phoenice-labs/universal-test-framework is an MCP server listed in the public MCP registry as io.github.phoenice-labs/universal-test-framework. Polyglot MCP test generation with 8-section contract enforcement across Python, TS, Java, Go, C++. This page covers its PyPI package (universal-test-framework).
Is the io.github.phoenice-labs/universal-test-framework MCP server safe to use?
io.github.phoenice-labs/universal-test-framework scores 57 out of 100 on VerifyMCP. We recorded 6 known advisories against it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.phoenice-labs/universal-test-framework MCP server expose?
io.github.phoenice-labs/universal-test-framework exposes 14 tools: generate_tests, validate_test_contract, analyze_coverage, build_traceability_matrix, suggest_test_types, and 9 more. Their descriptions and schemas cost roughly 1,964 tokens of context every time the server is loaded.
Is the io.github.phoenice-labs/universal-test-framework MCP server still maintained?
io.github.phoenice-labs/universal-test-framework is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.