# Qavanin (pypi · qavanin-mcp)

Unofficial read-only qavanin.ir: search Iranian laws and regulations, read full text and status.

- Trust score: 80/100 (high trust)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-23

## Components

- pypi · `qavanin-mcp`: 80/100 (this document), [markdown](https://verifymcp.io/servers/sepehr071-qavanin-mcp/qavanin-mcp.md), [page](https://verifymcp.io/servers/sepehr071-qavanin-mcp/qavanin-mcp)

## Channel facts

- Registry: `pypi`
- Package: `qavanin-mcp`
- Version: `0.1.1`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-23.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 1 of 35 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to sepehr071/qavanin-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 62/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1908 tokens (~272/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 7 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 8 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the Qavanin MCP server?

Qavanin runs locally as a PyPI package, launched with uvx qavanin-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add sepehr071-qavanin-mcp -- uvx qavanin-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "sepehr071-qavanin-mcp": {
      "command": "uvx",
      "args": [
        "qavanin-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "sepehr071-qavanin-mcp": {
      "command": "uvx",
      "args": [
        "qavanin-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add sepehr071-qavanin-mcp -- uvx qavanin-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sepehr071-qavanin-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "qavanin-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add sepehr071-qavanin-mcp --command uvx --arg qavanin-mcp
```

### Hermes

```yaml
mcp_servers:
  sepehr071-qavanin-mcp:
    command: "uvx"
    args: ["qavanin-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "sepehr071-qavanin-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "qavanin-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add sepehr071-qavanin-mcp -t stdio -c uvx -a qavanin-mcp
```

### Other

```json
{
  "mcpServers": {
    "sepehr071-qavanin-mcp": {
      "command": "uvx",
      "args": [
        "qavanin-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-23 (score 80, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-22 (score 65, −14)

- [security regression] Malware scan: pass → unverified
- [functional improvement] Stability: unverified → 0.07
- [functional] Package version: 0.1.0 → 0.1.1

### 2026-10-21 (score 79, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-20 (score 64)

First indexed and scored.

## MCP tools (7)

### `qv_law` (~297 tokens)

Read a law's text

Read the full text of a law, regulation, court vote or opinion as sections (articles, notes, headings).

Each section has `id`, `label` ('ماده 10', 'تبصره 1'), `text`, `status` ('amended', 'repealed', 'opinion'; absent
when plain) and `history: true` when qv_article_history can show its amendments. Long laws are paged by
\`offset`/`next_offset` within `max_chars`; the civil code has about 1,500 sections and takes about 15 s to load
the first time. Get the id from qv_search. Use `article` to answer "what does article N say".

Input parameters:

- `article`: Only this article with its notes, e.g. '10', 'ماده 10', '10 مکرر'.
- `date`: Jalali 'YYYY/MM/DD': the text as it stood on that date (before later amendments).
- `ids` (string, required): Law id (IDS) from qv_search, digits only, e.g. '12021850837713548188'.
- `max_chars` (integer): Text budget per call.
- `offset` (integer): Skip this many sections (use next_offset from the last call).
- `with_opinions` (boolean): Add interpretive opinions (نظر تفسیری) as extra sections.

### `qv_law_info` (~121 tokens)

Law metadata

Metadata of a law: type, approving body, approval, notification and gazette dates and numbers, last status,
effective date, executing bodies and recipients of the copy.

Use after qv_search to cite a law ("approved 1318/..., published in gazette no. ...") or to check its
type. Court votes and opinions carry almost no metadata. Dates are Jalali.

Input parameters:

- `ids` (string, required): Law id (IDS) from qv_search, digits only, e.g. '12021850837713548188'.

### `qv_amendments` (~129 tokens)

Amendments of a law

Which laws amended this one, which this one amends, and which of its articles were amended.

Returns `amended_by` and `amends` (id, title, approval date) and `articles`: section id, label, number of
changes and the latest change. Read one article's full history with qv_article_history(section_id).

Input parameters:

- `ids` (string, required): Law id (IDS) from qv_search, digits only, e.g. '12021850837713548188'.
- `limit` (integer): Max amending/amended laws listed per direction.

### `qv_article_history` (~95 tokens)

History of one article

Every amendment of one article: type (اصلاحی...), date, the amending law and the replacing text.

Use after qv_law or qv_amendments when asked how an article changed. Oldest change first. An article that
was never amended returns an empty list.

Input parameters:

- `section_id` (string, required): Section id from qv_law (items marked history) or qv_amendments.

### `qv_related` (~126 tokens)

Related regulations, votes and opinions

Documents related to a law: other laws, and regulations, court votes and legal opinions that cite or
interpret it (hundreds for the civil code, newest first).

Returns `laws` and `others`, each with id, title and date; read any with qv_law. Votes of the
Administrative Justice Court and opinions are listed by title only.

Input parameters:

- `ids` (string, required): Law id (IDS) from qv_search, digits only, e.g. '12021850837713548188'.
- `limit` (integer): Max related documents returned per group.

### `qv_search` (~525 tokens)

Search laws and regulations

Search the Iranian law and regulation database (qavanin.ir, 168,000 documents) and list matching titles.

Returns total hits, page count and items with `id` (the IDS to give qv_law, qv_law_info, qv_amendments and
qv_related), title, approval date (Jalali), approving body and `repealed` for repealed ones. Text search shows
no snippets. Use for "which law covers X", "all regulations of body Y in a date range" and "latest laws".
Sorting by date has many ties, so paging a long list may repeat or skip a row; narrow the filters instead.

Input parameters:

- `approved_from`: Approval date from, Jalali 'YYYY/MM/DD'.
- `approved_to`: Approval date to, Jalali 'YYYY/MM/DD'.
- `approver_id`: Approving body ids from qv_lookup(kind='approver'); several are OR-ed.
- `command_no`: Notification number (شماره ابلاغ), digits, substring.
- `executor_id`: Executing body ids from qv_lookup(kind='executor').
- `in_text` (boolean): Search the full text of every law, not only the titles.
- `kind`: 'law' (Majlis statutes), 'regulation', 'vote' (court rulings), 'opinion' (legal opinions).
- `limit` (integer): Results per page.
- `list_id`: A curated list id from qv_lookup(kind='list'), e.g. 113 for the latest laws.
- `match` (string): 'all_words' every word as a whole word, 'phrase' words adjacent, 'part_of_word' substring match (the site default, widest), 'any_word' at least one whole word.
- `newspaper_no`: Official gazette number (شماره روزنامه رسمی), digits, substring.
- `page` (integer): Page number, from 1.
- `query`: Words to find, Persian or Arabic letters, e.g. 'مالیات بر ارزش افزوده'.
- `sort` (string): By approval date, or 'title' (alphabetical by database collation; stable for paging).
- `status`: Legal status. 'repealed' = منسوخه; 'moot' = بااجرامنتفی می شود. 'valid' undercounts.
- `subject_id`: Subject ids from qv_lookup(kind='subject').
- `type_id`: Document type ids from qv_lookup(kind='type').

### `qv_lookup` (~189 tokens)

Look up filter ids

Find the ids that qv_search filters take: approving bodies, executing bodies, subjects, types, statuses, lists.

Returns items with `id` and name; approvers, executors and subjects also have `count` (documents) and are
paged by 20. Example: kind='approver', query='مجلس' gives the Majlis id to pass as approver_id.

Input parameters:

- `kind` (string, required): 'approver' (مرجع تصویب), 'executor' (دستگاه مجری), 'subject' (موضوع), 'type' (نوع مصوبه), 'status' (وضعیت) or 'list' (curated lists).
- `page` (integer): Page of 20 for approver, executor and subject.
- `query`: Name fragment, e.g. 'دیوان' or 'بانک'. Empty lists the most used.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/sepehr071-qavanin-mcp/qavanin-mcp#diagnostics

## Score history

- 2026-10-23: 80
- 2026-10-22: 65
- 2026-10-21: 79
- 2026-10-20: 64

## Common questions

### What is the Qavanin MCP server?

Qavanin is an MCP server listed in the public MCP registry as io.github.sepehr071/qavanin-mcp. Unofficial read-only qavanin.ir: search Iranian laws and regulations, read full text and status. This page covers its PyPI package (qavanin-mcp).

### Is the Qavanin MCP server safe to use?

Qavanin scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 October 2026. Its build provenance is signed and verified. 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 Qavanin MCP server expose?

Qavanin exposes 7 tools: qv_law, qv_law_info, qv_amendments, qv_article_history, qv_related, and 2 more. Their descriptions and schemas cost roughly 1,482 tokens of context every time the server is loaded.

### Is the Qavanin MCP server still maintained?

Qavanin is still listed as active in the MCP registry. We last reached this channel on 23 October 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 Qavanin MCP server under?

Qavanin declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/qavanin-mcp/
- Socket report: https://socket.dev/pypi/package/qavanin-mcp
- Repository: https://github.com/sepehr071/qavanin-mcp
- Changelog RSS feed: https://verifymcp.io/servers/sepehr071-qavanin-mcp/qavanin-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/sepehr071-qavanin-mcp/qavanin-mcp.json
- HTML version of this page: https://verifymcp.io/servers/sepehr071-qavanin-mcp/qavanin-mcp
