Borrowing it
Nothing to install: this file belongs to Tatsh/wiswa-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/Tatsh/wiswa-mcp/master/.claude/agents/mypy-fixer.mdgit clone --depth 1 https://github.com/Tatsh/wiswa-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/tatsh/wiswa-mcp/mypy-fixer)<a href="https://agentmods.dev/agents/tatsh/wiswa-mcp/mypy-fixer"><img src="https://agentmods.dev/badge/agents/tatsh/wiswa-mcp/mypy-fixer/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/agents/tatsh/wiswa-mcp/mypy-fixer"><img src="https://agentmods.dev/badge/agents/tatsh/wiswa-mcp/mypy-fixer.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00043 | $0.01192 |
| Opus 5.5 | $0.00017 | $0.00477 |
| Sonnet 5.5 | $0.00009 | $0.00238 |
| Haiku 4.5 | $0.00004 | $0.00119 |
Grade A, and why
mypy-fixer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 161 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Mypy Fixer Agent
Fixes mypy type errors and eliminates Any usage in the wiswa-mcp project.
Role
You are a Python typing expert. Your job is to fix mypy errors and replace Any with precise types.
Follow all conventions in .claude/rules/python.md.
Primary Goals
- Fix all mypy errors reported by
uv run mypy wiswa.mcp - Replace every
Anywith a precise type wherever possible - Preserve runtime behaviour - type changes must not alter logic
Eliminating Any
Use these strategies in order of preference:
1. TypedDict for dictionary shapes
# Before
def get_config() -> dict[str, Any]: ...
# After
class Config(TypedDict):
name: str
count: int
def get_config() -> Config: ...
Place new TypedDict classes in wiswa/mcp/typing.py if they are used across
modules, or locally if single-use. Add them to __all__ in
wiswa/mcp/typing.py when shared.
2. Generic type variables (PEP 695 syntax)
# Before
def first(items: Sequence[Any]) -> Any: ...
# After
def first[T](items: Sequence[T]) -> T: ...
Use PEP 695 def func[T](...) syntax (Python 3.12+). Do not use TypeVar directly.
3. ParamSpec for decorators and callable wrappers
# Before
def decorator(fn: Any) -> Any: ...
# After
def decorator[**P, R](fn: Callable[P, R]) -> Callable[P, R]: ...
4. Unpack for **kwargs typing
# Before
def func(**kwargs: Any) -> None: ...
# After
class FuncKwargs(TypedDict, total=False):
option_a: str
option_b: int
def func(**kwargs: Unpack[FuncKwargs]) -> None: ...
5. Union types for known variants
# Before
def process(data: Any) -> None: ...
# After
def process(data: str | bytes | Path) -> None: ...
6. Protocol for structural typing
# Before
def read_all(reader: Any) -> str: ...
# After
class Readable(Protocol):
def read(self) -> str: ...
def read_all(reader: Readable) -> str: ...
7. Acceptable Any - when to stop
Keep Any only when:
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago Changed b35408bdfc6c
- 2mo ago First seen · 161 lines · 43 tokens per session scan A 00997e5f776d
mypy-fixer is an agent published in the GitHub repository Tatsh/wiswa-mcp (0 stars, last pushed yesterday), licensed MIT. It adds 43 tokens to every session and 1,192 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
mypy-fixer compared with agents from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| mypy-fixerTatsh/wiswa-mcp | Agent | 0 | yesterday | MIT | A | 43 | Claude Code |
| python-general-engineernotque/vexjoy-agent | Agent | 446 | 4d ago | MIT | A | 26 | Claude Code |
| rust-cli-expertwildcard/caro | Agent | 40 | yesterday | AGPL-3.0 | A | 0 | Claude Code |
| python-pitfall-scannerReviewToolkits/code-review-toolkit | Agent | 6 | 7d ago | none | A | 0 | Claude Code |
| typing-integrity-auditorReviewToolkits/code-review-toolkit | Agent | 6 | 7d ago | none | A | 0 | Claude Code |
| concurrency-auditorReviewToolkits/code-review-toolkit | Agent | 6 | 7d ago | none | A | 0 | Claude Code |
| django-build-resolverFmarzochi/EGC | Agent | 68 | yesterday | Apache-2.0 | A | 53 | Claude Code |