Skip to main content
Glama

oahelper-mcp

Built by Sirjan Singh

GitHub stars License: MIT MCP skills.sh

An MCP server that lets Claude Code, Claude Desktop, Cursor, Codex or any other MCP client read your own OAHelper Pro account: company OA question sets, full problem statements, MCQ answer keys, official solutions and interview experiences. Everything it fetches is also saved as plain markdown on your disk, so you can prep offline, in Obsidian, or with an agent that never touches the network again.

It also ships 9 skills for mock OAs, MCQ drills, hint-based coaching, interview briefs, study plans and spaced revision.

The server is one small Python package with a single dependency (the official mcp SDK). HTTP is the standard library.

Quick install

You use

One command

Claude Code (server + all 9 skills)

/plugin marketplace add SirjanSingh/oahelper-mcp then /plugin install oahelper@oahelper-mcp

Just the skills, any agent

npx skills add SirjanSingh/oahelper-mcp

Just the server, any MCP client

uvx --from git+https://github.com/SirjanSingh/oahelper-mcp oahelper-mcp (see Connect it to your agent)

The Claude Code plugin asks for your OAHelper cookie when you enable it and keeps it in secure storage. Its skills show up as /oahelper:oa-mock, /oahelper:mcq-drill and so on.

Read this first. OAHelper's Terms of Service forbid automated access and scraping, and the penalty can be losing your Pro account. This tool is built to be used the way a person uses the site: one company at a time, only when you ask, 2 seconds between requests, a hard daily cap (300 by default), and a disk cache so nothing is fetched twice. It uses your own logged-in browser session, ships no content, and gives you nothing your plan does not already include. Whether to run it is your decision and your risk. Do not use it to crawl the site, and never publish or share what it saves.

Related MCP server: coursera

What you get

Tool

What it does

Network

oahelper_search(company)

Lists a company's OA sets with dates, counts and refs

1 request (cached 1 day)

oahelper_sync(company, max_items=20)

Downloads a company's sets, questions, MCQ answers and interview write-ups into the library, newest first. Stops after max_items requests and tells you how much is left

up to max_items

oahelper_company(slug_or_url)

One set page by slug or .../company-questions/<slug> URL

1 request

oahelper_question(ref_or_url)

One question: statement, MCQ answers with explanations, optional images and community solutions

1 to 4 requests

oahelper_solution(ref_or_url, language)

Official solution (cpp, python, java). Uses your plan's solution quota

1 request

oahelper_interviews(company)

Interview experiences for a company, full text saved

1 to 2 requests

oahelper_offline(company="")

What is already saved. Works with no session at all

none

oahelper_status(online=False)

Is a session configured, requests used today, optional Pro check

none or 1

The library layout:

library/<company>/
  index.md            sets, interviews and counts, with links
  sets/<ref>-<name>.md
  questions/<ref>-<title>.md
  interviews/<id>-<role>.md
  images/             only when you ask for them

All of it lives in your data folder: ~/.oahelper by default, the repo folder when you run from a clone, or wherever OAHELPER_HOME points. Inside a clone, library/, cache/ and .env are gitignored. Keep it that way.

Requirements

  • uv (recommended), or Python 3.10+ with pip

  • An OAHelper account (most content needs Pro)

  • Any MCP client that can launch a local stdio server

Add your session

  1. Open https://www.oahelper.in in your browser while logged in.

  2. Press F12, open the Network tab, reload, and click any request whose URL contains /api/proxy/.

  3. Under Request Headers, copy the whole cookie value.

  4. Put it in ~/.oahelper/.env (create the folder and file) as one line:

    OAHELPER_COOKIE=<paste here>

    .env.example lists the other optional settings. You can instead set OAHELPER_COOKIE as an environment variable in your client's config, and the Claude Code plugin asks for it when you enable it.

The session lasts until you log out on the site. When tools start returning session rejected, repeat these steps. Treat the cookie like a password: do not paste it into a chat with any AI, and do not commit it.

Then ask your agent to run oahelper_status with online=true. You should see session valid | Pro: yes.

Connect it to your agent

With uv installed, every client runs the same command and uv fetches everything else:

uvx --from git+https://github.com/SirjanSingh/oahelper-mcp oahelper-mcp

Claude Code

claude mcp add oahelper -s user -- uvx --from git+https://github.com/SirjanSingh/oahelper-mcp oahelper-mcp

-s user makes it available in every project; use -s local for the current project only. Run claude mcp list to confirm it shows as connected, or /mcp inside a session. Or skip this and install the plugin, which also brings the skills.

Claude Desktop

Edit claude_desktop_config.json (Settings, Developer, Edit Config):

{
  "mcpServers": {
    "oahelper": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/SirjanSingh/oahelper-mcp", "oahelper-mcp"]
    }
  }
}

Restart Claude Desktop.

Cursor

Same JSON as Claude Desktop, in ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project).

VS Code (Copilot agent mode)

.vscode/mcp.json uses a servers key:

{
  "servers": {
    "oahelper": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/SirjanSingh/oahelper-mcp", "oahelper-mcp"]
    }
  }
}

OpenAI Codex CLI

codex mcp add oahelper -- uvx --from git+https://github.com/SirjanSingh/oahelper-mcp oahelper-mcp

or in ~/.codex/config.toml:

[mcp_servers.oahelper]
command = "uvx"
args = ["--from", "git+https://github.com/SirjanSingh/oahelper-mcp", "oahelper-mcp"]

Gemini CLI, Windsurf, Cline and others

Any client that reads an mcpServers JSON block takes the Claude Desktop snippet unchanged. Check your client's docs for where its config file lives.

Without uv (from a clone)

git clone https://github.com/SirjanSingh/oahelper-mcp.git
cd oahelper-mcp
python -m venv .venv
.venv/bin/pip install -r requirements.txt     # Windows: .venv\Scripts\pip

Then use /path/to/oahelper-mcp/.venv/bin/python /path/to/oahelper-mcp/server.py as the command in any config above. In this mode .env, library/ and cache/ live in the clone itself.

Using it

Ask in plain language. Some prompts that work well:

  • "What OA sets does OAHelper have for Juspay?"

  • "Sync Amazon from OAHelper, then tell me the topic mix of their last three OAs."

  • "Show me question MjM3OHww with the MCQ answers."

  • "Get the official C++ solution for that one."

  • "What have people said about Atlassian's interview rounds this year?"

  • "What do I already have saved offline?"

A typical prep loop: oahelper_sync a company (call again while it says NOT DONE), then let the agent read library/<company>/index.md and the files it links. Reading the library costs no requests.

Skills

The skills/ folder holds ready-made Agent Skills: plain SKILL.md files that tell the agent how to chain the tools into a workflow. You just ask in plain language and the matching skill kicks in.

Skill

Ask something like

What it does

oa-prep

"prep me for Juspay's OA"

Full prep guide: syncs the company, reads every saved set, adds public sources, maps each past question to the nearest LeetCode problem

oa-mock

"give me a mock OA for Amazon"

Timed mock built from real past questions in the real format, then graded with edge-case traces

mcq-drill

"quiz me on DBMS MCQs from Infosys"

One MCQ at a time from real answer keys, with scoring and explanations

solve-coach

"I'm stuck on this question, give me a hint"

Hint ladder (observation, pattern, approach, pseudocode, code) and code review, official solution only on request

interview-insights

"what are Atlassian's interview rounds?"

Round-by-round brief from interview write-ups: repeated questions, what sank people, prep checklist

oa-compare

"compare the OAs of Uber, Juspay and Atlassian"

Side-by-side OA patterns and the shared topics worth studying first

study-plan

"my OA is on Nov 3, make me a plan"

Day-by-day plan to the deadline, weighted by the company's topics and your past mistakes

revise-mistakes

"revise my mistakes"

Spaced-repetition re-test of questions you got wrong or needed hints on

oahelper-setup

"oahelper isn't connecting"

Step-by-step diagnosis of install, client config and session problems

oa-mock, mcq-drill and solve-coach log every attempt to library/_progress.md, which study-plan and revise-mistakes read. It stays on your machine with the rest of library/.

Install the skills

Easiest, for Claude Code, Codex, Cursor and other agents that support skills:

npx skills add SirjanSingh/oahelper-mcp

Add --list to see them first, or --skill oa-mock to pick one. In Claude Code, the plugin installs them together with the server.

By hand, for Claude Code in all projects:

cp -r skills/* ~/.claude/skills/

On Windows PowerShell: Copy-Item -Recurse skills\* $HOME\.claude\skills\

For one project only, copy them into that project's .claude/skills/ instead. Restart the session and they show up as /oa-prep, /oa-mock and so on, or trigger on their own from what you ask.

Other agents: the files are plain markdown, so any agent that supports Agent Skills can load them from its skills folder. For one that does not, paste the relevant SKILL.md into its rules or custom instructions.

Configuration

In .env inside the data folder, or as environment variables of the same name (environment wins):

Key

Default

Meaning

OAHELPER_HOME

~/.oahelper (or the clone)

Data folder for .env, cache/ and library/. Environment only

OAHELPER_COOKIE

Browser cookie header from a logged-in session

OAHELPER_BEARER

authorization header, if the site sends one

OAHELPER_USER_AGENT

generic

Your browser's user agent, so requests match your session

OAHELPER_DAILY_CAP

300

Live requests per day before the server refuses

The 2 second gap between requests is MIN_GAP in oahelper_mcp/server.py.

Troubleshooting

Symptom

Fix

session rejected / HTTP 401 or 403

Cookie expired. Copy a fresh one into .env (or /plugin configure oahelper@oahelper-mcp)

Daily cap reached

Wait until tomorrow. Cached and offline tools still work

Client shows the server as failed

Check uv is on the PATH the client sees (uvx --version). From a clone, use absolute paths and the venv's Python. Run the command by hand: it should sit silently waiting on stdin

ModuleNotFoundError: mcp

The client is launching a different Python. Point command at the venv's interpreter

Premium content missing

Your account is not Pro, or the cached copy was fetched logged out. Pass refresh=true

How it was built

The site has no public API. The endpoints were found by recording a HAR of normal browsing on a personal account and summarising it with tools/har_endpoints.py, which prints paths, parameter names and response shapes but never header values or response content. If the site changes and something breaks, record a new HAR, run that script on it, and compare.

Releasing (maintainer)

Bump the version in oahelper_mcp/__init__.py, .claude-plugin/plugin.json and both version fields in server.json, commit, then push a tag:

git tag v0.2.1 && git push origin v0.2.1

.github/workflows/release.yml checks the versions match, smoke-tests the wheel, publishes to PyPI (trusted publishing, no token) and then to the MCP Registry (GitHub OIDC, no token).

Author

I am Sirjan Singh. I built this to prep for my own placement OAs.

If this saved you prep time, star the repo. It is the only way I find out it helped someone, and it helps other people preparing for OAs find it. Issues and pull requests are welcome.

License

MIT, copyright (c) 2026 Sirjan Singh, for the code in this repository. It grants nothing over OAHelper's content, which belongs to OAHelper and its contributors.

This project is not affiliated with or endorsed by OAHelper.

Available Tools

8 tools
oahelper_companyA

List one OAHelper set page by slug or URL, e.g. "kickdrum-mcq24sep" or https://www.oahelper.in/company-questions/kickdrum-mcq24sep. Returns question refs for oahelper_question. For a company by name, use oahelper_search or oahelper_sync.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo
slug_or_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it discloses almost nothing beyond the output hint 'Returns question refs'. Nothing is said about auth requirements, rate limits, caching, whether the 'refresh' flag triggers a network refetch, or whether the call is read-only versus mutating; the 'Returns question refs' line is also redundant since an output schema exists.

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

Conciseness4/5

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

Three short sentences, front-loaded with purpose, then identifier examples, then the sibling routing. Every sentence earns its place; only the slightly awkward 'List one OAHelper set page' phrasing costs a point.

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 two-parameter lookup tool with an output schema (so return values need no explanation), the description covers purpose, identifier format, and alternative tools adequately. The single real gap is the undocumented 'refresh' semantics, which keeps it from a 5.

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, and it does well for slug_or_url by giving two accepted formats (bare slug and full URL). However, the 'refresh' parameter is completely unexplained in both schema and description, leaving half the parameters opaque and capping this at a partial-credit 3.

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?

States a specific verb and resource ('List one OAHelper set page') and pins down the identifier format with two concrete examples ('kickdrum-mcq24sep', full URL). It also explicitly routes sibling confusion by stating that company-by-name lookups belong to oahelper_search or oahelper_sync, so an agent can differentiate it from its siblings without opening schemas.

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?

Names the alternatives (oahelper_search, oahelper_sync) and the condition that selects them ('For a company by name'), which is exactly the disambiguation an agent needs. It doesn't state the inverse condition as explicitly (use this when you already have a slug or URL) or any exclusions, so it falls short of a full 5.

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

oahelper_interviewsA

Interview experiences for a company from OAHelper (12 per page, most relevant first). Saves each full write-up to library//interviews/ and returns a short list; read the saved files for the full text.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNo
companyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.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 behavioral burden and does well: it discloses a side effect (saving full write-ups to library/<company>/interviews/), the pagination rate (12 per page, most relevant first), and that the return is only a short list. It omits overwrite behavior, auth/permission needs, and rate limits, which keeps it below a 5.

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

Conciseness4/5

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

Two tight sentences with the core resource front-loaded and the side effect plus the required follow-up action stated next. Every clause carries information; only minor polish is missing.

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 two-parameter tool with an output schema present, the description covers the essentials an agent needs: what is returned (a short list), where the full text lives, and the page size. Remaining gaps (whether re-running overwrites saved files, how `pages` interacts with results) are secondary.

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% for both parameters, so the description must compensate. '12 per page' gives the agent a way to infer what `pages` means (pages × 12 results, default 2), and `company` is implicitly the lookup key, but neither is stated explicitly.

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 states a specific resource ('Interview experiences for a company') and its source (OAHelper), which is clear enough for an agent to distinguish it from oahelper_question or oahelper_solution. It does not explicitly contrast itself with oahelper_search, so sibling differentiation is only partial.

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?

Usage is implied: fetch interview write-ups for a company, then 'read the saved files for the full text,' which is a useful follow-up instruction. There is no guidance on when to prefer this over oahelper_search or how to size the `pages` parameter, so no explicit when/when-not reasoning is given.

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

oahelper_offlineA

What is saved offline. No network call. With no company, lists every company in the library; with a company, returns its index (sets, interviews, counts).

ParametersJSON Schema
NameRequiredDescriptionDefault
companyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/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 behavioral burden, and it does disclose two real traits: the operation is a local/no-network read, and its output shape switches based on whether company is supplied. It does not mention staleness of the offline cache, sync prerequisites, or error behavior when a company is absent locally.

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?

Three short sentences, zero filler, with the core 'what is saved offline / no network call' framing front-loaded before the conditional behavior. Every sentence adds information.

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?

An output schema exists, so return-value detail is not the description's job, and for a single-optional-parameter read tool this covers the essentials. Missing only offline-cache freshness/sync prerequisites, which would help an agent avoid stale results.

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% and the sole parameter has no description, so the description must compensate — and it does, fully defining the parameter's two modes (omitted = list all companies, supplied = that company's index). It only lacks format examples (e.g., exact company identifier form).

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?

States a specific resource (the offline-saved library) and a specific dual behavior: full company list without a company, and that company's index (sets, interviews, counts) with one. It implicitly separates itself from network-based siblings via 'No network call', though it never names oahelper_sync or oahelper_company by name.

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?

'No network call' implies the offline use case, which is genuine context for choosing this over a network-backed sibling. However, it never states when to prefer this over oahelper_company, oahelper_search, or oahelper_sync, so the selection logic is left for the agent to infer.

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

oahelper_questionA

Read one OAHelper question: full statement, MCQ answers with explanations (for MCQ sets), any saved official solution, and optionally community solutions and images. Saves it to the offline library.

ref_or_url: a question ref like "MjM3OHww" or a https://www.oahelper.in/problems/... URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo
ref_or_urlYes
include_imagesNo
include_communityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.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 burden and does reasonably well: it discloses the returned content set and, importantly, the side effect 'Saves it to the offline library,' which is not obvious from the name. It still omits whether the operation is read-only in effect, any auth requirements, or rate limits.

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

Conciseness4/5

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

Front-loaded with the core purpose followed by a focused parameter note; every line carries information with no filler. Minor looseness in the parenthetical about MCQ sets, but overall tight and well-ordered.

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?

An output schema exists, so return-value detail is unnecessary, and the description covers the main behavior and the offline-save side effect. The remaining gap is the unexplained 'refresh' flag and lack of any safety/auth context, but it is largely complete for a single-item fetch tool.

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 documents ref_or_url well with concrete format examples, and 'optionally community solutions and images' loosely maps to include_community/include_images, but the 'refresh' parameter is never explained and the two flags are not tied explicitly to their names.

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?

States a specific verb and resource ('Read one OAHelper question') and enumerates the returned content (statement, MCQ answers with explanations, official solution, optional community/images), which clearly sets it apart from a search tool. It does not, however, name or differentiate itself against siblings like oahelper_search or oahelper_solution, so it stops short of a 5.

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?

Usage is only implied: an agent infers it should call this when it has a question ref or URL and wants the full question. There is no explicit when-to-use, when-not-to-use, or pointer to an alternative such as oahelper_search for discovery.

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

oahelper_solutionA

Fetch OAHelper's official solution for one coding question (language: cpp, python, java). Each new fetch uses one of the account's limited daily solution requests, so only call this when the user asks for the official solution. Saved solutions are free.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNocpp
ref_or_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose the key non-obvious trait: each new fetch consumes one of a limited daily quota, while previously saved solutions are free. It does not mention authentication/account requirements or whether a fetch is idempotent/cacheable beyond the 'saved solutions are free' hint.

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 tight sentences with no waste; the quota constraint and the use-only-when-asked rule are front-loaded where the agent will see them before deciding to call.

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?

An output schema exists, so return values need no explanation, and the description covers purpose, languages, and quota behavior well. The remaining gap is the undocumented required parameter ref_or_url, whose accepted format an agent must guess.

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 coverage is 0%, so the description must compensate. It usefully enumerates the accepted languages (cpp, python, java), filling an enum gap the schema lacks, but says nothing about ref_or_url — the required parameter — such as whether it accepts an ID, slug, or full URL.

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?

States a specific verb (Fetch) plus a precise resource (OAHelper's official solution for one coding question), which is far more than a restatement of the name. It does not explicitly contrast itself with the closest sibling, oahelper_question, so the boundary between the two is left for the agent to infer.

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?

Gives an explicit when-to-use rule ('only call this when the user asks for the official solution') backed by a cost rationale, and notes that saved solutions are free. It stops short of naming a specific alternative tool to use instead, so routing is implied rather than stated.

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

oahelper_statusA

Session and usage status. online=true also checks Pro status with the site (one request); by default no network call is made.

ParametersJSON Schema
NameRequiredDescriptionDefault
onlineNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.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 and it discloses the key side effect explicitly: online=true performs one network request against the site to check Pro status, while the default makes no network call. That is the most consequential behavioral trait for a status tool. It does not mention authentication requirements or rate/latency considerations, so it falls short of a 5.

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 compact sentences, no filler, with the core purpose front-loaded before the conditional network behavior. Every clause carries information an agent can act on.

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?

An output schema exists, so return values need not be described, and the low-complexity single-parameter surface is well covered. The remaining gap is the absence of any statement about auth/session prerequisites for a tool whose whole purpose is reporting session status.

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% — the schema exposes only a bare 'online' boolean with default false and no explanation. The description compensates by stating exactly what the flag does (triggers one network request to check Pro status) and what the default behavior is (no network call), which is meaning beyond the schema.

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 names a concrete resource and outcome — 'Session and usage status' — so an agent immediately knows this reports current session/usage state rather than searching or syncing. It does not explicitly differentiate itself from siblings, but none of the siblings (search, company, sync, question, solution, interviews, offline) overlap with a status check, so mis-selection risk is low.

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?

There is no explicit statement of when to call this tool versus alternatives, nor any prerequisite (e.g., must be authenticated/logged in for session status to be meaningful). The only usage-like content is the conditional behavior of the 'online' flag, which is invocation detail rather than selection guidance.

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

oahelper_syncA

Download one company's OAHelper content into the offline library, newest sets first: set lists, every question statement, MCQ answers, and interview experiences.

Makes at most max_items live requests per call, then says how much is left, so call it again to continue. Already-saved items cost nothing. Official solutions are NOT fetched here because each one uses the account's daily solution quota; use oahelper_solution. Read the result from library//index.md.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYes
max_itemsNo
include_imagesNo
include_interviewsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/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, and it does well: it discloses ordering ('newest sets first'), a per-call request budget tied to max_items, cost semantics ('already-saved items cost nothing'), and quota rationale for the exclusion. It stops short of stating auth requirements or failure behavior, so 4 rather than 5.

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

Conciseness4/5

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

Front-loaded with the action, then budget behavior, then the sibling alternative, then where to read output. Each sentence adds information, though the multi-line layout is slightly denser than needed.

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?

Output schema exists, so return format needn't be explained, and the description usefully points to library/<company>/index.md. However, for a 4-param tool with 0% schema coverage, leaving include_images and include_interviews unexplained is a real gap in an otherwise thorough definition.

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% and there are 4 params, so the description must compensate. It only explains max_items (live requests per call); include_images and include_interviews are never mentioned, and the 'cost nothing' note only loosely implies idempotent behavior. Two of four parameters remain fully undocumented.

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?

States a specific verb ('Download') plus a specific resource ('one company's OAHelper content into the offline library') and enumerates the content types (set lists, question statements, MCQ answers, interview experiences). It also carves out what it does NOT do, routing the agent to the oahelper_solution sibling.

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?

Explicitly states the repeat-call pattern ('call it again to continue') and explains the exclusion condition for official solutions ('NOT fetched here because each one uses the account's daily solution quota; use oahelper_solution'). Both when-to-use and when-not-to-use are covered.

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. 8 tool updatesv0.1.0
    • First observedoahelper_company
    • First observedoahelper_interviews
    • First observedoahelper_offline
    • First observedoahelper_question
    • First observedoahelper_search
    • First observedoahelper_solution
    • First observedoahelper_status
    • First observedoahelper_sync

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation4/5

Most tools target distinct actions (search companies, sync a company, read a question, fetch a solution, list interviews, inspect offline library, check status). The only mild overlap is oahelper_search vs oahelper_company, both of which locate sets, but their descriptions explicitly disambiguate name-based vs slug/URL-based lookup. The bulk-vs-single distinction between oahelper_sync and oahelper_question/solution is also spelled out.

Naming Consistency4/5

All tools use a uniform oahelper_ snake_case prefix, which makes the set predictable and easy to scan. The only slight deviation is mixing action verbs (search, sync, offline) with domain nouns (company, question, solution, interviews, status), but formatting itself is consistent.

Tool Count5/5

Eight tools is well-scoped for an OA interview-prep domain. Each tool earns its place: discovery, retrieval, bulk sync, offline inspection, and status each cover a distinct need without redundancy.

Completeness4/5

The surface covers the full lifecycle: find companies, inspect sets, sync content offline, read questions, fetch solutions, view interviews, and check offline/session state. Minor gaps remain, such as no direct standalone question-search or explicit login/auth tool, but status and search partially cover these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Read-only MCP server for Chaoxing (学习通) that logs into a user's account and exposes their class schedule, enrolled courses, course materials downloads, homework status, exam schedules and scores, chapter task-point progress, notices, and personal cloud drive files. Enables any MCP client to answer natural-language questions about a student's coursework without submitting anything or modifying account data.
    7
    MIT