classdojo-mcp
Servidor MCP de ClassDojo Roster
Un servidor MCP (Model Context Protocol) no oficial, local-primero para docentes que necesitan inspeccionar listas de estudiantes en Excel/XLSX, previsualizar cambios, importar estudiantes a ClassDojo y verificar la lista guardada posteriormente. Funciona con cualquier cliente MCP que pueda lanzar un servidor stdio local, incluyendo Claude Desktop, Codex, Cursor y VS Code.
[!IMPORTANTE] Este proyecto comunitario no está afiliado, respaldado ni soportado por ClassDojo. Utiliza el sitio web de docentes de ClassDojo con sesión iniciada a través de un adaptador de navegador local porque aún no existe una API/MCP pública oficial de ClassDojo. Los cambios en la interfaz de ClassDojo pueden requerir una actualización del adaptador.
Documentación en chino tradicional: docs/README.zh-TW.md
Por qué existe este servidor MCP
El flujo de pegado masivo de ClassDojo puede interpretar un número inicial como numeración de lista en lugar de parte del nombre visible del estudiante. Este servidor mantiene los cambios de la lista revisables y admite dos formatos explícitos:
seat_number_dot_name: crea nombres como1.Student Auno a la vez para que se conserve el número de asiento.name_only: utiliza el flujo de pegado masivo más rápido de ClassDojo cuando no se necesitan números de asiento; se rechaza si una clase de origen contiene nombres duplicados.
Cada escritura requiere un ID de previsualización fresco de 15 minutos más confirm: true. Después de guardar, el servidor lee la clase nuevamente y compara nombres y recuentos.
Related MCP server: excel-mcp-server
Qué puede hacer
Herramienta | Escribe datos | Propósito |
| No | Comprueba la conexión del navegador local, el estado de inicio de sesión y las clases visibles. |
| No | Lista las clases visibles de tres dígitos en la sesión del docente. |
| No | Escanea cada hoja en busca de columnas probables de clase, número de asiento y nombre de estudiante. |
| No | Lee la lista de una clase actual de ClassDojo. |
| No | Detecta diálogos que pueden bloquear el trabajo con la lista; nunca los descarta. |
| No | Compara los estudiantes del libro de trabajo con ClassDojo y crea un ID de previsualización de corta duración. |
| Sí | Aplica una previsualización con |
| No | Compara recuentos esperados y reales, nombres faltantes y nombres inesperados. |
El inspector de libros de trabajo no asume nombres de hoja fijos ni posiciones de columna. Escanea todo el libro en busca de encabezados comunes de clase/asiento/nombre en chino e inglés. La previsualización y la verificación requieren entonces una selección explícita no vacía de sheetNames más asignaciones de clase, evitando que un Agente combine silenciosamente hojas duplicadas o no relacionadas.
Flujo de trabajo seguro
Ejecuta
classdojo_doctor.Ejecuta
classdojo_inspect_workbooky selecciona la hoja prevista y los bloques de clase detectados.Ejecuta
classdojo_preview_roster_importcon unstudentNameFormatexplícito.Revisa las asignaciones de clase, recuentos, números de asiento faltantes y adiciones.
Solo después de la aprobación humana, llama a
classdojo_apply_roster_importcon elpreviewIddevuelto yconfirm: true.Ejecuta
classdojo_verify_roster_against_workbookpara una verificación independiente de lectura posterior.
Previsualización | Verificación de lectura posterior |
Todas las capturas de pantalla contienen solo datos sintéticos.
Requisitos
Node.js 20 o más reciente
Chrome u otro navegador Chromium con Chrome DevTools Protocol (CDP)
Una cuenta de docente de ClassDojo en la que inicies sesión tú mismo
Un cliente MCP que admita servidores stdio locales
El servidor MCP nunca solicita contraseña, cookie o token de API de ClassDojo.
Iniciar el adaptador de navegador local
Usa un perfil de navegador dedicado e inicia sesión en ClassDojo en esa ventana.
macOS
open -na "Google Chrome" --args \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/.classdojo-mcp-chrome"Linux
google-chrome \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/.classdojo-mcp-chrome"Windows PowerShell
& "$env:ProgramFiles\\Google\\Chrome\\Application\\chrome.exe" \`
--remote-debugging-port=9222 \`
--user-data-dir="$env:LOCALAPPDATA\\classdojo-mcp-chrome"Mantén el puerto de depuración en loopback. Cualquiera que pueda alcanzar un endpoint CDP podría controlar su sesión de navegador.
Instalar en un cliente MCP
Instala desde el paquete npm público con el mismo comando en cada cliente:
npx -y classdojo-mcpLos contribuyentes pueden alternativamente clonar este repositorio, ejecutar npm ci && npm run build y reemplazar el comando con node más la ruta absoluta a dist/cli.js.
Claude Desktop y Cursor
{
"mcpServers": {
"classdojo": {
"command": "npx",
"args": ["-y", "classdojo-mcp"],
"env": {
"CLASSDOJO_CDP_URL": "http://127.0.0.1:9222"
}
}
}
}VS Code
{
"servers": {
"classdojo": {
"type": "stdio",
"command": "npx",
"args": ["-y", "classdojo-mcp"],
"env": {
"CLASSDOJO_CDP_URL": "http://127.0.0.1:9222"
}
}
}
}Codex
Añade esto a ~/.codex/config.toml:
[mcp_servers.classdojo]
command = "npx"
args = ["-y", "classdojo-mcp"]
[mcp_servers.classdojo.env]
CLASSDOJO_CDP_URL = "http://127.0.0.1:9222"La interfaz de usuario del cliente y las ubicaciones de configuración cambian con el tiempo; consulta la documentación actual del cliente. El transporte en sí es MCP stdio estándar y no es específico de Codex.
Ejemplos de entradas de herramientas
Inspecciona un libro de trabajo primero:
{
"workbookPath": "/absolute/path/to/students.xlsx"
}Crea una previsualización con asignaciones de clase sintéticas:
{
"workbookPath": "/absolute/path/to/students.xlsx",
"sheetNames": ["Grade 5"],
"studentNameFormat": "seat_number_dot_name",
"includeStudentDetails": false,
"mappings": [
{
"classdojoClassName": "503",
"sourceClassName": "Grade 5 Class 3"
}
]
}Aplica solo después de revisar la previsualización:
{
"previewId": "00000000-0000-4000-8000-000000000000",
"confirm": true
}Los IDs de previsualización expiran después de 15 minutos, viven solo en el proceso MCP en ejecución y se consumen en el primer intento de aplicación. Esto reduce la reproducción accidental y las importaciones duplicadas. Si una clase falla, el resultado nombra las clases verificadas y las clases que se pueden reintentar después de generar una nueva previsualización.
Privacidad y seguridad
El análisis de libros de trabajo y la automatización del navegador se ejecutan localmente en la computadora del docente.
El proyecto no ejecuta un servicio MCP alojado y no persiste credenciales ni listas de estudiantes.
Los nombres de los estudiantes pueden pasar a través del cliente MCP/proveedor de IA seleccionado. Revisa las políticas de retención y privacidad de ese proveedor antes de usar datos reales de estudiantes.
Nunca adjuntes libros de trabajo reales, capturas de pantalla de estudiantes, perfiles de navegador, cookies o registros de diagnóstico que contengan datos personales a un problema público.
Solo la importación de listas es escribible en v0.1.0. Puntos, asistencia, mensajería, invitaciones familiares y otras características de ClassDojo no están disponibles intencionalmente.
Consulta docs/PRIVACY.md, SECURITY.md y el modelo de amenazas.
Solución de problemas
Síntoma | Comprobación |
La conexión del navegador falla | Confirma que la ventana dedicada de Chrome sigue ejecutándose con |
No has iniciado sesión | Inicia sesión manualmente en la ventana dedicada y luego vuelve a ejecutar |
No se ven clases | Abre la página de clases del docente y confirma que la cuenta tiene acceso. |
La importación está bloqueada | Ejecuta |
Los números de asiento desaparecen | Usa |
No se detectan columnas del libro | Abre un problema con un libro de trabajo sintético que reproduzca el diseño de encabezado. |
La verificación difiere | Deja de escribir, compara |
Estado del proyecto y hoja de ruta
La versión 0.1.x es experimental. El adaptador de interfaz web está aislado intencionalmente para que una futura API oficial de ClassDojo pueda reemplazarlo sin cambiar el flujo de trabajo público de las herramientas MCP.
Trabajo planificado:
diseños de libros de trabajo sintéticos adicionales y cobertura de locales
matriz de compatibilidad de clientes MCP y pruebas de humo con Inspector
adaptador de API oficial si ClassDojo otorga acceso anticipado
herramientas opcionales de solo lectura solo después de una revisión de privacidad y permisos
Este proyecto no realizará ingeniería inversa ni prometerá endpoints REST no documentados de ClassDojo como una API pública estable.
Desarrollo
npm ci
npm test
npm run build
npm audit --omit=dev
npm pack --dry-runEl protocolo stdio usa stdout; nunca agregues llamadas console.log al servidor. Usa stderr para diagnósticos. Consulta CONTRIBUTING.md antes de abrir una solicitud de extracción.
Metadatos comunitarios y publicación
Nombre del registro MCP:
io.github.Eason0in/classdojo-mcpPaquete npm:
classdojo-mcptransporte:
stdiolicencia: MIT
server.json y package.json#mcpName coinciden intencionalmente con el formato de propiedad del registro MCP. El flujo de trabajo de publicación está preparado para un entorno protegido de GitHub Actions, npm Trusted Publishing, procedencia y OIDC del registro MCP; no es utilizable hasta que el mantenedor configure explícitamente el entorno release y el editor npm. No debe haber ningún token npm de larga duración en este repositorio.
Licencia
MIT © Eason0in
Available Tools
12 toolsclassdojo_apply_roster_importApply a previously previewed roster importA
Sends student names to ClassDojo only after explicit confirmation, then verifies each class by reading it back.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | ||
| previewId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent, non-destructive operation. The description adds valuable behavioral context by stating the confirmation requirement (aligning with the `confirm` parameter's const true) and the verification step after sending. It does not contradict annotations and supplements them with the two-step behavior, though it omits details about failure handling or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, dense sentence that front-loads the core action, embeds the precondition, and ends with the verification step. There is no wasted text; every clause adds necessary information. The structure is efficient and proportionate to the tool's complexity.
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 write tool with no output schema and only two parameters, the description covers the primary behavior and precondition. However, it lacks details on what happens if verification fails, whether the operation is repeatable (idempotency is already annotated but not explained), and any side effects or error conditions. Given the stakes of sending data to an external service, additional context on failure handling would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain parameter purpose. It does clarify `confirm` as 'explicit confirmation' and `previewId` as referring to a 'previously previewed' import, but it does not explicitly state that `previewId` comes from the preview tool or describe its format beyond the schema. The description adds meaning but could be more explicit about the source of the previewId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Sends student names to ClassDojo' (applies an import) and includes a distinguishing behavior: 'only after explicit confirmation, then verifies each class by reading it back.' This differentiates it from preview_roster_import (which only previews) and verify_roster_against_workbook (which compares to workbook, not ClassDojo). The verb-resource pairing is specific and unambiguous.
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 explicitly conditions usage on 'explicit confirmation' and a 'previously previewed' import, making it clear this is the apply step after a preview. However, it does not explicitly name alternatives or state when not to use it, though the sibling set and title imply the workflow. This is clear context but lacks direct exclusions or comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classdojo_apply_skill_syncApply a previously previewed ClassDojo skill synchronizationADestructive
Exactly replaces target skills only after explicit confirmation, then reads every class back.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | ||
| previewId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructiveHint, but the description adds precise behavioral context: the operation is an exact replacement, it is gated on explicit confirmation, and it performs a read-back of every class afterward. This goes well beyond the structured hints and does not contradict them.
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?
One dense sentence delivers action, precondition, and postcondition with no filler. The destructive nature is front-loaded before the read-back detail.
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 destructive two-parameter tool, the definition captures what is replaced, when it is allowed, and the follow-up read. It does not explicitly describe the return value or specify that previewId comes from classdojo_preview_skill_sync, though sibling names and the title make this discoverable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the two parameters. It reinforces confirm's semantics with 'explicit confirmation', but it never names previewId or states that it must come from a prior preview — that is only in the title and tool name. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action — exactly replacing target skills — plus a postcondition ('reads every class back'). This clearly identifies it as the commit/apply step and distinguishes it from classdojo_preview_skill_sync and classdojo_verify_skill_sync.
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 conveys the necessary use conditions: a previously previewed sync and explicit confirmation before any replacement. It does not name alternative tools or say when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classdojo_doctorCheck the local ClassDojo browser adapterARead-only
Checks the local browser connection, login visibility, and available classes without writing data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true and openWorldHint: true, and the description adds 'without writing data' which aligns with readOnlyHint. The description goes beyond the annotations by specifying exactly what is checked (browser connection, login visibility, available classes). This adds useful behavioral context without contradicting 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?
The description is a single, focused sentence that front-loads the main verb 'Checks' and specifies exactly what is checked. There is no fluff, redundancy, or unnecessary detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema, read-only annotations), the description is sufficient. It clearly states the tool's scope and intent. An agent can confidently invoke this tool to diagnose the local environment without ambiguity. There is no missing information that would prevent correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (no properties to describe). Per the baseline for tools with no parameters, a score of 4 is appropriate. The description does not need to explain parameters, and it does not introduce any misleading information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Checks the local browser connection, login visibility, and available classes without writing data.' This uses specific verbs and resources, and implicitly distinguishes it from sibling tools like classdojo_list_classes or classdojo_get_ui_state by focusing on a diagnostic health check. The purpose is unambiguous and immediately actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for verifying the local environment (browser connection, login state, class availability) before using other tools, but it does not explicitly say when to use it versus siblings like classdojo_get_ui_state or classdojo_list_classes. There is no mention of alternatives or exclusions, so the 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.
classdojo_get_rosterGet a ClassDojo rosterCRead-only
Reads a class roster without changing ClassDojo data.
| Name | Required | Description | Default |
|---|---|---|---|
| classId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already provide readOnlyHint=true and openWorldHint=true. The description's statement 'without changing ClassDojo data' reinforces the read-only nature but adds no new behavioral detail, such as potential side effects, data freshness, or handling of open-world results. It is consistent with annotations but does not enrich them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded and free of fluff. It is appropriately brief for a simple read operation, though the extreme brevity contributes to the lack of parameter and usage information. The structure itself is good, but it could be slightly longer to include essential context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and lack of output schema, the description should at least mention how to obtain classId or what the return format is. It does neither, leaving the tool under-specified. While the operation is simple, the missing parameter semantics and absence of any output hints make it incomplete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining classId. It does not mention classId at all, leaving its purpose, format, or source entirely unspecified. The agent cannot know that classId identifies the class without external context, which is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('reads') and resource ('class roster') and explicitly notes it does not change data, which conveys a read-only intent. However, it does not differentiate from sibling tools like classdojo_list_classes or classdojo_inspect_workbook, which also involve reading class-related data, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided for when to use this tool versus alternatives. It does not mention prerequisites (e.g., that classId comes from list_classes) or situations where siblings would be more appropriate. The agent is left to infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classdojo_get_skillsGet ClassDojo skillsARead-only
Reads positive and needs-work skills, including points and icons, without changing ClassDojo data.
| Name | Required | Description | Default |
|---|---|---|---|
| classId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the 'without changing ClassDojo data' phrase is redundant but consistent. The description adds meaningful behavioral detail beyond annotations by specifying exactly what is read: positive and needs-work skills, including points and icons. This is useful given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the operation, the object, the included fields, and the side-effect profile efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter, the description covers the key behavioral and return-content expectations. It lacks explicit output shape or parameter clarification, but the absence of nested objects and the simple classId parameter make it adequately 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 description coverage is 0%, and the description does not explain that classId identifies the class whose skills are read. The parameter name is fairly self-explanatory, but with zero schema coverage the description needed to compensate and did not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Reads') and names the resource: positive and needs-work skills, including points and icons. It clearly distinguishes itself from mutation-oriented siblings like classdojo_apply_skill_sync by explicitly stating it does not change data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for read-only retrieval of skills and says it does not change data, but it does not explicitly state when to prefer this tool over related siblings such as classdojo_preview_skill_sync or classdojo_apply_skill_sync. Usage context is clear but exclusion criteria are only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classdojo_get_ui_stateGet current ClassDojo UI stateARead-only
Reports whether the selected class is ready, adding students, or blocked by a family-invitation, welcome-message, or student-account dialog. It does not dismiss anything.
| Name | Required | Description | Default |
|---|---|---|---|
| classId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation covers the non-mutating nature, and the description reinforces this by saying it 'does not dismiss anything'. It adds specific behavioral details about the kinds of dialogs that might block the UI state, which is useful beyond the annotation. No contradiction 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?
Two sentences with high information density. The primary action is front-loaded, and the second sentence adds a clarifying negative. No redundant phrasing or 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?
The tool has no output schema, so the description should specify what the return value looks like (e.g., a status string or enumeration). It only says 'reports whether...' without detailing the output format. It also does not cover error scenarios or the meaning of the classId. This leaves the agent uncertain about the operation's result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only the name, type, and minLength for classId, with no description. The description does not mention classId at all, so the agent receives no guidance on what the parameter means or how to obtain a valid value. With 0% schema description coverage, the description should compensate but fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Reports' to indicate a read-only status operation on the selected class. It clearly enumerates the possible states (ready, adding students, or blocked) and explicitly states what it does not do (dismiss anything), which differentiates it from other ClassDojo tools that perform mutations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use it: to check if a class is ready or blocked by a dialog. It also states an exclusion: it does not dismiss anything, implying a separate tool for dismissals. However, it does not explicitly name alternative tools or state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classdojo_inspect_workbookInspect workbook roster candidatesARead-only
Scans every worksheet and reports candidate class, seat-number, and student-name column groups without importing or transmitting student data.
| Name | Required | Description | Default |
|---|---|---|---|
| workbookPath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds the extra guarantee about not transmitting student data, which provides reassurance beyond the annotation. It does not detail the exact report format, but the core behavior is transparent enough for an agent to understand the 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?
One concise sentence that front-loads the action and the key safety property with no fluff or repetition. Every word earns its place, and the structure is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter inspection tool, the description covers the action and safety guarantee, but it omits how the reported column groups are returned (list, structured object, etc.) and how they should be used with downstream tools like preview_roster_import. Given no output schema exists, this lack of return-format information is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, workbookPath, is not described beyond its name, and schema description coverage is 0%. The description does not clarify the expected path format, file type, or how the workbook is accessed, forcing the agent to infer from the parameter name alone. This is a significant gap for a tool with a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (scan workbook) and outcome (report candidate class, seat-number, and student-name column groups), clearly distinguishing it from import/apply operations. However, it does not explicitly contrast it with verify_roster_against_workbook, 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?
The phrase 'without importing or transmitting student data' implies this is a safe pre-import inspection step, giving context on when it is appropriate. But it does not name sibling tools like verify or preview, nor does it specify when to choose this over them, so usage guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classdojo_list_classesList ClassDojo classesARead-only
Lists the three-digit classes visible in the locally connected ClassDojo teacher session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description's 'Lists' is fully consistent with a read-only operation — no contradiction. The description adds one useful behavioral detail beyond the annotations: the result scope is tied to a locally connected teacher session. However, it adds nothing about output shape or formatting, so it does only modest work beyond the structured data.
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 sentence with no wasted words. It is front-loaded with the verb and noun ('Lists the classes') and defers modifiers until after the main idea. Every element — the three-digit detail, the session scope — earns its place. This is exemplary economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with readOnlyHint and openWorldHint annotations, the description covers purpose, scope, and safety. The only missing piece is the exact return format (what a 'three-digit class' looks like in the response), but with no output schema and such low complexity, that omission is minor and an agent can reasonably infer the result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, there is nothing for the schema to document and nothing the description must clarify about inputs. The rubric baseline for 0 params is 4, and the description still adds value by specifying the scope of the returned data (classes in the local session). This is appropriate; the dimension is effectively satisfied by the absence of parameters combined with the scope qualifier.
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 verb 'Lists' plus the resource 'classes' makes the core purpose unmistakable, and the 'three-digit' qualifier plus the scope phrase 'visible in the locally connected ClassDojo teacher session' sharpen exactly what is returned. It is clearly distinguishable from siblings like classdojo_get_roster (students in a class) and classdojo_get_ui_state (interface state), though the description never names a 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 description provides no when-to-use vs. alternative guidance and no exclusions. The phrase 'locally connected ClassDojo teacher session' implies a scope condition (use only when a local teacher session is active), but the agent is left to infer when to pick this over the sibling roster/import/verification tools. No alternative is named anywhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classdojo_preview_roster_importPreview a roster importBRead-only
Reads a local XLSX workbook and reports the student-name changes before anything is sent to ClassDojo.
| Name | Required | Description | Default |
|---|---|---|---|
| mappings | Yes | ||
| sheetNames | Yes | ||
| workbookPath | Yes | ||
| studentNameFormat | Yes | ||
| includeStudentDetails | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that nothing is sent, which aligns with read-only behavior and adds a useful safety context. However, it doesn't describe the output format or error behavior, so value beyond annotations is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 19-word sentence that front-loads the core action (reads a local XLSX workbook) and states the result (reports student-name changes before sending). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters including complex mappings and no output schema, the description is insufficient. It doesn't describe what the report contains, how mappings are used, or what the output looks like. An agent would need to inspect the schema and potentially sibling tools to understand how to call 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 description coverage is 0%, and the description does not explain any of the 5 parameters (workbookPath, sheetNames, studentNameFormat, mappings, includeStudentDetails). The only hint is 'local XLSX workbook' relating to workbookPath. Since the schema itself provides only structural info (types, enums, required), the description fails to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a local XLSX workbook and reports student-name changes before sending anything to ClassDojo. This implies a preview action distinct from the sibling apply_roster_import, though it doesn't explicitly name alternatives. The verb+resource is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before anything is sent to ClassDojo' conveys when to use this tool (as a preview preceding apply), but it doesn't explicitly name sibling alternatives or exclusions. Usage context 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.
classdojo_preview_skill_syncPreview exact ClassDojo skill synchronizationARead-only
Compares a preset, source class, or inline rule list with target classes before any skill is changed.
| Name | Required | Description | Default |
|---|---|---|---|
| rulesSource | Yes | ||
| targetClassNames | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is structured. The description reinforces the non-mutating behavior ('before any skill is changed') but doesn't add further behavioral detail such as output format or prerequisites.
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?
One dense, front-loaded sentence with no filler. Every clause earns its place, and the core action and resource are stated immediately.
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 read-only preview tool, the description states the input categories, the action, and the timing relative to mutation. It could mention what the preview returns, but with readOnlyHint and a simple compare action, the core invocation context is present.
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?
With 0% schema description coverage, the description compensates by mapping rulesSource to 'preset, source class, or inline rule list' and targetClassNames to 'target classes.' It doesn't detail the discriminator or ID format, but those are visible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Compares') and names the exact subject matter: a preset, source class, or inline rule list versus target classes. The phrase 'before any skill is changed' and the tool's name clearly separate it from apply/verify siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'before any skill is changed' clause signals this is a pre-check or dry-run, positioning it before classdojo_apply_skill_sync. It doesn't explicitly name alternatives or exclusions, but the intended usage window is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classdojo_verify_roster_against_workbookVerify a ClassDojo roster against an XLSX workbookARead-only
Reads the current ClassDojo roster and a local XLSX workbook, then reports exact count, missing, and unexpected student-name differences without changing ClassDojo data.
| Name | Required | Description | Default |
|---|---|---|---|
| mappings | Yes | ||
| sheetNames | Yes | ||
| workbookPath | Yes | ||
| studentNameFormat | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this by stating 'without changing ClassDojo data.' It also adds behavioral detail beyond the annotations by specifying the exact outputs (count, missing, unexpected differences). This provides useful context about what the tool returns without contradicting 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?
The description is a single, tightly written sentence that front-loads the action and resource, includes the output, and states the non-destructive nature. Every word adds value, and there is no fluff or repetition. It is exemplary in conciseness and structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex with four required parameters, including a mappings array, yet the description provides no guidance on constructing them. There is no output schema, so the agent has no information about the report structure beyond a high-level mention of count and differences. Without parameter semantics or output details, the description is incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for its four required parameters, so the description must compensate. It does not mention any of the parameters (workbookPath, sheetNames, studentNameFormat, mappings) except a generic reference to 'a local XLSX workbook.' There is no explanation of how to specify sheets, name format, or class mappings. This leaves the agent guessing about parameter values, which is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('reads') and resource ('ClassDojo roster' and 'XLSX workbook'), and clearly specifies the output ('exact count, missing, and unexpected student-name differences'). It distinguishes itself from sibling tools like preview_roster_import by emphasizing that it does not change data and is a verification, not an import preview. This is a clear, specific purpose that differentiates it from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for comparing a roster against a workbook but does not explicitly state when to use it versus alternatives such as preview_roster_import or apply_roster_import. There is no mention of conditions, prerequisites, or exclusions. The context is clear from the title and description, but explicit routing to alternative tools is absent, leaving usage guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classdojo_verify_skill_syncVerify ClassDojo skillsARead-only
Compares current target skills with a preset, source class, or inline rule list without changing data.
| Name | Required | Description | Default |
|---|---|---|---|
| rulesSource | Yes | ||
| targetClassNames | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so 'without changing data' adds no new safety information. The description clarifies that verification means comparing current skills against one of three sources, but this largely restates the rulesSource oneOf in the schema; no side effects, return behavior, or error conditions are disclosed.
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 16-word sentence contains the core verb, scope, sources, and a safety guarantee. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description should describe the comparison result format, but it doesn't. It also leaves targetClassNames semantics and the distinctions among verify/preview/apply implicit, making the definition incomplete for a moderately complex nested-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It names the three rulesSource variants but doesn't explain targetClassNames (the classes whose skills are checked) or the inner structure of inline skills (category/name/points/iconId). The oneOf details and targetClassNames pattern are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('compares') and resource ('current target skills') and explicitly names the three comparison sources (preset, source class, inline rule list). This distinguishes it from mutation-oriented siblings like classdojo_apply_skill_sync and roster-focused tools like classdojo_verify_roster_against_workbook.
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 read-only note ('without changing data') implicitly separates it from apply_skill_sync, but the description never names alternatives or states when to prefer verify over preview_skill_sync. Usage context is implied rather than explicit, so an agent must infer the choice from sibling names.
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.
4 tool updates
v0.2.0- Added
classdojo_apply_skill_sync - Added
classdojo_get_skills - Added
classdojo_preview_skill_sync - Added
classdojo_verify_skill_sync
8 tool updates
v0.1.2- First observed
classdojo_apply_roster_import - First observed
classdojo_doctor - First observed
classdojo_get_roster - First observed
classdojo_get_ui_state - First observed
classdojo_inspect_workbook - First observed
classdojo_list_classes - First observed
classdojo_preview_roster_import - First observed
classdojo_verify_roster_against_workbook
TDQS
Scored across 12 tools
Most tools have clear purposes, but several pairs overlap heavily: preview_skill_sync and verify_skill_sync both compare skills against a source without changing data, and verify_roster_against_workbook and preview_roster_import both report workbook-vs-roster differences. The descriptions help, but an agent could easily select the wrong verification/preview tool.
The classdojo_ prefix and snake_case naming are consistent, and most tools follow a clear verb_object pattern (get_roster, list_classes, apply_skill_sync, preview_roster_import). The main deviation is classdojo_doctor, which is vague and does not follow the verb_noun convention used by the rest of the set.
With 12 tools, the server stays within a well-scoped range for its domain. Each tool supports a distinct step in the roster or skill-sync workflow, including inspect, preview, apply, and verify phases, so none feel redundant.
The tool set covers the full roster-import and skill-sync lifecycle: inspect/preview/apply/verify for both workflows, plus connection diagnostics and UI-state checks. Minor gaps exist, such as no way to dismiss or resolve UI blockers and no explicit rollback tool, but these are workable limitations.
Maintenance
Related MCP Connectors
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
Import a volunteer roster and preview shifts. Test-mode until a human enables live SMS.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI models to search, read, and analyze Excel files from your local file system with support for multiple worksheets, text search, and JSON data conversion.4MIT
- AlicenseNot gradedqualityDmaintenanceEnables manipulation of Excel files including creating, reading, writing data, formatting, charts, pivot tables, and worksheet management via natural language.15 npmMIT
- FlicenseBqualityDmaintenanceEnables AI assistants to read, write, format, and analyze Excel files with 34 tools, including real-time editing on macOS with Microsoft Excel.3417-
- AlicenseAqualityDmaintenanceEnables AI assistants to read and write local Excel and CSV files, supporting editing, styling, and image insertion.1512 npmMIT