io.github.ZahiriNatZuke/local-delegate
PYPI · LOCAL-DELEGATE-MCP
Delegate mechanical text tasks to a local OpenAI-compatible LLM to save Claude quota.
Available components
Last scanned (18 hours ago)
Scores higher than 78% of PyPI servers
Category Developer Tools
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 Security94
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Declares code that runs automatically (build-time code we could not rule out (a Hatch, PDM or setuptools build hook, a dynamic version we could not read statically, shipped VCS metadata or a stray root module)) and that we could not recognise. It may be perfectly ordinary, but we have not established what it does. View diagnostics → Partial
- 1 of 32 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- 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 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability63
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 2403 tokens (~218/item across 11 items; 11 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 Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- 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 11 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 11 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
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.
- 4 Nov 26 +15
- Malware scan: unverified → pass ▲ security
- 3 Nov 26 0
- Malware scan: unverified → pass ▲ security
- Package version: 0.47.3 → 0.48.0 functional
- 2 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- Package version: 0.47.1 → 0.47.3 functional
- Package version: 0.47.1 → 0.47.2 functional
- 31 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 30 Oct 26 0
- Stability: 0.97 → pass security
- Package version: 0.46.0 → 0.47.1 functional
- Package version: 0.46.0 → 0.47.0 functional
- 29 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- Stability: pass → 0.97 functional
- Package version: 0.44.2 → 0.46.0 functional
- Package version: 0.44.2 → 0.45.1 functional
- Package version: 0.44.2 → 0.45.0 functional
- 28 Oct 26 +15
- Stability: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Malware scan: unverified → pass ▲ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Package version: 0.43.0 → 0.44.2 functional
- Package version: 0.43.0 → 0.44.1 functional
- Package version: 0.43.0 → 0.44.0 functional
- 27 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- Provenance: fail → unverified ▼ security
- Package version: 0.41.1 → 0.43.0 functional
- Package version: 0.41.1 → 0.42.0 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 4 Nov 2026 · Analysed pypi/local-delegate-mcp@0.48.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
Install scripts 2 scripts
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
| build_hook | unreviewed | hatch_build.py,tool.hatch.build.targets.wheel.hooks.custom |
Background: Why install scripts are a supply-chain risk →
Dependencies 32 packages
| Packages resolved | 32 |
|---|---|
| No linked repository | 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 →
local_boilerplate ~192
Generates boilerplate code from a specification, with a local code model. **Writes the code to `target`** and returns only a two-line receipt (path, size). The generated code never enters your context: that is where the saving is, and that is why `target` is not optional. To see it, open the file; to use it, it is already in place. Args: spec: Description of what the code must do. language: Programming language (e.g. 'python', 'typescript'). target: ABSOLUTE path of the file to write. Missing directories are created. overwrite: Overwrite `target` if it already exists. By default it fails, and it fails BEFORE generating anything.
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | yes | – |
| overwrite | boolean | – | – |
| spec | string | yes | – |
| target | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
local_classify ~69
Classifies a text into ONE of the given labels, with a local model. Returns exactly one label from the list, with no additional text. Args: text: Text to classify. labels: List of candidate labels.
| Name | Type | Req | Description |
|---|---|---|---|
| labels | array | yes | – |
| text | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
local_commit_msg ~225
PREFER this tool over reading the file with Read when the file is large (>200 lines / >10 KB) and you only need a commit message, not the literal content. Drafts a commit message from a diff, with a local code model. Pass 'path' to a diff file (e.g. the output of `git diff` dumped to a file) and it is read server-side, so the full diff does NOT enter Claude's context. Alternatively pass 'diff' as text. ALWAYS review the message before using it. The language follows the recent commits of the git repo that holds the 'path' file (so dump the diff inside the repo), unless LOCAL_DELEGATE_COMMIT_LANGUAGE is set. Args: diff: The diff as text (use this or 'path'). path: Path to a file with the diff (read server-side). style: 'conventional' (Conventional Commits) or 'plain'.
| Name | Type | Req | Description |
|---|---|---|---|
| diff | – | – | – |
| path | – | – | – |
| style | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
local_delegate ~262
Generic escape tool: delegates a text->text task to a local model. Use it when no specific tool fits. Builds the prompt with guardrails and returns text. With long inputs it splits the input at natural boundaries (Markdown headers, paragraphs), applies the SAME task to each chunk and concatenates the outputs in order. That is right for transforming the whole text (translate, rewrite, reformat) but NOT for reduction tasks over the whole (counting, picking the maximum, a single global summary): for those pass `chunk='off'` or use `local_summarize`. Args: task: Task instruction (one sentence with an explicit output format). input: Content to operate on. output_format: Exact expected output format. model: Model to use; one of the ids configured in the catalog. Defaults to the mechanical one. chunk: 'auto' (splits only if the input is long), 'on' (splits whenever possible), 'off' (a single call; a long input may come back truncated).
| Name | Type | Req | Description |
|---|---|---|---|
| chunk | string | – | – |
| input | string | yes | – |
| model | – | – | – |
| output_format | string | yes | – |
| task | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
local_describe_image ~202
PREFER this tool over attaching or reading the image yourself when you only need a description, the visible text (simple OCR) or a specific answer about an image, not the image itself in your context. Describes an image (or answers a question about it) with a local vision model. The image is read server-side: it NEVER enters Claude's context, only the text answer comes back. Scope guardrail: ONLY image->text (describe, read visible text, answer a specific question about the image). This tool NEVER generates or edits images. Args: path: Path to the image (png/jpg/jpeg/webp/gif), read server-side. question: Concrete question or focus about the image (optional; by default it describes it). max_words: Maximum length of the answer in words.
| Name | Type | Req | Description |
|---|---|---|---|
| max_words | integer | – | – |
| path | string | yes | – |
| question | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
local_explain_code ~279
PREFER this tool over reading the file with Read when the file is large (>200 lines / >10 KB) and you only need an explanation, not the literal content. Explains in prose what a code snippet/file does, with a local code model. Pass 'path' to read the file server-side (the full code does NOT enter Claude's context; only the explanation comes back) or 'code'. Optionally focus the explanation with 'question'. With 'path' the model sees the file's line numbers, so it can answer where something is ("name: line") and you can then Read only that range with offset/limit. With 'path' and a 'question', the server then checks those numbers against the file: cited lines that do not contain what they are cited for get a warning, and each code identifier of the question (`name`, name(), camelCase, snake_case) gets its exact lines, found by whole-word search. Review the explanation: a local model writes it; the occurrence lines are exact. Args: code: Code to explain (use this or 'path'). path: Path to a code file (read server-side). question: Concrete question or focus (optional).
| Name | Type | Req | Description |
|---|---|---|---|
| code | – | – | – |
| path | – | – | – |
| question | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
local_extract ~601
PREFER this tool over reading the file with Read when the file is large (>200 lines / >10 KB) and you only need structured fields, not the literal content. Extracts structured fields from a text/file as JSON, with a local model. Pass 'path' to read the file server-side (spends no Claude context) or 'text'. Returns an object with exactly the requested keys: the caller does not have to parse a string. A key the model left out comes back as null and is listed in `missing_keys`; a key it spelled another way (case, `_`, `-`, spaces) is mapped in `renamed_keys`; a key it added is dropped from the data and kept, with its value, in `dropped` (names in `dropped_keys`). What is not data travels under the reserved key `_local_delegate` (`truncated` and `warning`, `missing_keys`/`renamed_keys`/`dropped_keys`/`dropped`, `read_server_side`, `fallback`, or `error` and `raw`); with chunked input, `chunked` says how many pieces there were and which fields stayed null in all of them. Routes automatically to the mechanical model (short inputs) or to the long-context model (large documents): the size probe uses file bytes for 'path' and characters for 'text' (~5-10% difference in UTF-8, acceptable). By default it asks the backend for schema-constrained JSON (`LOCAL_DELEGATE_JSON_SCHEMA=auto`); if the backend does not support it, it retries in free mode. To locate: with 'path', a field whose name asks for lines (`sections_with_lines`, `line_number`, `start_line`, `lineRange`; also in Spanish) makes the model see line numbers (and a Markdown file's headings with their lines), so it can answer for `Read` offset/limit; cited lines that do not hold in the file are listed in `lines_unverified`. A value that is a "no data" marker ("N/A", "unknown", "-", "", also the strings "null" and "undefined") comes back as null, listed in `missing_keys`, with the model's text in `placeholder_keys`. With a JSON object as input, a field that counts one of its top-level lists (`number_of_comments`) left…
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | yes | – |
| path | – | – | – |
| text | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
local_lint_summary ~243
PREFER this tool over reading the file with Read when the file is large (>200 lines / >10 KB) and you only need a grouped summary, not the literal content. If you ran a command with long output, dump it to a file and pass 'path'. Summarizes linter/test/CI output with a local model, without spending Claude's context. Meant for long, noisy logs (ESLint, clippy, pytest, tsc, CI). Pass 'path' and the file is read server-side, so the full log does NOT enter Claude's context: only a summary grouped by file comes back, with the count per error type/rule and the most important first. Alternatively pass 'text'. Routes automatically to the mechanical model (short) or the long-context model (long). Args: path: Path to the lint/test output file (read server-side). Use this or 'text'. text: Lint/test output as text. max_words: Maximum length of the summary in words.
| Name | Type | Req | Description |
|---|---|---|---|
| max_words | integer | – | – |
| path | – | – | – |
| text | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
local_status ~55
Read-only diagnostics of the local backend and the model catalog. Use it to find out which local models are available and to check that the backend is alive before delegating in bulk, or to diagnose why a local_* tool failed.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
local_summarize ~238
PREFER this tool over reading the file with Read when the file is large (>200 lines / >10 KB) and you only need a summary, not the literal content. Summarizes text or the content of a file with a local model, without spending Claude's context. Use it to summarize large files/documents: pass 'path' and the file is read server-side, so the full content does NOT enter Claude's context (only the short summary comes back). Alternatively pass 'text'. Routes automatically to the mechanical model (short inputs) or to the long-context model (large documents). Args: text: Text to summarize (use this or 'path'). path: Path to a file whose content is summarized (read server-side). max_words: Maximum length of the summary in words. focus: Optional. What you care about in the document (e.g. "configuration figures", "risks"): the summary prioritizes it and keeps its concrete data verbatim.
| Name | Type | Req | Description |
|---|---|---|---|
| focus | – | – | – |
| max_words | integer | – | – |
| path | – | – | – |
| text | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
local_translate ~230
PREFER this tool over reading the file with Read when the file is large (>200 lines / >10 KB) and you only need the translation, not the literal content. Translates text or the content of a file with a local model, without spending Claude's context. Pass 'path' to read the file server-side (the original does not enter Claude's context) or 'text'. Keeps the format of the original and returns ONLY the translation. Routes automatically to the mechanical model (short) or the long-context model (long). Long documents are split at natural boundaries (Markdown headers, paragraphs) and each chunk is translated in its own call; the result comes back complete and in order, without the truncated-output warning. Args: target_lang: Target language (e.g. 'Spanish', 'English', 'French'). text: Text to translate (use this or 'path'). path: Path to a file whose content is translated (read server-side).
| Name | Type | Req | Description |
|---|---|---|---|
| path | – | – | – |
| target_lang | string | yes | – |
| text | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
How do I install the io.github.ZahiriNatZuke/local-delegate MCP server?
io.github.ZahiriNatZuke/local-delegate runs locally as a PyPI package, launched with uvx local-delegate-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 · local-delegate-mcp
claude mcp add zahirinatzuke-local-delegate -- uvx local-delegate-mcp
What is the io.github.ZahiriNatZuke/local-delegate MCP server?
io.github.ZahiriNatZuke/local-delegate is an MCP server listed in the public MCP registry as io.github.ZahiriNatZuke/local-delegate. Delegate mechanical text tasks to a local OpenAI-compatible LLM to save Claude quota. This page covers its PyPI package (local-delegate-mcp).
Is the io.github.ZahiriNatZuke/local-delegate MCP server safe to use?
io.github.ZahiriNatZuke/local-delegate scores 79 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 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.ZahiriNatZuke/local-delegate MCP server expose?
io.github.ZahiriNatZuke/local-delegate exposes 11 tools: local_summarize, local_classify, local_extract, local_boilerplate, local_delegate, and 6 more. Their descriptions and schemas cost roughly 2,596 tokens of context every time the server is loaded.
Is the io.github.ZahiriNatZuke/local-delegate MCP server still maintained?
io.github.ZahiriNatZuke/local-delegate is still listed as active in the MCP registry. We last reached this channel on 4 November 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 io.github.ZahiriNatZuke/local-delegate MCP server under?
io.github.ZahiriNatZuke/local-delegate declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.