Skip to main content
Glama

rti-mcp

CI Python 3.10+ License: MIT

An MCP server for querying your own applications on India's RTI Online portal — status, filed text, replies and reply PDFs — without re-entering an OTP and two captchas for every lookup.

Ask your assistant "which of my RTIs are overdue?" instead of clicking through View History one application at a time.

> Which of my RTI requests are more than 30 days overdue?

  14 of your 146 pending requests are past the Act's 30-day deadline.
  The oldest is DGDOR/R/E/21/00133, filed 1,844 days ago…

> What happened to the NIMHANS one?

  NIMNS/R/E/26/00220 — REQUEST DISPOSED OF as on 30/07/2026. A reply PDF
  is available; want me to download it?

Contents

Related MCP server: MANIT ERP MCP Server

Why this works

Logging in to RTI Online and clicking View History lands you on a citizen_view_history.php URL whose emailchk, cellchk and urletoken parameters are server-side encrypted blobs. That URL authenticates itself — it keeps working from a plain HTTP client with no cookies carried over from the browser, and it stays valid for a long time.

This server takes that one URL and walks the rest of the portal from it. You pay the OTP + captcha cost once, whenever the URL eventually stops working.

It is read-only. It only ever reads your own account, and only what the portal already shows you when you are logged in. It cannot file, appeal, edit or pay. Anyone holding your URL can read the same data, so treat it like a password — see Security.

Install

Requires Python 3.10+.

python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install rti-mcp

Install into a virtual environment rather than system Python: the next section asks for an absolute interpreter path, and a venv is what makes that path stable.

git clone https://github.com/gouthamganeshm/rti-mcp.git
cd rti-mcp
python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -e ".[dev]"

Or the unreleased main, without a working copy:

pip install "git+https://github.com/gouthamganeshm/rti-mcp.git"

Point your MCP config at an absolute interpreter path, never a bare python. A bare python resolves to whatever environment happens to be active when the client spawns the server, and the server vanishes from the list with a ModuleNotFoundError the moment that differs from the environment holding the dependencies. Get the right path with:

python -c "import sys; print(sys.executable)"

Get your session URL

  1. Open https://rtionline.gov.in and log in with your OTP and captcha.

  2. Click View History.

  3. Copy the entire URL from the address bar. It looks like:

    https://rtionline.gov.in/request/citizen_view_history.php?emailchk=…&cellchk=…&urletoken=…

Then hand it to the server, either by asking your assistant —

"Set my RTI session URL to https://rtionline.gov.in/request/citizen_view_history.php?emailchk=…"

— which calls rti_set_session_url and stores it in ~/.rti-mcp/config.json, or by exporting it before the client starts:

export RTI_HISTORY_URL="https://rtionline.gov.in/request/citizen_view_history.php?emailchk=…"

The stored config file wins over the environment variable, so rti_set_session_url can refresh an expired URL at runtime without touching your MCP client config or restarting anything.

Register with your MCP client

Each client keeps its own registry — registering with one does not populate another's list.

claude mcp add rti-online -s user -- /absolute/path/to/.venv/bin/python -m rti_mcp

On Windows the interpreter sits elsewhere in the venv, so pass that path instead:

claude mcp add rti-online -s user -- C:\path\to\.venv\Scripts\python.exe -m rti_mcp

Re-pointing an existing entry means removing it first — claude mcp add will not overwrite one that is already registered:

claude mcp remove rti-online -s user

Or a project .mcp.json (key: mcpServers):

{
  "mcpServers": {
    "rti-online": {
      "type": "stdio",
      "command": "/absolute/path/to/.venv/bin/python",
      "args": ["-m", "rti_mcp"]
    }
  }
}

Verify with claude mcp list, or /mcp inside a session.

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

{
  "mcpServers": {
    "rti-online": {
      "command": "C:\\path\\to\\.venv\\Scripts\\python.exe",
      "args": ["-m", "rti_mcp"]
    }
  }
}

Restart Claude Desktop afterwards.

.vscode/mcp.json — note the key is servers, not mcpServers:

{
  "servers": {
    "rti-online": {
      "type": "stdio",
      "command": "/absolute/path/to/.venv/bin/python",
      "args": ["-m", "rti_mcp"]
    }
  }
}

The server will not appear in the Extensions sidebar; that is expected.

The server speaks stdio and is also installed as a console script:

rti-mcp

Equivalent to python -m rti_mcp. Point any MCP-capable client at either.

Tools

Tool

What it does

rti_session_status

Is the stored URL still good, and whose account is it

rti_set_session_url

Store a fresh URL after re-login; clears the cache

rti_dashboard

Registered / disposed / pending totals, requests and appeals

rti_list

List one bucket, with optional filter and paging

rti_search

Find applications by number fragment, authority code or status

rti_overdue

Pending requests past the Act's 30-day reply deadline

rti_status

Current status, remarks and reply availability for one application

rti_details

Full filed application: authority, information sought, CPIO

rti_download

Save the reply PDF or the attached request document

rti_export_csv

Export every request and appeal to CSV

rti_clear_cache

Force the next query to re-read the portal

Things to ask for once it is wired up:

  • "What's the status of NIMNS/R/E/26/00220?"

  • "Which of my RTIs are more than 30 days overdue?"

  • "Anything change on my applications today?"

  • "Download the reply for the NIMHANS one."

  • "Export everything to a spreadsheet."

Configuration

Variable

Default

Meaning

RTI_HISTORY_URL

Seed View History URL (fallback if no config file)

RTI_MCP_HOME

~/.rti-mcp

Config + cache location

RTI_MCP_DOWNLOAD_DIR

~/.rti-mcp/documents

Where PDFs and CSVs land

RTI_MCP_CACHE_TTL

900

Seconds a fetched list stays fresh

Every list-returning tool also takes refresh=true to bypass the cache for one call.

How the portal behaves

Worth knowing, because the constraints shaped the code:

  • No pagination. A bucket's list page carries every row — several hundred registered requests in one ~300 KB response. One fetch gets everything.

  • registered is the superset. Its count equals disposed + pending, so rti_search and rti_export_csv fetch one list per category, not three.

  • Detail links are single-use-ish. Every list fetch mints fresh regId/token params, valid only while that fetch is the most recent successful navigation. Fetching a different list invalidates the previous page's links.

  • A 403 poisons the session. Once one request 403s, the next one fails too, whatever it is. Re-walking seed → list clears it.

client.py encodes these rules: detail links are never cached to disk, several details can be read off one live list, and a 403 triggers an automatic re-walk from the seed URL. Requests are paced ~0.6 s apart to stay polite to a government server.

One known quirk, surfaced rather than hidden: the dashboard's counts sometimes run a row or two ahead of its own list pages (e.g. it says 146 pending while the pending page lists 144). That is the portal's inconsistency, not a parsing gap — the row parser matches the served table exactly, and any row it fails to recognise is reported by rti_session_status instead of being dropped.

Troubleshooting

The server does not appear in the client's tool list. Almost always the interpreter path. Run /absolute/path/to/python -m rti_mcp in a terminal: if it fails with ModuleNotFoundError: No module named 'rti_mcp', the package is installed into a different environment than the one your config names.

"The RTI Online session URL is no longer valid." It expired. Log in again, open View History, copy the URL, and pass it to rti_set_session_url. Nothing else needs changing.

Results look stale. Lists are cached for 15 minutes. Pass refresh=true, or call rti_clear_cache.

A tool reports unparsed_rows. The portal changed its registration-number format and some applications are missing from results. Please open an issue with the shape of the number that failed — not your real one.

Everything 403s. The session got poisoned mid-walk. The client recovers automatically; if it persists, rti_clear_cache then retry.

Security

~/.rti-mcp/config.json holds a URL that grants read access to your entire RTI account. Don't commit it, don't paste it into an issue, and don't put it in a screenshot. There is no logout — revoking it means waiting for the portal to expire it.

Full details, and how to report a vulnerability, in SECURITY.md.

Disclaimer

Not affiliated with, endorsed by, or connected to the Government of India, the Department of Personnel and Training, or the RTI Online portal.

This is an unofficial client that parses HTML the portal was not designed to serve to programs, so it can break whenever the portal changes. It reads only the account whose session URL you supply. Use it for your own applications; don't point it at the portal at large, and don't remove the request pacing.

The 30-day figure rti_overdue uses is the ordinary deadline under §7(1) of the RTI Act, 2005 — shorter and longer periods apply in some cases (48 hours where life or liberty is concerned, 35 or 40 days when routed through an APIO or a third party is involved). Check the Act before relying on a date.

Use this at your own risk.

Contributing

Issues and PRs welcome — see CONTRIBUTING.md. The test suite runs entirely offline against synthetic fixtures, so you can work on the parsers without an RTI account.

License

MIT © Goutham Ganesh M H

Available Tools

11 tools
rti_clear_cacheA

Drop all cached application lists so the next query re-reads the portal. Normally unnecessary -- tools take a refresh flag.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses the side effect of dropping cached application lists and the consequence that the next query re-reads the portal. It also notes that this is normally unnecessary, adding context. It could mention whether any persistent data is affected, but the cache-focused wording is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no redundant information. It front-loads the action and includes a practical note about necessity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, an output schema, and a simple cache-clearing function, the description fully covers purpose, effect, and usage guidance. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema covers 100% of what is needed. Per the baseline for no-parameter tools, the description adds value by explaining the tool's effect rather than requiring parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Drop all cached application lists') and its intended effect ('so the next query re-reads the portal'). This distinguishes the tool from siblings by its cache-clearing purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Normally unnecessary -- tools take a refresh flag', which tells the agent when not to use this tool and points to an alternative (refresh flag on other tools). This is explicit usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rti_dashboardC

Registered / disposed / pending totals for the citizen's RTI requests and first appeals -- the summary shown on the View History dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must fully disclose behavioral traits. It states the output (totals) but does not mention whether the tool triggers network requests, whether the 'refresh' parameter causes side effects, or any authentication/staleness considerations. This is a significant gap for an agent deciding whether to invoke it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the core purpose and context. No word is superfluous, and the em dash effectively separates the output from its domain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists and likely documents return values, but the description omits essential context about the refresh parameter and any behavioral side effects. Given there are no annotations, the tool's complete behavior is not adequately specified for an agent to safely and correctly invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, 'refresh', is a boolean with a default of false, but the schema provides no description and the tool description does not mention it at all. The agent receives no guidance on when setting refresh to true is appropriate or what it does. Since schema coverage is 0% and the description fails to compensate, parameter semantics are completely unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool's output as aggregate totals (registered/disposed/pending) for RTI requests and first appeals, and identifies it as the View History dashboard summary. This distinguishes it from sibling tools like rti_list or rti_search by focusing on dashboard totals rather than itemized lists. The absence of an explicit action verb (e.g., 'get') slightly reduces clarity but the intent remains unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit when-to-use guidance or alternatives. It implies a dashboard context but does not contrast with sibling tools (e.g., rti_list, rti_status) or state when not to use it. This leaves the agent to infer the tool's role relative to others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rti_detailsA

Full filed details of one RTI application by registration number: public authority, the complete text of information sought, applicant particulars, BPL status, concerned CPIO and any attached document. Use rti_status instead if you only need the current state.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo
registration_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It lists the informational content returned but does not mention side effects, cache/refresh behavior, or any prerequisites. The refresh parameter implies possible cache clearing or re-fetching, which is not disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first states the tool's scope and contents, the second provides a clear alternative. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values are already documented. The description effectively covers purpose, usage, and a key alternative, but leaves a gap around the refresh parameter and any session prerequisites (e.g., rti_set_session_url). This prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains registration_number by context ('by registration number') but entirely ignores the refresh parameter. The agent receives no guidance on what refresh does or when to set it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: retrieving full filed details of a single RTI application by registration number. It enumerates the specific content returned and explicitly differentiates from rti_status, making it distinct from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use this tool versus an alternative: 'Use rti_status instead if you only need the current state.' This gives clear when-to-use and when-not-to-use direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rti_downloadA

Download an application's PDF to disk. kind='reply' fetches the public authority's reply (only on disposed applications); kind='request' fetches the document attached to the original request. Returns the saved path; defaults to the server's documents folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoreply
pathNo
registration_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the tool's behavior: fetching specific document types, saving to disk, returning the saved path, and defaulting to the server's documents folder. It lacks details on error handling or prerequisites like session setup, but for a download tool this is adequate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and every sentence adds value. It explains the two kinds, the return value, and the default path without any redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 optional parameters, no annotations), the description covers the main behaviors and edge condition for 'reply'. However, it does not mention session prerequisites (sibling tools like rti_session_status suggest a session is needed) or what happens if the application is not found or the download fails. With an output schema present, return values are adequately covered, but the description could be more complete regarding prerequisites and failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the 'kind' parameter with two valid values and their meanings, and implies the 'path' parameter via the default folder note. The 'registration_number' is not explicitly described but is inferable from 'an application's PDF'. This provides meaningful semantics beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Download an application's PDF to disk' with a specific verb and resource. It distinguishes from sibling tools like rti_list (listing) and rti_details (viewing details) by focusing on downloading PDFs, and further differentiates between 'reply' and 'request' document types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when to use each 'kind' value, including the condition that 'reply' only works on disposed applications. However, it does not explicitly mention alternatives or when not to use this tool, so it falls short of an explicit when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rti_export_csvB

Export every RTI request and appeal to a CSV file for tracking or analysis -- registration number, applicant, filing date, current status and status date.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for revealing behavioral traits. It states the export action but does not mention side effects, whether it writes a file to disk or returns data, authentication requirements, or how the 'refresh' parameter affects behavior. This is a significant gap for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly worded sentence that immediately conveys the core purpose. It avoids redundancy and every phrase adds value, with no filler or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the output schema exists (so return values are covered) and the description is concise, the tool has two parameters with no explanation, and there is no behavioral or usage guidance. In the context of complex RTI tools, this description leaves too many gaps for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no explanation of the 'path' and 'refresh' parameters. While it lists the CSV fields, that does not clarify parameter meaning. Since the description fails to compensate for the absent schema descriptions, parameter semantics are virtually nonexistent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: exporting every RTI request and appeal to a CSV file. It specifies the output format (CSV), the scope (all requests and appeals), and the included fields, which distinguishes it from sibling tools like rti_list or rti_details that likely return data in-app rather than as a file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for tracking or analysis' implies a use case, but there's no explicit guidance on when to use this tool over alternatives like rti_list or rti_download, nor are there any exclusions or conditions stated. The context is clear enough but lacks explicit differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rti_listA

List RTI applications in one bucket. category: 'request' or 'appeal'; status: 'registered' (all of them), 'disposed' or 'pending'. Optional search filters on registration number, applicant, status text, filing date or status date; dates match in either 2026-08-07 or 07/08/2026 form. Results are newest-first as the portal returns them.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
searchNo
statusNopending
refreshNo
categoryNorequest

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden. It adds meaningful details: results are newest-first as the portal returns them, both date formats are accepted, and status semantics are explained. It does not mention auth or pagination, but these are less critical for a list operation and output schema covers return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver essential information without redundancy. The first sentence immediately states the primary action, and the second packs search/filter behaviors efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return values, and the description provides enough about filtering and ordering for a list tool. A slight gap exists: no explicit guidance on when to use this versus rti_search, and refresh is not described. Overall, it's well within the viable range.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates by explaining category values, status values, and search fields in detail. It does not explicitly explain limit, offset, or refresh, but these are common and have defaults in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('List') and clear resource ('RTI applications in one bucket'), and the category/status filters distinguish it from sibling tools like rti_search and rti_dashboard. The scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear filtering context (category, status, search fields) and even clarifies date formats and result ordering. However, it does not explicitly contrast with alternatives such as rti_search or state when this tool should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rti_overdueA

Pending RTI requests whose reply is overdue. The RTI Act gives a public authority 30 days to reply, so days defaults to 30. Returns the oldest first with the number of days elapsed -- use it to decide which applications are ripe for a first appeal.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
refreshNo
categoryNorequest

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that results are returned 'oldest first with the number of days elapsed,' which is useful. However, it does not explain the effect of the `refresh` parameter or any caching behavior, which is a significant gap for a tool that likely fetches data. It also does not mention whether the tool is read-only (though implied).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action, then adds context and a practical use case. Every sentence earns its place, with no fluff or redundancy. It is concise yet informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core functionality, legal context, and return behavior, but it fails to mention the `refresh` and `category` parameters, which are essential for understanding the tool's full capability. Given that an output schema exists, return values need not be detailed, but parameter semantics are left incomplete. The tool is moderately complex, so these gaps impact completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains `days` (defaults to 30 and serves as the overdue threshold). However, it does not explain `refresh` or `category`, leaving these parameters ambiguous. This is a major omission since the description is the only source of parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Pending RTI requests whose reply is overdue.' This distinguishes it from sibling tools like rti_list or rti_search, which do not focus on overdue filtering. The specific reference to the RTI Act's 30-day reply window further clarifies the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a concrete use case: 'use it to decide which applications are ripe for a first appeal.' It explains the default threshold (30 days) and implies that this tool is for identifying overdue requests, distinguishing it from general listing tools. It lacks an explicit 'when not to use' but gives sufficient context for appropriate invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rti_session_statusA

Check whether the stored RTI Online session URL still works, and show whose account it belongs to plus how stale the cached lists are. Run this first when other tools report authentication problems.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It describes what the tool does (checks, shows) and adds context about account and cache staleness, implying a read-only operation. It doesn't explicitly state 'no side effects,' but the wording sufficiently indicates a diagnostic tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states functionality, the second gives actionable usage guidance. It's concise, front-loaded, and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a status diagnostic tool with no parameters and an output schema, the description fully covers purpose, usage context, and what the tool reports. The presence of the output schema obviates the need to explain return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema trivially covers everything. Per the rubric, 0 params yields a baseline of 4, and the description doesn't need to add parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks the stored RTI Online session URL validity, shows account ownership, and indicates cache staleness, which distinctly separates it from sibling tools like rti_status or rti_dashboard. The verb 'Check' plus specific resources makes the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage guidance is provided: 'Run this first when other tools report authentication problems.' This tells the agent exactly when to use the tool, even though it doesn't mention alternatives, the 'when' is clearly specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rti_set_session_urlA

Store a new RTI Online 'View History' session URL, replacing any previous one and clearing cached data. Use when the old URL stops working: the user logs in at rtionline.gov.in with OTP + captcha, clicks 'View History', and copies the full address-bar URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for disclosing behavior. It explicitly mentions two side effects: 'replacing any previous one and clearing cached data.' This gives the agent critical information about the destructive nature of the operation, though it does not mention rate limits or other potential side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: two sentences, with the first covering the action and the second providing usage context. Every word contributes, with no redundant or vague phrases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, output schema present), the description covers the essential context: purpose, replacement/cache behavior, when to use, and where the URL comes from. The output schema handles return values, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only a bare 'url' string with no description (0% coverage). The description compensates by explaining the source of the value: 'copies the full address-bar URL' from the user's browser. This adds meaningful context that the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Store a new RTI Online View History session URL' with specific actions 'replacing any previous one and clearing cached data.' It distinguishes itself from siblings by focusing on setting the session URL, which is unique among the listed tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear scenario for use: 'Use when the old URL stops working' followed by the exact user steps. It does not explicitly mention alternatives or exclusions, but the 'when' context is strong enough to guide an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rti_statusA

Current status of one RTI application by registration number (e.g. 'NIMNS/R/E/26/00220') -- the state, the date it changed, the public authority's remarks or reply summary, and whether a reply PDF is available. This is the everyday 'what happened to my RTI' lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo
registration_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral transparency. It discloses what the tool returns (state, date changed, remarks/reply summary, PDF availability), which is useful. However, it does not mention side effects or behaviors such as whether a refresh triggers a new external request, whether data is cached, or any rate limits. This is a moderate level of disclosure for a simple status query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and a concrete example, followed by the return value details and a colloquial framing. Every clause earns its place, with no fluff or repetition. This is exemplary conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-record status lookup, the description covers the essential purpose, input example, and output content. An output schema exists, so return values don't need further explanation. The only notable omission is the behavior of the refresh parameter, which could affect correct invocation. Overall, it is quite complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides an explicit example format for registration_number ('NIMNS/R/E/26/00220'), which adds real semantic value. However, the refresh boolean parameter is entirely unaddressed in both the schema and the description, leaving its purpose and effect ambiguous. The description partially compensates but has a clear gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: retrieving the current status of one RTI application by registration number. It specifies the exact resource (one RTI application) and the action (status lookup), and includes an example format. This distinguishes it from sibling tools like rti_list and rti_search, which operate on multiple applications or different criteria.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that this is the everyday 'what happened to my RTI' lookup for a single application, which implies usage when a specific registration number is known. However, it does not explicitly mention alternatives like rti_details or rti_search, nor does it state when not to use this tool, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.1.0
    • First observedrti_clear_cache
    • First observedrti_dashboard
    • First observedrti_details
    • First observedrti_download
    • First observedrti_export_csv
    • First observedrti_list
    • First observedrti_overdue
    • First observedrti_search
    • First observedrti_session_status
    • First observedrti_set_session_url
    • First observedrti_status

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: session management, dashboard summary, list, search, overdue, single status, full details, download, export, and cache clearing. The overlap between rti_status and rti_details is resolved by their descriptions.

Naming Consistency4/5

All tool names share the rti_ prefix, making them easy to recognize. However, the action words mix nouns (status, details, dashboard) with verbs (download, export_csv, clear_cache), which is a minor inconsistency from a strict verb_noun convention.

Tool Count5/5

11 tools is well within the ideal 3-15 range for a focused portal-interaction server. Each tool covers a necessary operation without unnecessary bloat.

Completeness5/5

The tool surface is complete for its stated purpose: managing and tracking RTI applications. It covers session setup, verification, browsing, searching, detailed lookup, downloads, and export — no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers