# Somtoday (unofficial) (npm · somtoday-mcp)

Unofficial read-only Somtoday parent portal: timetable, homework, grades, assignments, messages

- Trust score: 81/100 (high trust)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `somtoday-mcp`: 81/100 (this document), [markdown](https://verifymcp.io/servers/barzoj-somtoday-mcp/somtoday-mcp.md), [page](https://verifymcp.io/servers/barzoj-somtoday-mcp/somtoday-mcp)

## Channel facts

- Registry: `npm`
- Package: `somtoday-mcp`
- Version: `0.3.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 30 of 95 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to barzoj/somtoday-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 10 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 76/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2623 tokens (~104/item across 25 items; 25 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 25 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the Somtoday (unofficial) MCP server?

Somtoday (unofficial) runs locally as an npm package, launched with npx -y somtoday-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add barzoj-somtoday-mcp -- npx -y somtoday-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "barzoj-somtoday-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "somtoday-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "barzoj-somtoday-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "somtoday-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add barzoj-somtoday-mcp -- npx -y somtoday-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "barzoj-somtoday-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "somtoday-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add barzoj-somtoday-mcp --command npx --arg -y --arg somtoday-mcp
```

### Hermes

```yaml
mcp_servers:
  barzoj-somtoday-mcp:
    command: "npx"
    args: ["-y", "somtoday-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "barzoj-somtoday-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "somtoday-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add barzoj-somtoday-mcp -t stdio -c npx -a -y somtoday-mcp
```

### Other

```json
{
  "mcpServers": {
    "barzoj-somtoday-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "somtoday-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-24 (score 81, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-23 (score 66)

First indexed and scored.

## MCP tools (25)

### `whoami` (~46 tokens)

Who am I

Start here: the school label, the numeric leerling ids to pass as leerlingId to other tools, and which parent-portal sections are visible. Use children for full profiles. No tokens.

### `lessons` (~100 tokens)

Lessons

Timetable for one Amsterdam date, plus whether that date is a holiday. Each lesson has type (ROOSTERTOETS or EXAMEN marks a test in the timetable) and uitgevallen=true when cancelled. Homework and the test topic per lesson are not here: call homework for the same date.

Input parameters:

- `date` (string): Amsterdam calendar date. Defaults to tomorrow.
- `leerlingId`: Numeric leerling id. Required when more than one child is linked.

### `schedule` (~180 tokens)

Schedule

Timetable for a date range, per day: lessons, tests and other appointments with time, lesson hour, subject, room, teachers, type (e.g. ROOSTERTOETS, EXAMEN, OUDERAVOND), lesson notes, changes and cancellations (wijziging, uitgevallen=true, meldingen with real warnings only; the routine 'Inschrijving in orde.' notice is dropped), attachments, and holidays. Every day has items (empty array on a free day). Defaults to today plus 6 days; at most 42 days.

Input parameters:

- `date` (string): One Amsterdam calendar date.
- `from` (string): First date of the range. Defaults to today.
- `leerlingId`: Numeric leerling id. Required when more than one child is linked.
- `to` (string): Last date of the range (inclusive).

### `homework` (~195 tokens)

Homework / study planner

What to do and learn on which day: every studiewijzer item (lesson, day and week items) for a date range, grouped by day, with description, learning goals, time estimate, test type, teacher note, attachments (file links), external links, hand-in window and status, and the done tick. Also lists hand-in deadlines per day. Defaults to today plus 6 days; at most 42 days. Every item lists bijlagen (fileUrl, readable with download_attachment) and externeMaterialen; empty means the teacher attached nothing (lesmateriaal=true is only a flag, there is no separate material call).

Input parameters:

- `date` (string): One Amsterdam calendar date.
- `from` (string): First date of the range. Defaults to today.
- `leerlingId`: Numeric leerling id. Required when more than one child is linked.
- `to` (string): Last date of the range (inclusive).

### `assignments` (~304 tokens)

Assignments (hand-ins)

All hand-in assignments with their window, status (AANKOMEND, IN_TE_LEVEREN, IN_AFWACHTING, AKKOORD), teLaat (always a boolean: true only for an open hand-in past its deadline), description, attachments and links. status=open keeps upcoming and to-do ones, and by default hides past-due items where no digital hand-in is expected (inleveringenVerwacht 0, e.g. on paper; count in verborgenZonderInlevering); includeNoHandIn=true keeps them. Near-duplicates (same subject, topic, window and status, e.g. published to two groups) are merged by default, with the other ids in duplicaatToekenningIds; dedupe=false lists them separately. Use toekenningId with assignment_detail. Every item lists bijlagen (fileUrl, readable with download_attachment) and externeMaterialen; empty means the teacher attached nothing (lesmateriaal=true is only a flag, there is no separate material call).

Input parameters:

- `dedupe` (boolean): Merge near-duplicate assignments (same subject, topic, window, status). Default true.
- `includeNoHandIn` (boolean): With status=open: also show past-due items without a digital hand-in (inleveringenVerwacht 0). Default false.
- `leerlingId`: Numeric leerling id. Required when more than one child is linked.
- `status` (string): Default all.

### `assignment_detail` (~102 tokens)

Assignment detail

One hand-in assignment as the parent portal shows it: instruction text, learning goals, files (fileUrl) and links, hand-in window, status, late flag and group. Submitted files and teacher reactions are only visible to the student in Somtoday, so they are not returned.

Input parameters:

- `leerlingId`: Numeric leerling id. Required when more than one child is linked.
- `toekenningId` (required): toekenningId from assignments (number or digit string).

### `study_material` (~165 tokens)

Study material

Studiemateriaal per subject: lesson material from the study planner (by date), year attachments by folder (file links), external links, and methods/publisher links (book fund). Without arguments: the subjects that have material, plus personal learning products when the school allows it. vak = name, abbreviation or uuid; all=true fetches every subject. Every item lists bijlagen (fileUrl, readable with download_attachment) and externeMaterialen; empty means the teacher attached nothing (lesmateriaal=true is only a flag, there is no separate material call).

Input parameters:

- `all` (boolean): Fetch material for every subject.
- `leerlingId`: Numeric leerling id. Required when more than one child is linked.
- `vak` (string|number): Subject name, abbreviation or uuid.

### `grades` (~89 tokens)

Grades

Quick grade summary: the newest progress-dossier results (capped at 30) plus the average per subject. Use grades_latest for more or exam (SE) results, grades_overview for a whole school year, subject_grades for one subject in depth, and exam_grades for the PTA/SE dossier.

Input parameters:

- `leerlingId`: Numeric leerling id. Required when more than one child is linked.

### `grades_latest` (~154 tokens)

Latest grades

Newest results first, with subject, column, description, grade, weight, test type, period, date, remarks and resit info. limit defaults to 50 (max 1000, paged). dossier=examen gives school-exam (SE) results. Also the next publication moment when the school uses one. Use this for "what grades came in recently"; use grades for a short summary with averages, subject_grades for all columns of one subject.

Input parameters:

- `dossier` (string): Default voortgang.
- `leerlingId`: Numeric leerling id. Required when more than one child is linked.
- `limit` (integer): Number of newest results to return. Default 50, max 1000.

### `grades_overview` (~124 tokens)

Grade overview

The full grade overview (cijferoverzicht) for a school year: every subject with every result per period, report grades, weights and remarks. Defaults to the current placement; schooljaar like 2025/2026 picks another year. Use this for a whole-year report view or earlier years; use subject_grades for one subject, grades_latest for recent results.

Input parameters:

- `leerlingId`: Numeric leerling id. Required when more than one child is linked.
- `schooljaar` (string): School year name, e.g. "2025/2026".

### `subject_grades` (~147 tokens)

Subject grades

Everything for one subject: every result column (tests, assignments, period and report averages, SE averages) with weights and remarks, column definitions (also not-yet-graded ones), and the parts of composite tests. Both progress and exam dossier unless dossier is set. Without vak: the list of subjects. Use this to drill into one subject; use grades_overview for all subjects at once.

Input parameters:

- `dossier` (string): voortgang = progress dossier, examen = school-exam (SE) dossier. Default both.
- `leerlingId`: Numeric leerling id. Required when more than one child is linked.
- `vak` (string|number): Subject name, abbreviation or uuid.

### `exam_grades` (~111 tokens)

Exam dossier (SE)

School-exam dossier (PTA/SE) overview: per subject the SE average, every SE result, tests still to come, and test-type averages. Says so when the child has no exam dossier yet. Use this for exam-year progress and upcoming SE tests; use grades_latest with dossier=examen for only the newest SE results.

Input parameters:

- `examenjaar` (integer): Exam year; defaults to the latest.
- `leerlingId`: Numeric leerling id. Required when more than one child is linked.

### `absence` (~89 tokens)

Absence and registrations

Registrations for the school year (or current grading period): unexcused and excused absence, late, removed from class, homework not done, materials missing — counts and every entry with date, lesson and remark — plus active measures (e.g. detention).

Input parameters:

- `leerlingId`: Numeric leerling id. Required when more than one child is linked.
- `periode` (string): Default SCHOOLJAAR.

### `messages` (~143 tokens)

Messages

Somtoday messages (berichten), read-only: newest conversations with subject, sender, date, unread flag and a preview; filter with zoek or ongelezen. Pass conversatieId for the full thread (text, sender, recipients, attachments). Never marks anything as read. Use this for personal messages from teachers and the school; school-wide news is in news, Somtoday-wide notices in announcements.

Input parameters:

- `conversatieId`: Conversation id from a previous messages call; returns that full thread.
- `limit` (integer): Default 25.
- `ongelezen` (boolean): Only unread conversations.
- `zoek` (string): Search in subject, sender and preview.

### `news` (~59 tokens)

School news

News items the school publishes to all parents (nieuwsberichten), newest first, as text, plus the unread count. Use messages for personal conversations and announcements for Somtoday-wide notices from the platform itself.

Input parameters:

- `limit` (integer): Default 25.

### `announcements` (~47 tokens)

Announcements

Somtoday-wide announcements (landelijke mededelingen) from the platform itself, such as maintenance notices, with their publication window. Not school news (use news) or personal messages (use messages).

### `children` (~54 tokens)

Children

Linked children with profile (name, student number, class), school data (school, location, mentor(s), year, programme), current placement, and which portal sections the school shows. Use whoami when you only need leerling ids.

### `school_info` (~60 tokens)

School information

School contact data per child and the school's published information pages. Pass paginaId for one page with its topics and documents. Use teachers for staff and children for mentors.

Input parameters:

- `paginaId`: Information page id from the page list of a previous school_info call.

### `teachers` (~42 tokens)

Teachers

Teachers and other staff you can message in Somtoday, with the subjects they teach your child. Use children for the mentor(s) and school_info for general school contact data.

### `signing_requests` (~59 tokens)

Signing requests

Digital signing requests (ondertekenverzoeken) waiting for you or done. Each item has document {tool:'signing_document', id, available}: pass id to signing_document to read the (signed) PDF. Read-only; nothing is signed.

### `signing_document` (~94 tokens)

Signing document

Read the document (PDF) of one signing request, as the portal's download button does: pass document.id from signing_requests. Returns extracted text (max 10 MB). The document needs your login, so it is not a fileUrl for download_attachment. Usually available once signed; not for requests still to sign, withdrawn or expired.

Input parameters:

- `id` (string|number, required): Signing request id (document.id from signing_requests).

### `parent_evening` (~69 tokens)

Parent evening

Parent-evening (ouderavond) details: invitation, time slots and chosen teachers. Without id, finds invitations linked in your messages. Read-only; nothing is booked.

Input parameters:

- `id` (string|number): Parent-evening id from a previous call or invitation; omit to find invitations in messages.

### `consents` (~50 tokens)

Consents

Consents (toestemmingen) as set in the portal: each consent item (e.g. use of photos) with the answer recorded in the portal. Read-only; answers cannot be changed here.

### `download_attachment` (~73 tokens)

Download attachment

Read an attachment (fileUrl from homework, assignments, study material or messages). Only https Somtoday file hosts; max 10 MB; returns extracted text for PDF/text/HTML/CSV/JSON, metadata otherwise.

Input parameters:

- `url` (string, required): fileUrl of an attachment from homework, assignments, study_material or messages.

### `auth_status` (~67 tokens)

Auth status

Whether a Somtoday session is stored, where (keychain or file), and the outcome of the last token renewal. Never returns tokens. Set check=true to renew the token and call the API once.

Input parameters:

- `check` (boolean): Renew the access token and call GET /account/me once.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/barzoj-somtoday-mcp/somtoday-mcp#diagnostics

## Score history

- 2026-11-05: 81
- 2026-11-04: 81
- 2026-11-03: 81
- 2026-11-02: 81
- 2026-11-01: 81
- 2026-10-31: 81
- 2026-10-30: 81
- 2026-10-29: 81
- 2026-10-28: 81
- 2026-10-27: 81
- 2026-10-26: 81
- 2026-10-25: 81
- 2026-10-24: 81
- 2026-10-23: 66

## Common questions

### What is the Somtoday (unofficial) MCP server?

Somtoday (unofficial) is an MCP server listed in the public MCP registry as io.github.barzoj/somtoday-mcp. Unofficial read-only Somtoday parent portal: timetable, homework, grades, assignments, messages. This page covers its npm package (somtoday-mcp).

### Is the Somtoday (unofficial) MCP server safe to use?

Somtoday (unofficial) scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Somtoday (unofficial) MCP server expose?

Somtoday (unofficial) exposes 25 tools: whoami, lessons, schedule, homework, assignments, and 20 more. Their descriptions and schemas cost roughly 2,623 tokens of context every time the server is loaded.

### Is the Somtoday (unofficial) MCP server still maintained?

Somtoday (unofficial) is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Somtoday (unofficial) MCP server under?

Somtoday (unofficial) declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/somtoday-mcp
- Socket report: https://socket.dev/npm/package/somtoday-mcp
- Repository: https://github.com/barzoj/somtoday-mcp
- Changelog RSS feed: https://verifymcp.io/servers/barzoj-somtoday-mcp/somtoday-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/barzoj-somtoday-mcp/somtoday-mcp.json
- HTML version of this page: https://verifymcp.io/servers/barzoj-somtoday-mcp/somtoday-mcp
