Studocu
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Find Studocu study documents, courses and institutions, and manage study projects and quizzes.
| Author | com.studocu |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 264 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Studocu": {
"url": "https://agent-os-mcp.alpha.studocu.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (18)
search-documentsread-onlyUse 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. Results with `match_type: semantic` are closest matches, not exact keyword hits, and may be only loosely related; check them against the request.
Parameters:
query(required) — string — 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.limit— integer — Number of results to return (1-50, default: 10).course— string — 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— integer — 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— string — 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.use_no_course_as_fallback— boolean — Only used with `course_id`. When true and that course has no matching documents, search again without the course, so results may come from other courses; check each result's `course_id`. Default false.
Hints: read-only yes · destructive no · idempotent yes · open-world no
search-institutionsread-onlySearch 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.
Parameters:
query(required) — stringtype— stringlimit— integer
Hints: read-only yes · destructive no · idempotent yes · open-world no
search-coursesread-onlySearch 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.
Parameters:
query(required) — stringlimit— integerinstitution_id— integer
Hints: read-only yes · destructive no · idempotent yes · open-world no
get-course-syllabusread-onlyReturn a generated course outline as markdown when this tool has one. This is the best grounding for high-quality study guidance. If it is missing, a syllabus may be generating, so try again in a few minutes. Requires course_id.
Parameters:
course_id(required) — integer — Studocu course id whose published syllabus should be loaded.
Hints: read-only yes · destructive no · idempotent yes · open-world no
agent-os-sessionread-onlyUse this proof tool to verify that the Agent OS MCP server received a valid delegated Studocu session.
Hints: read-only yes · destructive no · idempotent yes · open-world no
read-artifactread-onlyRead a Studocu project source or creation by its studocu://project/{project_id}/{kind}/{uuid} URI. Returns normalized metadata with explicitly mapped inline content.
Parameters:
artifact_id(required) — string — Artifact URI in the form studocu://project/{project_id}/{kind}/{uuid}.cursor— string — Opaque continuation cursor returned by a previous read.
Hints: read-only yes · destructive no · idempotent yes · open-world no
read-detached-documentread-onlyRead a Studocu document directly, without requiring or creating a project source. Use read-artifact for documents attached to a project.
Parameters:
document_id(required) — integer — Studocu document ID to read without creating a project source.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get-contextread-onlyReturn 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.
Parameters:
course_id— Narrow context to a single followed course and its projects.project_id— string — Narrow context to a single project by id.active_only— boolean — Limit the manifest to active context.recent_only— boolean — Limit the manifest to recently active context.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get-project-stateread-onlyReturn 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.
Parameters:
ids(required) — array — The project ids to load sources and creations (project state) for. Only projects you can access are returned.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get-course-masteryread-onlyReturn 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.
Parameters:
course_id(required) — integer — Course id to load practised-topic Infinite Practice mastery for.
Hints: read-only yes · destructive no · idempotent yes · open-world no
write-artifactCreate a Studocu artifact from typed content. Provide project_id and an artifact envelope; the artifact type defines the required content shape.
Parameters:
project_id(required) — string — UUID of the Studocu project that will own the artifact.artifact(required) — The artifact to create. Pick type; each type defines its own content shape.
Hints: read-only no · destructive no · idempotent no · open-world no
add-document-sourcesAttach 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.
Parameters:
project_id(required) — string — UUID of the Studocu project that will receive the document sources.document_ids(required) — array — One to ten unique Studocu document IDs returned by search-documents.
Hints: read-only no · destructive no · idempotent yes · open-world no
create-projectCreate a Studocu project and optionally configure its emoji and course. A numeric course_id is validated before project creation.
Parameters:
emoji— stringtitle— stringcourse_id— integer
Hints: read-only no · destructive no · idempotent no · open-world no
update-projectUpdate a Studocu project title, emoji, or course. Use course_id null to clear the course and institution.
Parameters:
project_id(required) — string — NOTE: These shared primitives are copied from the AI API spec and owned locally by Agent OS to keep this contract decoupled.emoji— stringtitle— stringcourse_id
Hints: read-only no · destructive no · idempotent yes · open-world no
request-creationGenerate 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.
Parameters:
project_id(required) — string — UUID of the Studocu project that will own the new creation.type(required) — string — The kind of creation to generate: quiz or mockExam.artifact_ids(required) — array — One to ten unique source artifact IDs (studocu://project/{project_id}/source/{uuid}) to generate from.instruction— string — Optional free-text hint for the generating agent (e.g. "focus on chapter 3").idempotency_key— string — 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.
Hints: read-only no · destructive no · idempotent no · open-world no
read-memoryread-onlyRead 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.
Parameters:
kind— string — Narrow the result to a single memory kind.scope— string — Memory scope to read: global, project, or both. Defaults to global unless project_id is set.project_id— Project UUID for project-scoped memory; null or omitted reads global (user-level) memory. Required when scope is project or both.
Hints: read-only yes · destructive no · idempotent yes · open-world no
write-memorydestructiveUpsert 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.
Parameters:
kind(required) — string — Memory kind, e.g. study_preference or project_learning_context.value(required) — object — Freeform memory document. MVP convention is { content: string }.project_id— Project UUID for project-local memory; null or omitted stores global (user-level) memory.
Hints: read-only no · destructive yes · idempotent yes · open-world no
delete-memorydestructiveDelete 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.
Parameters:
kind(required) — string — Memory kind to delete, e.g. study_preference or project_learning_context.project_id— Project UUID for project-local memory; null or omitted deletes global (user-level) memory.
Hints: read-only no · destructive yes · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.