ibabs-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ibabs-mcplist my upcoming council meetings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ibabs-mcp
A local Model Context Protocol (MCP) server for iBabs. It logs into an iBabs site with your credentials, caches the portal session, and exposes tools to list meetings, read agenda items, and download attachments.
Install
Published on npm as ibabs-mcp:
npx -y ibabs-mcpRequires Node.js 20 or newer.
Related MCP server: tender-documents-mcp
Configuration
All configuration comes from environment variables. Set them in the MCP client config (not in a file the server reads), or export them in your shell.
Variable | Required | Meaning |
| yes | Tenant/site name, e.g. |
| yes | Login e-mail address. |
| yes* | Login password. |
| yes* | A pre-existing |
| no | Where the session is cached. Defaults to the OS cache dir. |
| no | Where attachments are written. Defaults to |
| no | Defaults to |
| no | Defaults to |
| no | Defaults to |
| no | OAuth client id. Defaults to the public iBabs portal client. |
| no | OAuth redirect. Defaults to |
* Provide either IBABS_PASSWORD or IBABS_SESSION_COOKIE.
See .env.example for a template.
Use with Hermes Agent
Hermes reads mcp_servers from ~/.hermes/config.yaml and passes only the env
you list explicitly. Keep the secret in ~/.hermes/.env and reference it:
mcp_servers:
ibabs:
command: "npx"
args: ["-y", "ibabs-mcp"]
env:
IBABS_SITE: "example-site"
IBABS_EMAIL: "${IBABS_EMAIL}"
IBABS_PASSWORD: "${IBABS_PASSWORD}"Then ~/.hermes/.env:
IBABS_EMAIL=you@example.com
IBABS_PASSWORD=...Restart Hermes (or run /reload-mcp). Tools appear as mcp_ibabs_*.
Tools
list_meetings— list meetings in a date range (defaults to the next 30 days), optionally restricted to council/committee meetings.get_meeting— one meeting with its agenda items and attachments.get_attachment— download an attachment bydocumentId, returning a local path and, for PDFs/plain text, the extracted text.
Other MCP clients
Any stdio MCP client works — point it at npx -y ibabs-mcp with the env above.
For Claude Desktop / Cursor:
{
"mcpServers": {
"ibabs": {
"command": "npx",
"args": ["-y", "ibabs-mcp"],
"env": {
"IBABS_SITE": "example-site",
"IBABS_EMAIL": "you@example.com",
"IBABS_PASSWORD": "..."
}
}
}
}Development
npm install
npm run dev # run from source with tsx
npm run test # vitest
npm run build # compile to dist/Releasing
Publishing uses npm trusted publishing (OIDC) — no long-lived token.
Bump the version in
package.jsonand commit.Tag and push:
git tag v0.1.0 && git push origin v0.1.0.The
PublishGitHub Action builds, tests, and runsnpm publishwith provenance.
The npm trusted publisher must be configured for repository
anned20/ibabs-mcp, workflow publish.yml.
License
Available Tools
3 toolsget_attachmentDownload an iBabs attachmentB
Download an attachment by documentId and return its name, mime type and local path. PDFs and text files are also returned as extracted text.
| Name | Required | Description | Default |
|---|---|---|---|
| documentId | Yes | The documentId from a meeting's attachments. | |
| extractText | No | Whether to extract text from PDFs/plain text. Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the return shape (name, mime type, local path) and that PDFs/text come back as extracted text, which is real behavioral detail. However, it omits side-effect-relevant facts such as whether a file is written to disk, permissions required, or overwrite/error behavior for a tool whose name implies downloading.
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 lean sentences, front-loaded with the action and input, followed immediately by the return contract. Every clause earns its place and nothing is padded.
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?
No output schema exists, so the description appropriately summarizes returns (name, mime type, local path, extracted text) and schema coverage handles the two params. It is nearly complete for a simple download tool, missing only operational context like where the file lands and failure modes.
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 (documentId, extractText) are already documented in the schema, and the baseline is 3. The description references documentId but adds no syntax, format, or defaulting detail beyond what the schema already states.
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 pairs a specific verb ('Download') with a specific resource ('an attachment'), identifies the key input (documentId), and summarizes the return payload (name, mime type, local path). It is clearly distinct from list_meetings and get_meeting by resource, though it never explicitly names those siblings or contrasts itself with them.
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 when-to-use guidance, no prerequisites, and no mention of alternatives. The schema note that documentId comes 'from a meeting's attachments' hints at context, but the description itself gives the agent no routing or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meetingGet an iBabs meetingA
Get one meeting by id, including its agenda items with their number, title, confidentiality flag and attachments with name and size. Also includes meeting-level attachments that are not tied to an agenda item.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The meeting id returned by list_meetings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does a good job disclosing the return shape, enumerating agenda items (number, title, confidentiality flag, attachments) and meeting-level attachments, which partially compensates for the missing output schema. It stops short of stating this is a read operation, auth requirements, or error behavior for an unknown id.
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 tightly written sentences, front-loaded with the core action ('Get one meeting by id'). The second sentence adds genuinely useful detail about meeting-level attachments rather than repeating the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description supplies the return structure an agent needs to interpret results, including the two attachment scopes. It omits error handling and permissions, but nothing essential to invoking the 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?
There is a single parameter with 100% schema description coverage; the schema already explains that the id is returned by list_meetings. The description adds no syntax, format, or edge-case meaning beyond the schema, 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 ('Get') and resource ('one meeting by id') and immediately differentiates itself from the list_meetings sibling by stressing a single meeting retrieved by id. The description of the returned content (agenda items, attachments) further pins down what the resource contains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: the tool is for retrieving a specific meeting once you have an id (schema notes the id comes from list_meetings). There is no explicit when-to-use vs when-not, nor a pointer to alternatives like list_meetings or get_attachment for related needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meetingsList iBabs meetingsA
List your iBabs meetings in a date range, in chronological order. Defaults to the next 30 days. Use type 'council' to only get council/committee meetings.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of the range as an ISO date/time. Defaults to 30 days from now. | |
| from | No | Start of the range as an ISO date/time. Defaults to now. | |
| type | No | Restrict to council/committee meetings ('council') or everything else ('other'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the default window (next 30 days) and result ordering (chronological), which are real behavioral facts. However, it says nothing about pagination, result caps, or permission/auth requirements for a listing endpoint, leaving meaningful gaps.
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 scope ('meetings in a date range') and the default window front-loaded before the optional filter tip. 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?
For a zero-required-parameter list tool with full schema coverage and no output schema, the description covers scope, defaults, and ordering adequately. It is only slightly short on pagination/volume behavior, which an agent might still need.
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 already documents 'from', 'to', and the 'council'/'other' enum, making the baseline 3 correct. The description's council/committee note largely restates the enum semantics rather than adding format or edge-case 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 ('List your iBabs meetings') plus its scoping dimension (date range) and ordering guarantee. It does not name a sibling or explicitly contrast itself with get_meeting, so it stops short of the 5 benchmark for 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 sentence 'Use type 'council' to only get council/committee meetings' gives concrete guidance for the enum parameter, but there is no when-to-use-this-vs-get_meeting guidance and no stated prerequisites or exclusions. Usage is implied rather than prescribed.
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.
3 tool updates
v0.2.0- First observed
get_attachment - First observed
get_meeting - First observed
list_meetings
TDQS
Scored across 3 tools
list_meetings lists meetings, get_meeting retrieves one meeting's full details, and get_attachment downloads a specific attachment. Each tool targets a distinct resource and action with no overlap.
All three tools follow a consistent snake_case verb_noun pattern: list_meetings, get_meeting, get_attachment. The convention is predictable and readable.
Three tools is minimal but well-suited for a read-only API focused on meetings and attachments. Each tool earns its place, though the surface is slightly thin for the broader domain.
The set covers listing meetings, retrieving a meeting with agenda items and attachments, and downloading attachments. Minor gaps include no search or filtering beyond date and type, but core read-only workflows are covered.
Related MCP Connectors
Extract PDFs into structured tables, query records, and configure document inbox workflows.
1Search, read, and automate TextMine documents, records, workflows, integrations, and agent tasks.
Extract text, pages and metadata from PDFs in bulk, with OCR for scanned files.
Extract, search and tag any document: invoices, receipts, contracts, templates. OAuth or API key.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables listing and downloading scanned letters from the Swiss ePost digital letterbox through browser automation, requiring manual SwissID login for session establishment.2116 npm1MIT
- AlicenseNot gradedqualityCmaintenanceSafely downloads and extracts public tender documents from PDFs, Office files, and ZIP archives into text with structured signals, while also supporting document comparison and base64 extraction.MIT
- FlicenseNot gradedqualityCmaintenanceEnables extracting text, structure, and image data from unstructured documents (PDF, DOCX, PPTX, SVG, PNG, JPG) and scanning folder trees.-
- AlicenseAqualityBmaintenanceEnables agents to access TU Delft Brightspace courses, materials, assignments, grades, and more through authenticated local sessions.655MIT