Grafyx
PYPI · GRAFYX-MCP · SCANNED SEP 22
Real-time codebase graph for AI assistants: call graphs, dependencies, symbol lookup.
Available components
Recent critical change
CVE-2026-78676 affects this package (9 Sept 2026). See the changelog before you install this server.
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 Security74
- No malware found by supply-chain analysis.Pass
- CVE check failed: an unpatched critical CVE affects this package; the score is capped at 0. See how to fix → View diagnostics → Fail
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 28 of 211 dependencies flagged as unhealthy (1 deprecated). View diagnostics → Partial
Provenance & Transparency45
- 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
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 47 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability71
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2264 tokens (~161/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 Management90
- Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage92
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 74% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Grafyx MCP server?
Grafyx runs locally as a PyPI package, launched with uvx grafyx-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · grafyx-mcp
claude mcp add bilal07karadeniz-grafyx -- uvx grafyx-mcp
{
"mcpServers": {
"bilal07karadeniz-grafyx": {
"command": "uvx",
"args": [
"grafyx-mcp"
]
}
}
} {
"servers": {
"bilal07karadeniz-grafyx": {
"command": "uvx",
"args": [
"grafyx-mcp"
]
}
}
} codex mcp add bilal07karadeniz-grafyx -- uvx grafyx-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"bilal07karadeniz-grafyx": {
"type": "local",
"command": [
"uvx",
"grafyx-mcp"
],
"enabled": true
}
}
} openclaw mcp add bilal07karadeniz-grafyx --command uvx --arg grafyx-mcp
mcp_servers:
bilal07karadeniz-grafyx:
command: "uvx"
args: ["grafyx-mcp"] {
"McpServers": {
"bilal07karadeniz-grafyx": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"grafyx-mcp"
]
}
}
} assistant mcp add bilal07karadeniz-grafyx -t stdio -c uvx -a grafyx-mcp
{
"mcpServers": {
"bilal07karadeniz-grafyx": {
"command": "uvx",
"args": [
"grafyx-mcp"
]
}
}
} 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.
- 19 Sept 26 0
- Stability: pass → 0.80 functional
- 18 Sept 26 0
- Stability: 0.97 → pass security
- 15 Sept 26 0
- Malware scan: unverified → pass ▲ security
- 14 Sept 26 0
- Malware scan: pass → unverified ▼ security
- 13 Sept 26 0
- Stability: pass → 0.83 functional
- 12 Sept 26 0
- Stability: 0.97 → pass security
- 9 Sept 26 0
- CVE-2026-78676 affects this package: high ▼ critical
- 5 Sept 26 0
- Stability: pass → 0.77 functional
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 22 Sept 2026 · Analysed pypi/grafyx-mcp@0.2.4
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 | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Vulnerabilities 66 findings
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| PYSEC-2026-2132 | CVE-2026-7246 | high | CVSS:3.1/AV:L/AC:H/PR:H/UI:R/S:C/C:H/I:H/A:H | yes |
| GHSA-284h-m62q-gf8w | CVE-2026-78676 | critical | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-2f96-g7mh-g2hx | CVE-2026-67325 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-3f7w-8rr8-f37f | CVE-2026-73620 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H | yes |
| GHSA-3rp5-jjmw-4wv2 | CVE-2026-69097 | high | CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H | yes |
| GHSA-3wxw-xv34-2frg | CVE-2026-78679 | medium | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N | yes |
| GHSA-4gmw-gg2m-w46p | CVE-2026-76219 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H | yes |
| GHSA-539m-9xh6-q6rr | CVE-2026-73619 | medium | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N | yes |
| GHSA-5xxx-qhh7-9287 | CVE-2026-78678 | medium | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N | yes |
| GHSA-6p8h-3wgx-97gf | CVE-2026-73623 | high | CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-7545-fcxq-7j24 | CVE-2026-44243 | high | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H | yes |
| GHSA-7833-fr7j-v32q | CVE-2026-78675 | high | CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-8mcc-hrx5-hvxc | CVE-2026-78677 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N | yes |
| GHSA-94p4-4cq8-9g67 | CVE-2026-73622 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N | yes |
| GHSA-956x-8gvw-wg5v | CVE-2026-67323 | high | CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-9rj7-rf2p-w77r | CVE-2026-76218 | high | CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-fjr4-x663-mwxc | CVE-2026-73624 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H | yes |
| GHSA-hh9p-6wh2-4mfc | CVE-2026-76217 | medium | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N | yes |
| GHSA-hmq2-w58f-27jc | CVE-2026-76222 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:L | yes |
| GHSA-jm78-9fvv-mhgr | CVE-2026-76221 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-mv93-w799-cj2w | CVE-2026-67326 | high | CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H | yes |
| GHSA-p538-c434-8v24 | CVE-2026-73621 | medium | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L | yes |
| GHSA-r9mr-m37c-5fr3 | CVE-2026-73625 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-rpm5-65cw-6hj4 | CVE-2026-42215 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-rwj8-pgh3-r573 | CVE-2026-67322 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N | yes |
| GHSA-v87r-6q3f-2j67 | CVE-2026-44244 | high | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-wvpp-8hx9-p66j | CVE-2026-76220 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| GHSA-x2qx-6953-8485 | CVE-2026-42284 | high | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-2160 | CVE-2026-42215 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-2161 | CVE-2026-42284 | critical | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-2162 | CVE-2026-44243 | high | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H | yes |
| PYSEC-2026-2163 | CVE-2026-44244 | high | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-3783 | CVE-2026-76221 | none | yes | |
| PYSEC-2026-3784 | CVE-2026-76222 | none | yes | |
| PYSEC-2026-3785 | CVE-2026-78675 | high | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-3786 | CVE-2026-78676 | none | yes | |
| PYSEC-2026-3787 | CVE-2026-78677 | none | yes | |
| PYSEC-2026-3788 | CVE-2026-78678 | none | yes | |
| PYSEC-2026-3836 | CVE-2026-67325 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-3837 | CVE-2026-78679 | medium | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N | yes |
| PYSEC-2026-3838 | CVE-2026-76219 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H | yes |
| PYSEC-2026-3839 | CVE-2026-67323 | high | CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-3840 | CVE-2026-76218 | high | CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-3841 | CVE-2026-76217 | medium | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N | yes |
| PYSEC-2026-3842 | CVE-2026-67322 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N | yes |
| PYSEC-2026-3843 | CVE-2026-76220 | high | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | yes |
| PYSEC-2026-3948 | CVE-2026-73619 | none | yes | |
| PYSEC-2026-3949 | CVE-2026-73620 | none | yes | |
| PYSEC-2026-3950 | CVE-2026-73621 | none | yes | |
| PYSEC-2026-3951 | CVE-2026-73622 | none | yes |
Showing 50 of 66 vulnerabilities.
Background: What a vulnerability scan can and cannot prove →
Dependencies 211 packages
| Packages resolved | 211 |
|---|---|
| Deprecated | 1 |
| Stale | 23 |
| No linked repository | 5 |
| 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 →
find_related_code ~67
Find functions, classes, and files related to a natural language description. Use this when you know WHAT you're looking for conceptually but not WHERE it lives in the codebase. Prevents duplicating existing functionality.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | yes | – |
| max_results | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
find_related_files ~65
Find files related to a natural language description by scoring symbols inside them. Use this when you need to understand which files are relevant to a feature or concept. Returns files grouped with their matching symbols.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | yes | – |
| max_results | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_call_graph ~145
Get the call graph for a function: what it calls and what calls it, recursively up to the specified depth. Supports 'ClassName.method_name' syntax (e.g., 'SkillManager.initialize'). If multiple functions share the same name, returns a disambiguation list. Use this to trace execution flow and understand how a function fits into the larger call chain. By default, Python builtins and common stdlib methods (len, append, strip, etc.) are filtered out for clarity. Set include_builtins=True to see everything.
| Name | Type | Req | Description |
|---|---|---|---|
| depth | integer | – | – |
| function_name | string | yes | – |
| include_builtins | boolean | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_class_context ~102
Get comprehensive context for a class: methods, properties, inheritance chain, and usages throughout the codebase. Use this when you need to understand a class's interface and where it is used.
| Name | Type | Req | Description |
|---|---|---|---|
| class_name | string | yes | Name of the class to look up. |
| detail | string | – | Level of detail: "signatures", "summary" (default), or "full". |
| include_hints | boolean | – | If True, append navigation suggestions. |
Structured output declared, but exposes no named fields.
No examples provided.
get_conventions ~41
Detect and report coding conventions used in this codebase. Use this to understand the project's style BEFORE writing new code, so your additions are consistent with existing patterns.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_dependency_graph ~61
Get the dependency graph for a symbol: what it depends ON and what depends on IT, up to the specified depth. Use this to understand the impact radius of changing a symbol.
| Name | Type | Req | Description |
|---|---|---|---|
| depth | integer | – | – |
| symbol_name | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_file_context ~106
Get comprehensive context for a file: functions, classes, imports, and relationships to other files. Use this when you need to understand what a file contains and how it connects to the rest of the codebase.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | Level of detail: "signatures", "summary" (default), or "full". |
| file_path | string | yes | Path to the file to inspect. |
| include_hints | boolean | – | If True, append navigation suggestions. |
Structured output declared, but exposes no named fields.
No examples provided.
get_function_context ~226
Get comprehensive context for a function: signature, parameters, callers, callees, dependencies, and docstring. Supports 'ClassName.method_name' syntax (e.g., 'ToolExecutor.execute'). For two top-level functions sharing the same name in different files (where ``ClassName.method`` doesn't apply), pass ``file_path`` to pick one. If multiple matches remain, returns a disambiguation list. Use this when you need to understand what a function does, who calls it, and what its blast radius is for modifications.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | Level of detail: "signatures", "summary" (default), or "full". |
| file_path | string | – | Optional path filter to disambiguate same-named top-level functions in different files. Matched by substring against each candidate's filepath, so a partial path like ``"api/agents.py"`` is enough. |
| function_name | string | yes | Name of the function to look up. |
| include_hints | boolean | – | If True, append navigation suggestions. |
Structured output declared, but exposes no named fields.
No examples provided.
get_module_context ~207
Get an overview of all symbols in a directory/package. This is the intermediate zoom level between get_project_skeleton (whole project) and get_file_context (single file). Use it to understand what a package contains before drilling into specifics.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | Level of detail: "signatures", "summary" (default), or "full". |
| include_hints | boolean | – | If True, append navigation suggestions. |
| limit | integer | – | Maximum number of files to return (0 = no limit, default). Combine with offset to page through modules with hundreds of files where the response would otherwise be truncated. ``total_files`` in the r… |
| module_path | string | – | Directory path relative to project root (e.g. "services", "grafyx/graph"). Empty string means the whole project. |
| offset | integer | – | Number of files to skip (for paginating large modules). |
Structured output declared, but exposes no named fields.
No examples provided.
get_project_skeleton ~207
Get the full project structure with file tree and statistics. Call this first when starting work on a project to understand its overall shape, module layout, and code distribution.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | Level of detail: - ``"signatures"``: compact overview — totals, languages, and ``top_files`` (15 most code-dense files). Drops the file tree, directory stats, and per-language breakdown. Use wh… |
| include_hints | boolean | – | If True, append navigation suggestions. |
| max_depth | integer | – | Maximum depth for the file tree display. |
Structured output declared, but exposes no named fields.
No examples provided.
get_subclasses ~220
Find all classes that extend a given class, recursively. Use this to understand the impact of changing a class's interface: which subclasses would need updating? Supports multi-level inheritance trees up to the specified depth. When the codebase has multiple classes sharing ``class_name`` (e.g. Django defines ``Field`` in both ``contrib/gis/gdal/field.py`` and ``db/models/fields/__init__.py``), pass ``file_path`` to pick the intended definition. Without it, the first match wins and the response includes ``ambiguous: True`` plus a ``candidates`` list so you can retry.
| Name | Type | Req | Description |
|---|---|---|---|
| class_name | string | yes | Name of the base class to find subclasses of. |
| depth | integer | – | How many inheritance levels to traverse (1 = direct only). |
| file_path | string | – | When ambiguous, pick the definition in this file. Substring match is NOT done — pass the exact path Grafyx reports in the ``candidates`` list of an ambiguous response. |
Structured output declared, but exposes no named fields.
No examples provided.
get_unused_symbols ~124
Find functions and classes with zero inbound references (dead code detection). Analyzes the caller index and import graph to identify symbols that are never called, subclassed, or referenced from other code. Excludes common false positives: dunder methods, framework-decorated handlers, entry points, and exception classes.
| Name | Type | Req | Description |
|---|---|---|---|
| include_tests | boolean | – | If True, also scan test files for unused code. |
| max_results | integer | – | Maximum results per category. |
| symbol_type | string | – | What to search for: "all", "functions", or "classes". |
Structured output declared, but exposes no named fields.
No examples provided.
refresh_graph ~101
Bring the codebase graph up to date with the code on disk. Use this after making changes to the codebase, or if the graph seems stale. On mirrored (Windows-mount) projects the mirror is re-synced first and only the changed files are re-parsed (incremental, ~seconds); a full re-parse runs only when the change set can't be determined. Normally the file watcher handles this automatically on native projects.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
set_project ~91
Set or change the project directory that Grafyx analyzes. Call this when Grafyx reports 'No project loaded' — typically when running as a global MCP server. Pass the workspace root path. After calling this, all other Grafyx tools will work on the specified project. Re-call with a different path to switch projects.
| Name | Type | Req | Description |
|---|---|---|---|
| project_path | string | yes | Absolute path to the project root directory. |
Structured output declared, but exposes no named fields.
No examples provided.
What is the Grafyx MCP server?
Grafyx is an MCP server listed in the public MCP registry as io.github.bilal07karadeniz/grafyx. Real-time codebase graph for AI assistants: call graphs, dependencies, symbol lookup. This page covers its PyPI package (grafyx-mcp).
What tools does the Grafyx MCP server expose?
Grafyx exposes 14 tools: get_project_skeleton, get_function_context, get_file_context, get_class_context, get_module_context, and 9 more. Their descriptions and schemas cost roughly 1,763 tokens of context every time the server is loaded.
Is the Grafyx MCP server still maintained?
Grafyx is still listed as active in the MCP registry. We last reached this channel on 22 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Grafyx MCP server under?
Grafyx declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.