Studocu
Server Details
Studocu helps students find study documents, set course context, ground answers from the open web, and manage authenticated study projects—attaching sources, reading artifacts, creating quizzes or mock exams, and keeping durable study memory—from any MCP client.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 20 tools
Most tools target distinct resources/actions (search vs read vs write across courses, documents, memory, artifacts), and descriptions actively cross-reference each other (e.g. read-artifact vs read-detached-document, search-web vs read-web-url). Only a couple of pairs could still be confused, such as the cluster of context readers (get-context, get-project-state, get-course-mastery, get-course-syllabus), but the descriptions disambiguate them well.
Nearly everything follows a clean verb_noun pattern (search-documents, read-artifact, write-memory, create-project, update-project, delete-memory). The main outlier is the noun-only 'agent-os-session', with 'request-creation' being somewhat borderline as a verb+noun, but this is a minor deviation.
20 tools is on the heavy side but the domain is genuinely broad (institution/course/document/web search, project lifecycle, artifacts, memory, context, mastery). Each tool maps to a distinct capability, so the count is slightly over but justified rather than redundant.
Coverage is strong: search across multiple resources, project create/update/get-state, artifact read/write, and full memory read/write/delete. The notable gap is deletion for projects and artifacts (only memory has delete), but these are workaroundable and core workflows are intact.
Available Tools
20 toolsadd-document-sourcesAdd Studocu Document SourcesAInspect
Attach up to 10 Studocu documents from search-documents to a project. Returns the sources that were successfully added; compare with document_ids if some were omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | UUID of the Studocu project that will receive the document sources. | |
| document_ids | Yes | One to ten unique Studocu document IDs returned by search-documents. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sources | Yes | |
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-destructive write, and the description adds genuinely new behavioral context beyond them: partial success semantics ('Returns the sources that were successfully added') and a reconciliation step against document_ids. It doesn't cover auth/permission needs, but the partial-failure disclosure is the highest-value trait for this operation.
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?
Two sentences, no filler. The action and its limit are front-loaded, and the second sentence carries the one non-obvious detail (partial add results).
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 two-parameter write with full schema coverage, annotations covering the safety profile, and an output schema handling return structure, the description is essentially complete. The partial-success note is the key gap-filler; only minor behavioral detail (e.g., duplicate handling) is absent.
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 100%, so both parameters are already documented with UUID format and the 1–10 item bounds. The description's 'up to 10' and 'from search-documents' largely restate what the schema's maxItems and descriptions already say, so baseline 3 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?
States a specific verb (attach), resource (Studocu documents), source tool (search-documents), destination (a project), and a hard scope limit (up to 10). An agent can distinguish this from siblings like search-documents or create-project without opening any schema.
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 mention of 'from search-documents' implicitly establishes the prerequisite workflow — search first, then attach the resulting IDs. It gives clear usage context but names no explicit exclusion or alternative path, so it stops short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent-os-sessionAgent OS SessionARead-onlyInspect
Use this proof tool to verify that the Agent OS MCP server received a valid delegated Studocu session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| scopes | Yes | |
| subject | No | |
| clientId | Yes | |
| authenticated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds that this is a no-side-effect verification/proof call, which is useful, but it doesn't describe outcomes on success vs. invalid session. With annotations carrying the safety burden, a 3 is appropriate.
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 front-loaded sentence with no filler, starting with the imperative 'Use this...'. Efficient, though it leans on internal jargon rather than plain language.
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 verification tool with complete annotations and an output schema (which carries return values), the description covers what the call confirms. The only minor gap is expected behavior when the session is invalid, which the output schema plausibly covers.
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 takes zero parameters and schema coverage is 100%, so per the rubric the baseline is 4. The description adds nothing about parameters because there are none to describe.
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?
States a specific verb ('verify') and resource ('Agent OS MCP server received a valid delegated Studocu session'), so an agent knows this confirms server-side session validity. It is clearly distinct from the memory/project/document siblings, though the jargon 'proof tool' is a bit opaque.
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?
'Use this proof tool to verify...' implies the context for invoking it, but gives no conditions, prerequisites, or mention of alternatives. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-projectCreate Studocu ProjectBInspect
Create a Studocu project and optionally configure its emoji and course. A numeric course_id is validated before project creation.
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | No | ||
| title | No | ||
| course_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| emoji | Yes | |
| title | Yes | Agent-displayable project title. Null Alpha names become "Untitled project". |
| course_id | Yes | |
| is_mobile | Yes | |
| project_id | Yes | NOTE: These shared primitives are copied from the AI API spec and owned locally by Agent OS to keep this contract decoupled. |
| institution_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered structurally. The description adds one genuine behavioral detail beyond them: course_id is validated before creation, implying a possible pre-write failure. It says nothing about permissions, side effects of creating a project, or what happens when validation fails.
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?
Two short sentences, front-loaded with the action and followed by the validation caveat. Nothing is padded, though the second sentence is slightly narrow given other behavioral gaps it could have covered 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?
An output schema exists, so return values need not be explained. However, for a mutation tool whose parameters are all optional, the description omits what a 'Studocu project' entails, what a validated-but-invalid course_id does, and how it relates to update-project/get-project-state in the workflow.
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 carries the full burden for three parameters. It names emoji and course (course_id) and notes course_id must be numeric and is validated, but the title parameter and its constraints (non-blank, 255-char max) are never mentioned, leaving a third of the surface undocumented in both places.
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?
States a specific verb+resource ('Create a Studocu project') plus the optional configurable fields, so the agent knows exactly what the tool produces. It does not differentiate itself from the sibling update-project, which is the obvious near-neighbor an agent could confuse it with.
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 versus update-project, no statement that all parameters are optional (creation can succeed with an empty body), and no prerequisites or preconditions. 'Optionally configure' hints at optionality but is not actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-memoryDelete Studocu Agent MemoryADestructiveInspect
Delete one durable memory document identified by (scope, kind) for the authenticated user. Provide project_id for project-local memory, or null/omit for global. Identity comes from Core via the session bearer, not from input.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Memory kind to delete, e.g. study_preference or project_learning_context. | |
| project_id | No | Project UUID for project-local memory; null or omitted deletes global (user-level) memory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | Memory kind that was deleted. |
| userId | Yes | Owner of the deleted memory document. |
| deleted | Yes | Always true when the delete succeeds. |
| projectId | Yes | Owning project UUID, or null for global memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new behavior context beyond them: deletion is limited to a single document, and the acting identity comes from the session bearer rather than from input. It still omits idempotency/not-found behavior, so it stops at 4.
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?
Three short sentences, front-loaded with the action, then scope selection, then the identity note. No filler and nothing repeated for padding.
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?
An output schema exists, so return values need no explanation, and annotations carry the destructiveness signal. The description covers scope, identity, and granularity adequately; only failure/idempotency behavior is unaddressed for what is an irreversible mutation.
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 100%, so both parameters are already documented by the schema, and the description's project_id explanation largely restates it. The only incremental value is the framing of (scope, kind) as the composite identity key. Baseline 3 is appropriate.
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 gives a specific verb ("Delete") and a precisely scoped resource ("one durable memory document identified by (scope, kind)"). An agent can instantly place it against read-memory and write-memory. It stops short of naming those siblings explicitly, which is the only gap.
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?
It states the condition for each scope choice ("Provide project_id for project-local memory, or null/omit for global"), which is useful routing guidance. However, there is no when-to-use/when-not guidance relative to siblings, no warning about irreversibility, and no note on what happens if the document does not exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-contextStudocu Agent OS ContextARead-onlyInspect
Return the unified Agent OS context manifest for the authenticated user: profile, followed courses, project metadata, and recent activity. Every project includes has_course_mastery and started_course_mastery (course supports Infinite Practice / learner has started it). Course mastery is visible only on projects, not followed_courses. Practised-topic detail (topic_masteries) is included only when a course is in scope (project_id, a sole remaining project, or remaining projects that share one course_id); the field is omitted when detail was not loaded. Empty topic_masteries means that course was loaded and the learner has no practised topics. Use get-course-mastery(course_id) for the practised-topic list when context omitted detail. Agent OS is read-only: chatting or calling this tool does not change mastery. Source of truth is Infinite Practice attempts (identity + course + topic); web IP writes, ACE/mobile/Agent OS only read.
| Name | Required | Description | Default |
|---|---|---|---|
| course_id | No | Narrow context to a single followed course and its projects. | |
| project_id | No | Narrow context to a single project by id. | |
| active_only | No | Limit the manifest to active context. | |
| recent_only | No | Limit the manifest to recently active context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| aggregates | No | |
| generated_at | Yes | |
| prompt_views | No | |
| requested_filters | Yes | |
| context_schema_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, it discloses non-obvious behavior: topic_masteries is conditionally omitted when detail was not loaded, empty means loaded-but-no-practised-topics, and mastery appears only on projects, not followed_courses. It also states the read-only contract and the source-of-truth model (Infinite Practice attempts write; Agent OS only reads), which an agent cannot infer from 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?
Front-loads the purpose and payload before getting into conditional field semantics, and most sentences carry operational weight. It is dense at roughly 150 words with some tangential material (the ACE/mobile/write-path aside), but nothing is outright filler for a tool with this much conditional output.
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?
Although an output schema exists, the description supplies the interpretive layer the schema can't: the omitted-vs-empty distinction for topic_masteries and where mastery flags live. Combined with the read-only statement and scope semantics, an agent has everything needed to call and interpret it correctly.
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 coverage is 100%, so baseline is 3, but the description adds real meaning: it explains that course_id/project_id narrow which course is 'in scope' and therefore whether topic_masteries is populated. That causal link between the scoping parameters and the conditional output field goes beyond the schema's terse 'Narrow context to...' text.
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?
States a specific verb and resource ('Return the unified Agent OS context manifest for the authenticated user') and enumerates the payload: profile, followed courses, project metadata, recent activity. It also draws a boundary against siblings by naming get-course-mastery as the tool for practised-topic detail, so the agent can separate them without opening either schema.
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?
Gives an explicit alternative and the condition selecting it: 'Use get-course-mastery(course_id) for the practised-topic list when context omitted detail.' It also explains when topic detail is in scope (project_id, sole remaining project, or shared course_id). What's missing is any routing guidance versus get-project-state or agent-os-session, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-course-masteryGet Infinite Practice Course MasteryARead-onlyInspect
Return practised-topic Infinite Practice mastery for a course (topic_id, topic_name when available, display 0–100, questions_answered). Use after get-context flags (has_course_mastery / started_course_mastery) or whenever context omitted topic_masteries. Agent OS is read-only: chatting, creating artifacts, or calling this tool does not change mastery. Source of truth is Infinite Practice attempts (user_topic_mastery: identity + course + topic); display matches the web IP UI. Progress is learner- and course-scoped, not chat- or client-scoped — web IP writes it; ACE/mobile/Agent OS only read the same rows. Empty topic_masteries means no IP attempts yet, not a separate client score. Requires course_id.
| Name | Required | Description | Default |
|---|---|---|---|
| course_id | Yes | Course id to load practised-topic Infinite Practice mastery for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| course_id | Yes | Course id whose mastery was loaded, matching followed_courses.course_id. |
| topic_masteries | Yes | Practised topics only. Empty means this course was loaded and the learner has no IP attempts yet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, but the description adds substantive context they cannot: the source of truth (user_topic_mastery keyed by identity+course+topic), the scoping model (learner/course-scoped, not chat/client-scoped), who writes vs reads the rows, and the meaning of an empty result ('no IP attempts yet, not a separate client score').
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?
Front-loads the purpose and return shape before the routing and scoping notes, which is the right order. It runs a bit long, with two adjacent sentences covering overlapping read-only/scoping claims, but nothing is truly wasted.
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-param read tool with an output schema present, the description covers everything an agent needs: when to call it, what the fields mean, the empty-state interpretation, and the scoping/data-origin model. Nothing material is missing.
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 coverage is 100% for the single course_id parameter and the schema already documents it fully as a positive course id. The description only restates 'Requires course_id', adding no syntax, format, or constraint detail beyond the structured field, so baseline 3 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?
Opens with a specific verb+resource ('Return practised-topic Infinite Practice mastery for a course') and enumerates exactly what comes back (topic_id, topic_name, display 0–100, questions_answered). It is clearly separable from neighbors like get-context and get-course-syllabus.
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?
States a concrete trigger: 'Use after get-context flags (has_course_mastery / started_course_mastery) or whenever context omitted topic_masteries.' This names the related tool and the condition that selects it, though the inverse case (skip it when get-context already supplied masteries) is only 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.
get-course-syllabusGet Course SyllabusARead-onlyInspect
Return a generated course outline as markdown when this tool has one. This is the best grounding for high-quality study guidance. Requires course_id.
| Name | Required | Description | Default |
|---|---|---|---|
| course_id | Yes | Studocu course id whose published syllabus should be loaded. |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes | Published syllabus text for this course. |
| course_id | Yes | Course id whose published syllabus was loaded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, closed-world), so the bar is lower. The description adds real behavioral context beyond them: the syllabus is a generated artifact that may not exist for every course ("when this tool has one"), and the payload is markdown. It stops short of saying what happens when no syllabus exists.
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?
Three short sentences, front-loaded with the action and return format, followed by value framing and the required parameter. No filler; every sentence 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?
With an output schema present, return-value detail is not the description's burden, and the single parameter plus annotations are covered. The only gap is the failure mode when a course has no generated syllabus, which the conditional phrasing hints at but never resolves.
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 100% and the single course_id param is fully documented there, so the baseline is 3. "Requires course_id" merely restates the schema's required field without adding format, range, or sourcing detail.
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?
States a specific verb and resource (return a generated course outline) plus the format (markdown), which clearly separates it from siblings like read-artifact or get-course-mastery. It does not name an alternative sibling, but the resource is specific enough for an agent to identify the right 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?
"This is the best grounding for high-quality study guidance" implies a usage context (study/learning tasks) but never states when not to use it or which sibling to prefer for adjacent needs. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-project-stateStudocu Project StateARead-onlyInspect
Return sources and creations (project state) for one or more projects by id. Creation rows may include external_id (quizId or mockExamId) so a request-creation creating response can be matched once Alpha identity appears. Use after get-context (which lists projects without their sources/creations) to load those projects' artifacts. Only projects you can access are returned.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | The project ids to load sources and creations (project state) for. Only projects you can access are returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| projects | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is free. The description adds genuine context beyond that: the external_id matching trick for correlating a request-creation with a creation once 'Alpha identity appears', and the access-scoped result set. It stops short of noting the 20-id batch cap or pagination behavior.
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?
Three front-loaded sentences with no filler: purpose, the non-obvious matching nuance, then the sequencing rule. The middle sentence is densely jargon-laden ('external_id', 'Alpha identity'), but it carries real information rather than padding.
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?
An output schema exists, so return structure is covered elsewhere, and annotations carry the safety profile. The description covers purpose, ordering, access scoping, and id-correlation semantics; only minor operational details (batch limit, empty/missing-id behavior) are left to the schema.
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 100% and the single 'ids' parameter is already documented in the schema with essentially the same wording the description reuses. The description adds no format, ordering, or batching detail (e.g. the maxItems of 20) beyond what the schema provides, so the baseline 3 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?
States a specific verb and resource ('Return sources and creations (project state)') plus the scope ('for one or more projects by id'). It explicitly differentiates from the closest sibling by noting that get-context 'lists projects without their sources/creations', so an agent can pick between them without opening either schema.
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?
Names the prerequisite and ordering ('Use after get-context ... to load those projects' artifacts'), which is precisely the condition that selects this tool over the alternative. The access caveat ('Only projects you can access are returned') further constrains when it is useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read-artifactRead Studocu ArtifactARead-onlyInspect
Read a Studocu project source or creation by its studocu://project/{project_id}/{kind}/{uuid} URI. Returns normalized metadata with explicitly mapped inline content.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque continuation cursor returned by a previous read. | |
| artifact_id | Yes | Artifact URI in the form studocu://project/{project_id}/{kind}/{uuid}. |
Output Schema
| Name | Required | Description |
|---|---|---|
| details | Yes | |
| projectId | Yes | |
| artifactId | Yes | |
| continuations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds that it returns normalized metadata with inline content, a small behavioral detail, but says nothing about pagination behavior despite accepting a cursor.
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?
Two tight sentences with the identifying URI format front-loaded and no filler. Sizing is appropriate for the tool's simplicity, though the second sentence is somewhat redundant given an output schema exists.
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 an output schema present and annotations covering safety, the description need not explain return values. It still conveys the identifier form and purpose adequately; only the cursor/pagination behavior is left unaddressed.
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 100%, so both parameters are documented in the schema itself. The description restates the URI format but adds no meaning beyond what the schema already provides, making the baseline 3 appropriate.
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?
States a specific verb (Read) and resource (a Studocu project source or creation), plus the exact URI form that identifies it. This is clear, but it doesn't name a sibling (e.g. read-detached-document or write-artifact are not clearly contrasted), so it misses full sibling 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 URI-based framing implies when the tool applies, but there is no explicit when-to-use/when-not guidance and no reference to alternatives like read-detached-document or read-web-url. Usage context is only inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read-detached-documentRead Detached Studocu DocumentARead-onlyInspect
Read a Studocu document directly, without requiring or creating a project source. Use read-artifact for documents attached to a project.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | Studocu document ID to read without creating a project source. |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes | The raw full text content of the Studocu document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered; the description adds the non-obvious side-effect guarantee that no project source is created, which is meaningful beyond readOnly. It does not cover document size limits, pagination, or failure modes, so it stops 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core capability and its scope constraint front-loaded ahead of the sibling reference. Every sentence earns its place by disambiguating from read-artifact.
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 with full annotation coverage and an output schema, nothing essential is missing: the agent knows what it reads, that it won't mutate project state, and which sibling to use instead. Return values are already handled by the output schema.
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?
Only one parameter and schema description coverage is 100%, so the schema fully documents document_id, including its positive-integer bound. The description's only parameter-adjacent signal ('without creating a project source') restates the same concept, adding no syntax or format detail beyond the schema. Baseline 3 for a schema-does-the-work case.
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?
States a specific verb (read) and resource (a Studocu document) plus the defining scope condition: no project source required or created. It explicitly separates itself from the sibling read-artifact, so an agent can choose between them without opening either schema.
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?
Gives the selecting condition directly ('without requiring or creating a project source') and names the alternative tool with its own condition ('Use read-artifact for documents attached to a project'). This is an explicit when/when-other routing rule, not implied guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read-memoryRead Studocu Agent MemoryARead-onlyInspect
Read durable agent memory for the authenticated user. Returns one document per (scope, kind); use project_id for project-scoped memory. Identity comes from Core via the session bearer, not from input.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Narrow the result to a single memory kind. | |
| scope | No | Memory scope to read: global, project, or both. Defaults to global unless project_id is set. | |
| project_id | No | Project UUID for project-scoped memory; null or omitted reads global (user-level) memory. Required when scope is project or both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| memories | Yes | Durable memory documents for the authenticated user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the identity/auth model (session bearer, not input) and the return shape ('one document per (scope, kind)').
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?
Three tight sentences, no filler, with the core action front-loaded and the scoping/auth caveats following. Every sentence carries distinct information.
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?
An output schema exists, so return values need not be explained in prose. Combined with full schema coverage and read-only annotations, the description covers what an agent needs, though a brief routing note against sibling read tools would make it fully complete.
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 coverage is 100% and every parameter is already documented in the schema, including the scope default rule and the project_id requirement. The single mention of project_id in the description duplicates schema content rather than adding new meaning, so baseline 3 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?
Clear specific verb+resource: 'Read durable agent memory for the authenticated user.' The read/write/delete-memory triplet is self-distinguishing, so an agent can tell it apart from write-memory and delete-memory without much inference, though the description never names those siblings explicitly.
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 gives no when-to-use guidance or exclusions relative to siblings like get-context or read-artifact. 'Use project_id for project-scoped memory' is parameter steering, not usage guidance. The agent is left to infer when this tool is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read-web-urlRead Web URLARead-onlyInspect
Read a specific public URL and return grounded page content for agent evidence. Use this when you already have the exact URL. For Studocu study documents use search-documents; for open-web discovery use search-web. Competitor study-material hosts are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public http or https URL to read for agent evidence. For Studocu study documents use search-documents; for open-web discovery use search-web. | |
| query | No | Optional focus question or extraction instruction for the page content. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | The requested URL that was read. |
| text | Yes | Grounded text extracted from the URL for agent use. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, openWorldHint), so the bar is lower. The description adds real value beyond them: the tool returns grounded page content, requires a public URL, and rejects competitor study-material hosts. It stops short of describing failure behavior (timeouts, paywalls, non-public URLs) 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, with the core action front-loaded and the routing constraints immediately after. There is mild duplication of the sibling-routing guidance that also appears in the url parameter description, which keeps it just under a top 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?
An output schema exists, so return-value detail is unnecessary, and the annotations carry the read-only/open-world profile. The description covers the URL prerequisite and host restrictions; only edge-case behavior on failed or blocked reads is left unaddressed.
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 100% for both parameters, so the schema already documents url and the optional query extraction instruction. The description adds no syntax, format, or length guidance beyond that, making 3 the correct baseline.
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?
States a specific verb and resource ('Read a specific public URL') plus the output intent ('return grounded page content for agent evidence'), and names the siblings it is not (search-documents, search-web). An agent can distinguish it from the search tools without opening any schema.
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?
Explicit routing: use this when you already have the exact URL; use search-documents for Studocu documents; use search-web for open-web discovery. It also states an exclusion ('Competitor study-material hosts are rejected'), which is exactly the when-not guidance that prevents wasted calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request-creationRequest Studocu CreationAInspect
Generate a Studocu quiz or mockExam from 1-10 project source artifacts. Waits up to ~3 minutes; returns artifact_id and external_id when created, status creating with external_id when persist is not yet visible, or outcome_unknown on client timeout or in-flight duplicate (check get-project-state before retrying). Optional idempotency_key is forwarded as Idempotency-Key; identical retries without a key still dedupe.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | The kind of creation to generate: quiz or mockExam. | |
| project_id | Yes | UUID of the Studocu project that will own the new creation. | |
| instruction | No | Optional free-text hint for the generating agent (e.g. "focus on chapter 3"). | |
| artifact_ids | Yes | One to ten unique source artifact IDs (studocu://project/{project_id}/source/{uuid}) to generate from. | |
| idempotency_key | No | Optional retry key. Agent OS always sends Idempotency-Key to Alpha (this value, or a fingerprint of project/type/sources/instruction). Reuse with a different body is rejected. |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | |
| status | Yes | created: persisted and linked (artifact_id and external_id). creating: generation finished but Alpha identity is not yet visible (external_id matches get-project-state creation rows). outcome_unknown: client timeout or an in-flight duplicate (check get-project-state; do not mint a new key). Terminal failures use MCP isError, not a status value. |
| artifact_id | No | Agent OS artifact ID of the new creation. Present when status is created. |
| external_id | No | Kind-specific downstream id (quizId or mockExamId). Present on created and creating; match the same field on get-project-state creation rows. Omitted on timeout. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the write/non-destructive profile; the description goes well beyond by disclosing the ~3-minute wait, the three distinct outcome shapes (created, creating, outcome_unknown), the duplicate/in-flight case, and idempotency-key forwarding and dedupe semantics. This is exactly the latency and failure-mode context an agent needs before invoking a long-running generator.
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?
Two sentences, front-loaded with the purpose, and every clause carries operative information (latency, outcome states, retry path, idempotency). The second sentence is dense and semicolon-heavy, which slightly taxes parsing, but there is no filler.
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 an output schema present, the description need not enumerate return fields, yet it usefully summarizes the possible states and the retry escape hatch. Combined with the latency bound and idempotency rules, an agent has everything needed to call this safely on the first attempt.
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 coverage is 100%, so the baseline is 3; the description adds real meaning by stating that artifact_ids must be 1-10 project source artifacts and that idempotency_key is forwarded as Idempotency-Key and that identical retries dedupe even without a key. It does not restate the type enum or project_id semantics, but it enriches the two parameters that most affect behavior.
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?
States a specific verb (Generate) and resource (Studocu quiz or mockExam) plus the input scope (1-10 project source artifacts). It is readily distinguishable from the closest sibling create-project and from get-project-state, which it names explicitly in the retry path.
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?
Gives a concrete recovery instruction: on outcome_unknown (timeout or in-flight duplicate), check get-project-state before retrying, and notes that retries without a key still dedupe. It lacks any explicit when-to-use framing versus the other creation/write tools, but the guidance it does give is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-coursesSearch CoursesARead-onlyInspect
Search Studocu courses when establishing or correcting course context. Prefer institution_id from search-institutions to scope results. Omit institution_id only when the institution is unknown: results then include catalog institution_id, and institution_name when Algolia has it. Do not require this before every document search. Structured results include course_id, name, code (nullable), institution_id, and optional institution_name. When talking to the user, present name, course code, and institution name only — do not show internal IDs. Auto-pick a clear top match; if the shortlist is ambiguous, ask the user to choose by name/code. Resolved IDs are conversation-scoped until a persistence capability owns them.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| institution_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| courses | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld=false/non-destructive, yet the description adds substantial behavior beyond them: what results contain, that institution_name is present only 'when Algolia has it,' an auto-pick rule with an ambiguity fallback, and conversation-scoped ID lifetime. This is rich operational context an agent could not infer from structured fields.
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?
Front-loaded purpose followed by scoping, result shape, and interaction rules; each sentence carries distinct guidance. It is dense but slightly overlong, with the user-presentation rule sitting as a somewhat separate concern.
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?
Covers scoping, fallback behavior, disambiguation, and lifecycle for a tool where the output schema already documents return shape. The only real gap is the undocumented limit parameter, so it is near-complete rather than fully so.
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 carry parameter meaning. It does so well for institution_id (where to source it, and the richer result fields when omitted), but leaves limit (default 3, max 10) and query length constraints entirely undocumented. Partial compensation warrants a 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 definition opens with a specific verb+resource ('Search Studocu courses') and anchors it to a concrete use case ('when establishing or correcting course context'). It is easily distinguished from siblings like search-institutions and search-documents, which are referenced for their distinct roles.
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?
Explicit when-to-use and when-not guidance: 'Prefer institution_id from search-institutions to scope results. Omit institution_id only when the institution is unknown' plus 'Do not require this before every document search.' It names the alternative tool and the exact condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-documentsDocument SearchARead-onlyInspect
Use this when the user wants to find, search, or browse study documents, lecture notes, summaries, or course materials on Studocu. Pass topic/keywords as query only — never put course name, course id, or institution name in query. institution is a display name only (this tool has no institution_id). Prefer numeric course_id from search-courses when you have it: it pins the course and overrules course. If both course_id and institution are sent, course_id wins; result institution is that course's university, not the name you passed. Otherwise pass course as name or code, never as a numeric id. course is optional extra if you already have course_id. Omit unknown filters. Returns matching documents with titles, course and institution info, ratings, and a link to view each on Studocu. For open-web sources outside Studocu, use search-web instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (1-50, default: 10). | |
| query | Yes | Topic/keywords only (e.g. "supply and demand", "microeconomics midterm 2025"). Never put course name, course id, or institution name here — use `institution`, `course`, and `course_id` instead. | |
| course | No | Course name or code only, e.g. "Economics" or "ECON101". Use when you do not have `course_id`. Never put a numeric id here. Optional extra if you also have `course_id`. Omit entirely if unknown. | |
| course_id | No | Numeric Studocu course ID from search-courses `course_id`. Prefer this: it pins the course and overrules `course` name/code. Omit if you only have a name/code. | |
| institution | No | Institution display name only, e.g. "University of Amsterdam". Not an id — this tool has no `institution_id`. Infer it from the user message or conversation context when available; omit entirely if unknown. If `course_id` is also set, `course_id` wins; result institution is that course's university, not this name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| documents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true/openWorldHint=false/destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: precedence of course_id over course, that institution is display-name-only with no institution_id, and that the returned institution is the pinned course's university rather than the name passed. It does not cover pagination or ranking behavior, so it is not fully exhaustive.
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?
Front-loaded with the use case before the filter mechanics, and nearly every sentence carries actionable constraint. It is dense and repeats the course_id-wins rule twice, which costs it a point, but there is little outright filler.
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 an output schema present, return values need no explanation, and the description nonetheless sketches them (titles, course/institution, ratings, links). Filter precedence, argument-source guidance, and the sibling escape hatch are all present, so an agent has everything needed to call this correctly.
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 100%, so the baseline is 3 and much of the field guidance (query-is-keywords-only, course_id overrules course) is already mirrored in the schema. The description still adds cross-tool guidance — prefer numeric course_id sourced from search-courses — and consolidates the precedence rules in one place, which is meaningful for argument construction.
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?
States specific verbs (find, search, browse) and a concrete resource (study documents, lecture notes, summaries, course materials on Studocu). It also names the sibling it is not (search-web for open-web sources), so an agent can separate this from the other search tools without opening a schema.
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?
Explicit when-to-use, explicit when-not (open-web sources → search-web), and explicit filter-precedence conditions (course_id overrules course; course is optional extra; omit unknown filters). Alternative tool and selecting conditions are named rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-institutionsSearch InstitutionsARead-onlyInspect
Search Studocu institutions by name when establishing or correcting education context (onboarding / context setup). Do not require this before every document search. Structured results include id, name, type, region_code, and country for follow-up tools. When talking to the user, present name/type/country/region only — do not show internal IDs. Auto-pick a clear top match; if the shortlist is ambiguous, ask the user to choose by name. Resolved IDs are conversation-scoped until a persistence capability owns them.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| institutions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description layers on genuinely new behavior: the disambiguation policy (auto-pick a clear top match, ask the user when ambiguous), the user-facing presentation rule (show name/type/country/region, never internal IDs), and the ID lifecycle ('conversation-scoped until a persistence capability owns them'). None of that is derivable from the 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?
Front-loads purpose and the usage gate in the first two sentences, then adds policy. It is dense but every sentence carries a distinct instruction; the ID/presentation guidance is slightly beyond tool-invocation scope but still actionable.
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 an output schema present, the description need not enumerate return fields, though it helpfully does. The usage gate and disambiguation policy make the tool callable correctly; the only real hole is the unexplained 'type' and 'limit' parameters.
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 carries the full burden, yet it only clarifies the 'query' parameter implicitly ('by name'). The 'type' enum (UNIVERSITY / HIGH_SCHOOL) and the 'limit' parameter (default 3, max 10) are never mentioned, so an agent gets no guidance on filtering by institution type or controlling shortlist size.
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?
States a specific verb and resource ('Search Studocu institutions by name') plus the scope constraint that names are the lookup key. This is clearly distinguishable from sibling search tools such as search-courses and search-documents, which search different resource types.
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?
Explicitly names the triggering context ('when establishing or correcting education context (onboarding / context setup)') and an exclusion ('Do not require this before every document search'). That is both a when-to-use and a when-not-to-use instruction, which is rare and valuable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-webWeb SearchARead-onlyInspect
Answer open-web questions with a grounded response and citation URLs (news, reference sites, documentation). Use this for non-Studocu sources. For Studocu study documents, lecture notes, summaries, or course materials, use search-documents instead. Competitor study-material domains are excluded from results.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Optional domain filter, e.g. "rijksoverheid.nl". Restricts search to that site when supported. | |
| query | Yes | Open-web question or search prompt (external sources only). For Studocu study documents, lecture notes, or course materials use search-documents instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | Grounded answer text, including inline citation links when present. |
| citations | Yes | Sources used for the answer, with title, URL, and domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint, openWorldHint, destructiveHint=false), and the description adds non-obvious behavior: results are grounded with citation URLs and competitor study-material domains are filtered out. It does not discuss rate limits or latency, and the return format is covered by the output schema, so a 4 is fair.
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?
Three tight sentences, zero filler. The core capability is front-loaded, followed by the routing exclusion and the domain-filtering caveat.
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?
Return values are covered by the output schema, safety by annotations, and parameters by a fully covered schema, so the description's remaining job is routing and exclusion behavior — both handled explicitly. Nothing an agent needs to select or invoke this tool correctly is missing.
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 coverage is 100%, so both parameters are already documented in the schema, including the 'site' domain-filter example. The description adds no syntax or format detail beyond what the schema provides; the query guidance merely echoes the routing rule. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb and resource ('Answer open-web questions with a grounded response and citation URLs') and explicitly scopes it to non-Studocu sources. An agent can distinguish it from search-documents without opening either schema.
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?
Explicit routing rule: use this tool for open-web questions, and use search-documents for Studocu study documents, lecture notes, summaries, or course materials. It also warns that competitor study-material domains are excluded, so the agent knows when results will be absent rather than assuming failure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-projectUpdate Studocu ProjectAInspect
Update a Studocu project title, emoji, or course. Use course_id null to clear the course and institution.
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | No | ||
| title | No | ||
| course_id | No | ||
| project_id | Yes | NOTE: These shared primitives are copied from the AI API spec and owned locally by Agent OS to keep this contract decoupled. |
Output Schema
| Name | Required | Description |
|---|---|---|
| emoji | Yes | |
| title | Yes | Agent-displayable project title. Null Alpha names become "Untitled project". |
| course_id | Yes | |
| is_mobile | Yes | |
| project_id | Yes | NOTE: These shared primitives are copied from the AI API spec and owned locally by Agent OS to keep this contract decoupled. |
| institution_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond the schema by disclosing that nulling course_id also clears the institution, an important side effect not visible in the parameter type.
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?
Two short sentences, zero filler, with the core operation front-loaded and the tricky clearing rule immediately after it.
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?
An output schema exists, so return values need no explanation, and the non-destructive annotations frame the mutation. The one gap is that the anyOf constraint (at least one of title/emoji/course_id) is only implied rather than stated.
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 25%, so the description must carry the load; it names and explains the three mutable fields and, crucially, defines the null semantics for course_id. It does not explain the schema's anyOf/minProperties=2 requirement that at least one field be supplied, nor project_id beyond its required status.
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?
States a specific verb ('Update') plus the resource ('Studocu project') and the three updatable fields (title, emoji, course). It is clearly distinguishable from the sibling create-project by the mutation verb, though it never names the sibling explicitly.
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 only operational guidance is the course_id=null clearing rule, which is really a parameter note. There is no statement of when to use this versus create-project or get-project-state, and no prerequisites are given, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write-artifactWrite Studocu ArtifactBInspect
Create a Studocu artifact from typed content. Provide project_id and an artifact envelope; the artifact type defines the required content shape.
| Name | Required | Description | Default |
|---|---|---|---|
| artifact | Yes | The artifact to create. Pick type; each type defines its own content shape. | |
| project_id | Yes | UUID of the Studocu project that will own the artifact. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | Artifact kind returned by the write operation. |
| type | Yes | Creation type that was written. |
| title | Yes | Human-readable title of the created artifact. |
| status | Yes | Stable write status for successful creation writes. |
| projectId | Yes | UUID of the Studocu project that owns the created artifact. |
| artifactId | Yes | Canonical Studocu artifact URI for the created creation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that the artifact type dictates the content shape, which is useful framing, but it discloses no additional behavioral traits like permissions, side effects, or limits. No contradiction with 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?
Two short sentences, front-loaded with the action and followed by the required inputs. Every clause earns its place with no filler.
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 polymorphic write tool supporting five artifact types, the description never names or distinguishes the supported types, leaving that discovery entirely to the schema. An output schema exists so return values need no explanation, but the type-level guidance is a real gap given the complexity.
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 100%, so the schema fully documents project_id and the artifact envelope. The description restates the two inputs at a high level but adds no syntax or type-specific detail beyond what the schema already provides, making the baseline 3 appropriate.
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?
States a specific verb and resource ('Create a Studocu artifact from typed content') and clarifies the input contract ('project_id and an artifact envelope; the artifact type defines the required content shape'). It is clear but does not explicitly differentiate itself from siblings like read-artifact or request-creation.
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 on when to use this tool versus alternatives such as request-creation or read-artifact, and no prerequisites or exclusions are stated. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write-memoryWrite Studocu Agent MemoryADestructiveInspect
Upsert one durable memory document per (scope, kind) for the authenticated user. Provide project_id for project-local memory, or null/omit for global. Identity comes from Core via the session bearer, not from input.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Memory kind, e.g. study_preference or project_learning_context. | |
| value | Yes | Freeform memory document. MVP convention is { content: string }. | |
| project_id | No | Project UUID for project-local memory; null or omitted stores global (user-level) memory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | Memory kind that was written. |
| value | Yes | Stored memory document. |
| userId | Yes | Owner of the memory document. |
| createdAt | Yes | Creation timestamp of the row. |
| projectId | Yes | Owning project UUID, or null for global memory. |
| updatedAt | Yes | Last write timestamp of the row. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: the upsert is keyed one-document-per-(scope, kind) (implying replacement of prior content) and identity is derived from the session bearer rather than input. It does not explicitly state that existing content is overwritten or what errors 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?
Two sentences, zero waste, with the core upsert/keying semantics front-loaded before the scope-selection detail. Every clause 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?
An output schema exists, so return values need not be explained, and the description covers scope, keying, and auth identity for a mutation tool. It leaves out what happens to previously stored content on overwrite and whether 'kind' is an open or constrained vocabulary, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so kind, value, and project_id are already fully documented in the schema; the description largely restates the project_id null/omit behavior. The one added nuance is that identity is not a parameter but comes from the session bearer. Baseline 3 is appropriate.
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?
States a specific verb (upsert) and resource (durable memory document) with the keying semantics '(scope, kind) per authenticated user', which distinguishes it from read-memory and delete-memory. It does not explicitly name a sibling or say what it is not, 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?
Gives a clear condition for choosing project-local vs global storage via project_id, which is genuine usage guidance. However, it never says when to prefer this tool over siblings like write-artifact or get-context, and gives no prerequisites or exclusion cases, so guidance is implied rather than explicit.
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.
20 tool updates
- First observed
add-document-sources - First observed
agent-os-session - First observed
create-project - First observed
delete-memory - First observed
get-context - First observed
get-course-mastery - First observed
get-course-syllabus - First observed
get-project-state - First observed
read-artifact - First observed
read-detached-document - First observed
read-memory - First observed
read-web-url - First observed
request-creation - First observed
search-courses - First observed
search-documents - First observed
search-institutions - First observed
search-web - First observed
update-project - First observed
write-artifact - First observed
write-memory
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1611 npm1MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs117 npm54 PyPIMIT
- AlicenseAqualityCmaintenanceRevnuvo Company Intelligence tells AI agents what changed at a company, with evidence. It observes company websites, technologies, and DNS over time and returns timestamped, confidence-aware changes, signals, and monitoring.9MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.