pw-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pw-mcpHow much physics backlog do I have?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pw-mcp
Physics Wallah Study MCP Server
Schedule tracking, backlog management, and progress monitoring for PW students — powered by the Model Context Protocol.
What it does
Connect your AI assistant to your PW study data. Ask questions like:
"What classes do I have today?"
"How much physics backlog do I have?"
"Generate a 7-day study plan for 4 hours/day"
"Mark the chemical bonding lecture as done"
The server exposes 15 MCP tools that any MCP-compatible client (Claude, opencode, etc.) can call.
Related MCP server: FAST-NUCES Flex Student Portal MCP Server
Quick Start
# Clone
git clone https://github.com/vspcoderz/pw-mcp.git
cd pw-mcp
# Install
uv venv && source .venv/bin/activate
uv sync
# Run (mock mode — no credentials needed)
uv run pw-mcpThat's it. Mock mode works offline with realistic sample data across Physics, Chemistry, and Mathematics.
Real PW Integration
To connect to your actual PW account:
Get your API token:
Log into pw.live in your browser
Open DevTools → Network tab
Filter by
token, find theverify-tokenrequestCopy the
Authorization: Bearer <token>value
Configure:
cp .env.example .envEdit
.env:PW_PROVIDER=pw PW_API_TOKEN=your_token_here PW_DEFAULT_BATCH=your-batch-slugRun:
uv run pw-mcp
How it works:
The real provider uses PW's
weekly-scheduleendpoint to fetch today's and upcoming lectures — the same data the PW app shows in the "Weekly Schedule" tabFalls back to the topics/contents endpoint for older lectures
Progress tracking is stored locally in SQLite (PW doesn't expose a server-side progress API)
Set
PW_DEFAULT_BATCHto your batch slug (the part after/batches/in the PW URL)
Configuration
Variable | Default | Description |
|
|
|
| — | Bearer token for pw.live |
| — | Override API base URL |
|
| Batch slug for schedule fetching |
|
| Request timeout in seconds |
|
| SQLite database path |
|
| Timezone for schedule calculations |
|
| Logging verbosity |
Architecture
┌─────────────────────────────────────────────┐
│ MCP Client │
│ (Claude, opencode, etc.) │
└──────────────────┬──────────────────────────┘
│ stdio
┌──────────────────▼──────────────────────────┐
│ MCP Server (server.py) │
├─────────────┬───────────────┬───────────────┤
│ Schedule │ Backlog │ Progress │
│ Service │ Service │ Service │
├─────────────┴───────────────┴───────────────┤
│ PWProvider (ABC) │
├──────────────────┬──────────────────────────┤
│ MockPWProvider │ RealPWProvider │
│ (offline) │ (pw.live API) │
└──────────────────┴──────────────────────────┘Design principle: Services never know where data comes from. The provider abstraction makes swapping mock ↔ real trivial.
MCP Tools
Schedule
Tool | Description |
| Today's lectures |
| Next N days (1-30) |
| Custom date range |
| Next upcoming incomplete lecture |
| Single lecture by ID |
Backlog
Tool | Description |
| Incomplete past lectures (filterable) |
| Backlog for a subject |
| Backlog for a chapter |
| Aggregate statistics |
| Oldest incomplete lecture |
Progress
Tool | Description |
| Mark lecture done |
| Mark lecture not done |
| Update watch progress |
| Overall progress |
Planning
Tool | Description |
| Personalized study plan from backlog |
MCP Client Setup
opencode
Add to your opencode.json:
{
"mcp": {
"pw": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/pw-mcp", "pw-mcp"]
}
}
}Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"pw": {
"command": "uv",
"args": ["run", "--directory", "/path/to/pw-mcp", "pw-mcp"]
}
}
}MCP Inspector
Test with the official inspector:
npx @modelcontextprotocol/inspector uv run pw-mcpTesting
uv run pytest -v78 tests covering:
Schedule queries (today, upcoming, date range)
Backlog calculation (subject/chapter filtering, summary)
Progress tracking (mark complete/incomplete, watched minutes)
SQLite persistence (upsert, delete, reconnection)
Study plan generation (hours constraint, subject filter)
Model validation and timezone handling
Provider selection and configuration
Project Structure
pw-mcp/
├── pyproject.toml
├── .env.example
├── src/pw_mcp/
│ ├── server.py # MCP tool definitions + wiring
│ ├── config.py # pydantic-settings config
│ ├── exceptions.py # Custom exceptions
│ ├── models/ # Pydantic data models
│ │ ├── lecture.py
│ │ ├── schedule.py
│ │ ├── backlog.py
│ │ └── progress.py
│ ├── providers/ # Data source abstraction
│ │ ├── base.py # PWProvider ABC
│ │ ├── mock.py # Offline with sample data
│ │ └── pw.py # Real pw.live API
│ ├── services/ # Business logic
│ │ ├── schedule.py
│ │ ├── backlog.py
│ │ ├── progress.py
│ │ └── study_plan.py
│ ├── storage/ # SQLite persistence
│ │ └── sqlite.py
│ └── utils/ # Date/formatting helpers
│ ├── dates.py
│ └── formatting.py
├── tests/ # pytest suite
└── docs/
└── pw-api.md # PW API reverse-engineering docsPW API Notes
See docs/pw-api.md for full endpoint documentation.
Key findings:
PW uses OTP-based auth (no username/password)
Weekly schedule is available via
/v3/batches/{slug}/weekly-scheduleProgress tracking is client-side only
Two platforms:
pw.live(school/exam prep) andpwskills.com(professional courses)
License
MIT
Available Tools
15 toolsgenerate_study_planC
Generate a study plan from backlog.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | ||
| subject | No | Optional subject filter | |
| hours_per_day | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description alone must disclose side effects and behavior. 'Generate' is ambiguous: it is unclear whether the tool merely returns a plan, persists it, or modifies state. The description also does not say whether the plan is based on the entire backlog or on a filtered subset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler words. Every word contributes to the meaning, and the verb appears first, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, so the description must carry more weight. It does not explain what a generated study plan contains, whether the operation has side effects, how the optional subject filter behaves, or how it relates to schedule-retrieval siblings. This is insufficient for an agent to invoke it correctly without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, and the description does not mention any parameters at all. Required params like 'days' and 'hours_per_day' are left undocumented in the description, so it fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generate') and resource ('study plan') with a source ('backlog'), making the action clear. It also distinguishes itself from sibling getter tools like get_schedule and get_backlog by indicating an active generation process rather than retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not state when to use this tool instead of schedule getters or backlog inspection tools, nor does it mention any alternatives or exclusions. Usage context is only implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backlogC
Get incomplete past lectures (backlog).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items | |
| chapter | No | Filter by chapter | |
| subject | No | Filter by subject |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure, but it only says 'Get incomplete past lectures.' It does not disclose ordering, whether results are limited by default, how 'incomplete' is determined, or any other operational behavior beyond the bare resource.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded, using only a few words to convey the core purpose. No filler exists, though the parenthetical 'backlog' is slightly redundant with the tool name and could have been used to add differentiation instead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the large sibling set with several overlapping backlog tools, the description is not complete enough for an agent to reliably select and invoke this tool correctly. It lacks usage context, sibling differentiation, and behavioral details such as result ordering or default limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with descriptions: limit as 'Max items', chapter as 'Filter by chapter', and subject as 'Filter by subject', so schema coverage is 100%. The description adds no additional meaning beyond what the schema provides, which matches the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: getting incomplete past lectures, with 'backlog' as a clarifying parenthetical. It distinguishes the tool from schedule-related siblings, but it does not differentiate it from other backlog-specific siblings like get_subject_backlog or get_chapter_backlog, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over the many backlog-related siblings such as get_subject_backlog, get_chapter_backlog, get_backlog_summary, or get_oldest_backlog_lecture. The description implies a generic backlog listing use case but provides no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backlog_summaryC
Get aggregate backlog statistics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the full burden. It conveys only that the tool returns aggregate statistics, with no detail about whether this is read-only, how the aggregation is scoped, what shape the statistics take, or whether any state is affected. This is minimal disclosure for a tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or repeated information. It is appropriately compact for a parameterless operation, though it could sacrifice some brevity to add distinguishing details without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Against a large sibling set with many backlog-related tools, this description is too thin to let an agent reliably select it. With no output schema and no detail about scope or return value, the agent cannot determine what aggregate statistics will be produced or how they differ from get_backlog or get_completion_stats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the schema already covers this completely with an empty properties object. With no parameters to document, the description does not need to add parameter semantics; the baseline 4 for a parameterless tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'Get aggregate backlog statistics' identifies a verb and resource, and 'aggregate' suggests a high-level summary rather than a list. However, it is vague: it does not specify what statistics are returned or how this differs from several similarly named siblings such as get_backlog, get_subject_backlog, and get_completion_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage conditions or alternatives are mentioned. The description does not say when to choose this over get_backlog, get_subject_backlog, get_chapter_backlog, or get_completion_stats; only the word 'aggregate' hints at a distinction, which is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chapter_backlogC
Get backlog for a specific chapter.
| Name | Required | Description | Default |
|---|---|---|---|
| chapter | Yes | ||
| subject | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Get' which implies a read operation, but it does not describe what the backlog contains, whether it includes completed items, how results are ordered, or any other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and free of fluff, but it is so terse that it mostly restates the tool name ('chapter' + 'backlog'). It is concise without being informative, so it earns a middle score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the two required string parameters, no output schema, no annotations, and a family of similar backlog tools, the description is incomplete. An agent cannot determine what values to pass, what the response looks like, or how this tool differs from get_subject_backlog and get_backlog.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for the undocumented parameters. It mentions 'specific chapter,' which gives some meaning to the chapter parameter, but it completely ignores the required 'subject' parameter and does not clarify its format or relationship to the chapter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('backlog for a specific chapter'), so an agent can tell it is a chapter-scoped backlog retrieval. However, it does not explicitly distinguish it from sibling tools like get_subject_backlog or get_backlog, and it repeats much of the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_subject_backlog or get_backlog. The description only implies a chapter-level scope and provides no context about selection criteria, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_completion_statsA
Get overall course completion statistics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. It only says 'get... statistics' and does not disclose return format, scope details, data source, or whether the operation is read-only beyond the implied 'get' verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. It states the core purpose directly and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter getter, the description is minimally viable, but with no output schema it does not explain what the returned statistics look like or what 'overall' includes. An agent could invoke it correctly but may be uncertain about the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is declared with 100% coverage, so there is little for the description to add. Saying 'overall' usefully signals that no filtering or scoping parameters are involved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('overall course completion statistics'), giving a specific and unambiguous purpose. It is easy to distinguish from sibling tools like get_backlog or get_lecture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any mention of when not to use it. The agent must infer usage solely from the tool name and generic description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lectureA
Get details for a specific lecture by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| lecture_id | Yes | Lecture ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Get' does signal a read-only operation as opposed to mark_lecture_completed or update_watched_minutes, but it discloses nothing about response shape, error behavior for unknown IDs, or what 'details' actually include.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single tight sentence with no wasted words. The essential qualifier 'by ID' is front-loaded, making the tool's scope immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool, the description is minimally adequate, but there is no output schema or annotation coverage and no mention of what details are returned or how this tool relates to sibling lecture tools. A bit more context would make selection and invocation more reliable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the only parameter, lecture_id, with full coverage. The description simply repeats the notion of targeting a specific ID without adding format, source, or constraints, so it provides no added meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb ('Get'), names the resource ('lecture'), and adds the selection mechanism ('by ID'). This clearly distinguishes it from list/schedule/backlog siblings like get_today_schedule and get_backlog, and from get_next_lecture which targets a different selection logic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' implies the tool is intended for retrieving a known lecture, but the description gives no explicit when-to-use guidance and does not mention alternatives such as get_next_lecture or the schedule tools. The usage context is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_next_lectureB
Get the next upcoming incomplete lecture.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full responsibility for behavioral disclosure. It only states what the tool returns, but does not explain how 'next upcoming' is determined, what happens when no incomplete lecture exists, or whether it returns null, an error, or an empty result. This is a significant gap for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler or redundant elaboration. Every word contributes to the meaning, and the core action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and no parameter complexity, the description must compensate by explaining the return behavior and edge cases. It does not. An agent cannot infer what the response looks like, what 'incomplete' means in this domain, or how 'next upcoming' is computed, making the tool definition incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to document. The description need not add parameter-level information; the schema already reflects an empty object with 100% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get'), a specific resource ('lecture'), and precise qualifiers ('next upcoming incomplete'). This distinguishes it from sibling tools like get_lecture (generic lecture retrieval), get_today_schedule/get_upcoming_schedule (schedules, not single lectures), and get_oldest_backlog_lecture (different ordering).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. With fifteen sibling tools, many involving lectures and backlog, the description offers no explicit conditions or exclusions that would help an agent choose this over get_oldest_backlog_lecture or get_lecture.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_oldest_backlog_lectureB
Get the oldest incomplete lecture.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. 'Get' implies a read-only operation and 'oldest incomplete' clarifies selection logic, but the description does not disclose what happens when no backlog exists, how 'incomplete' is defined, or whether any side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It conveys the essential action and target directly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description is minimally sufficient to call it, but the absence of an output schema and any notes on return value, empty state, or ordering behavior leaves some ambiguity. The overall context is simple, so a moderate score is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to document. The baseline of 4 applies because no parameter ambiguity exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Get') and the specific resource ('the oldest incomplete lecture'). It is precise enough to be distinguished from most sibling tools, though it does not explicitly name a sibling like get_next_lecture that could be confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as get_backlog, get_next_lecture, or get_lecture. The context of a 'backlog lecture' versus a scheduled lecture is implied but never stated, leaving the agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduleB
Get lecture schedule for a specific date range.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | YYYY-MM-DD | |
| start_date | Yes | YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'get', and does not mention return format, inclusive/exclusive date handling, behavior when no lectures exist, or any side effects. For a read tool this is low risk, but almost no behavioral context is added beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to the core purpose, and it is appropriately sized for a simple two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read tool, the description covers the essential action and scope, and the schema covers parameters completely. However, with no output schema and no annotations, it leaves unspecified what exactly is returned (e.g., individual lecture objects, empty handling) and whether the date range is inclusive. This is a minor but real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters and their YYYY-MM-DD format at 100% coverage, so the description does not need to repeat them. It adds no extra semantic detail beyond the phrase 'specific date range', which aligns with the parameters but does not enrich them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('get'), resource ('lecture schedule'), and scope ('specific date range'), clearly conveying what the tool does. It is not merely a restatement of the tool name, and the date-range qualifier sets it apart from today/upcoming variants, though it does not explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'specific date range' implies the tool is for arbitrary ranges rather than today/upcoming, and sibling names reinforce this contrast. However, there is no explicit guidance about when to prefer this tool over get_today_schedule or get_upcoming_schedule, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subject_backlogC
Get backlog for a specific subject.
| Name | Required | Description | Default |
|---|---|---|---|
| subject | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Get backlog' and does not describe what the backlog includes, whether it only returns incomplete items, how it orders results, or any prerequisites or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is concise and front-loaded with the key action and resource, containing no filler. However, it is too sparse to be fully 'appropriately sized' for a tool that lacks annotations and output schema, so it misses a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no annotations and no output schema, the description is only minimally complete. It does not explain the return value, clarify what counts as 'backlog,' or identify valid subject values, and it does not orient the agent to relevant sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 only says 'specific subject,' which essentially restates the 'subject' parameter name without explaining accepted formats (e.g., subject ID, name, code) or providing examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('Get') and resource ('backlog for a specific subject'), so an agent can see what the tool returns. It does not explicitly distinguish this from sibling tools like get_backlog or get_chapter_backlog, but the phrase 'specific subject' provides a reasonable degree of differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a subject-specific backlog is needed. However, it provides no explicit guidance about when to prefer this tool over get_backlog, get_chapter_backlog, or get_backlog_summary, and it does not state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_today_scheduleA
Get today's PW lecture schedule.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description alone must convey behavioral traits. It only restates the tool's purpose with 'PW lecture' and does not disclose return format, empty-day behavior, timezone assumptions, or any side effects. The 'get' verb implies read-only, but that is not explicitly confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundant wording. Every term ('Get', 'today's', 'PW lecture schedule') contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only getter, the description is nearly complete: it names the resource and the time scope. It would benefit from noting what happens when no schedule exists or clarifying timezone, but these are minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool accepts zero parameters and the input schema is empty, so there are no parameter semantics for the description to explain. The baseline of 4 applies because there is no parameter documentation gap to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'Get' and resource 'today's PW lecture schedule', making it clear the tool returns the current day's schedule. The 'today's' scope distinguishes it from get_upcoming_schedule and get_next_lecture, though it does not explicitly differentiate from get_schedule or detail what a schedule entry contains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'today's' implies when to use this tool: when the agent needs the current day's lecture schedule. However, it provides no explicit guidance about alternatives or when not to use it, such as pointing to get_upcoming_schedule for other time ranges.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upcoming_scheduleA
Get upcoming lecture schedule for the next N days.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days ahead (1-30). Default: 7 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. The 'get' verb implies a read-only operation and the time window is stated, but the description does not clarify whether 'today' is included, how results are ordered, or what fields the schedule contains. For a simple read tool this is acceptable but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence that states the action, resource, and time scope without unnecessary words. It is front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, one-parameter read operation, the description plus schema is mostly sufficient. The main gap is the ambiguous boundary of 'upcoming' and 'next N days' — whether the range starts today or tomorrow — which could affect correct invocation. No output schema exists, so a brief note on the response format would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'days', has full schema description coverage (default, min, max), so the schema already explains it well. The description's 'N days' loosely maps to this parameter but adds no additional semantic detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Get') and resource ('upcoming lecture schedule') with a specific time window ('next N days'). It is distinguishable from get_today_schedule and get_next_lecture, though it does not explicitly differentiate itself from the broader get_schedule sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'next N days' implicitly signals this tool is for range-based upcoming schedules, contrasting with today-only or next-single-lecture tools. However, there is no explicit when-to-use guidance or mention of alternatives, so the agent must infer the right context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_lecture_completedC
Mark a lecture as completed in local storage.
| Name | Required | Description | Default |
|---|---|---|---|
| lecture_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions local storage persistence but does not say whether the operation is idempotent, overwrites existing completion state, or has side effects on schedules, backlogs, or statistics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with the action front-loaded and no wasted words. However, its brevity sacrifices important usage and behavior context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It does not explain return values, effects on related data, error behavior, or how this relates to the sibling mark_lecture_incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no parameter-specific meaning beyond the lecture_id property name. The intent is inferable, but format, source, or required value details are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('mark') and resource ('lecture') with a clear outcome ('as completed in local storage'). It is distinguishable from the sibling mark_lecture_incomplete by the word 'completed', though it does not explicitly name that contrasting tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of mark_lecture_incomplete or update_watched_minutes, nor any mention of prerequisites or state implications. The agent must infer appropriate usage from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_lecture_incompleteB
Mark a lecture as incomplete in local storage.
| Name | Required | Description | Default |
|---|---|---|---|
| lecture_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral disclosure. It only states that the operation writes to local storage but does not mention side effects, reversibility, idempotency, return values, or required preconditions. For a mutation tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word earns its place, making it extremely concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though the tool is simple, it is a write operation with no annotations and no output schema. The description leaves the agent without information about failure behavior, whether the lecture must already exist, or what 'incomplete' implies in relation to other statuses. This is not enough for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention lecture_id at all. The description adds no meaning beyond the bare parameter name in the schema, so it fails to compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Mark') and names the exact resource and state change ('lecture as incomplete'), plus the storage context ('local storage'). It clearly distinguishes from the sibling tool mark_lecture_completed, so an agent can immediately tell which operation this is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when you need to change a lecture's state to incomplete) but provides no explicit guidance about when to choose this over mark_lecture_completed or any prerequisites. No alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_watched_minutesC
Update how many minutes of a lecture have been watched.
| Name | Required | Description | Default |
|---|---|---|---|
| minutes | Yes | ||
| lecture_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'update', implying mutation, but does not state whether the minutes value overwrites existing progress, whether completion status is affected, what side effects occur, or what the return behavior is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no wasted words, and the core action is front-loaded. However, it is so minimal that conciseness comes at the expense of useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, this description is incomplete. The agent lacks information about how to verify success, whether progress is cumulative or overwritten, and how this relates to sibling marking tools. Simple as the parameters are, the behavioral and usage gaps remain significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but it barely does. It implies that 'minutes' is the watched count and 'lecture_id' identifies a lecture, but it adds no detail about format, meaning, or constraints beyond the minimal schema information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Update') and resource ('how many minutes of a lecture have been watched'), making the tool's core purpose understandable. It does not explicitly differentiate itself from siblings like mark_lecture_completed or mark_lecture_incomplete, but the focus on minute counts distinguishes it enough for basic identification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as mark_lecture_completed or mark_lecture_incomplete. There is no mention of partial progress tracking, overwriting behavior, or when a different completion-related tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Tools are mostly distinct by resource and filter: schedule queries differ by time range, and backlog queries differ by subject/chapter/aggregate. Minor ambiguity exists between get_next_lecture and get_oldest_backlog_lecture, and get_backlog vs get_backlog_summary, but descriptions largely resolve this.
All tool names follow a consistent verb-first pattern: get_, mark_, update_, generate_. Nouns are clear and singular, with no mixed casing or vague action verbs.
15 tools is at the upper edge of well-scoped, and most tools serve a distinct purpose. A few convenience getters (today's schedule, upcoming schedule, date-range schedule) could be consolidated, but the count is still reasonable for the domain.
The surface covers schedule lookup, backlog filtering, completion state changes, watched minutes, stats, and study plan generation. Minor gaps like explicit subject/chapter listing or a way to view all lectures outside a date range are workable around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Voice-led, FSRS-scheduled flashcards from YouTube, PDFs, web, or text. Auto-graded quizzes.
AI assistant integration for Leaf — track books, log reading sessions, and manage your library.
Manage tasks, Focus Zone, notes, projects, and task history from compatible AI assistants.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Related MCP Servers
AlicenseCqualityAmaintenanceEnables AI assistants to interact with the EduBase educational platform to create quizzes, upload questions, schedule exams, manage educational content, and analyze user results through natural language.19560928MIT- FlicenseNot gradedqualityDmaintenanceConnects AI assistants to the FAST-NUCES Flex Student Portal, enabling students to query their academic data including attendance, marks, transcript, and fee reports through natural language conversations.5
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access PSG College of Technology e-campus portal data including CA marks, attendance records, timetable schedules, and course information through natural language queries.4MIT

MCPaeroeduofficial
AlicenseAqualityCmaintenanceEnables AI assistants to interact with the AeroEduVision platform, allowing exam generation, course management, knowledge graph queries, and student progress tracking through natural language commands.24MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vspcoderz/pw-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server