Skip to main content
Glama
sapn95

ebill-mcp

by sapn95

ebill-mcp

Read your Swiss eBill archive and download the invoice PDFs. Read-only — it cannot approve, release or pay anything.

npm   CI   node   licence


Unofficial, and attached to your bank. eBill is reached only through an authenticated e-banking session, so this server reads through a window you logged into. It is read-only by construction — see What it cannot do — but it is still pointed at a payment system, and it is inherently fragile: the portal is an Angular app that changes without notice. Use it for your own account and respect the provider's terms of service.

An MCP server for the Swiss eBill portal operated by SIX. From any MCP client (Claude Code, Claude Desktop, …) you can list the bills in your archive — biller, amount, due date, delivery date — and download the invoice PDFs.

There is no credential to hold

That is the fact everything else follows from. eBill has no API you can get a key for; the portal is entered by SSO redirect from your bank's e-banking, and the login is second-factor-bound. So a run cannot start without a human.

You log in. The server reads. It opens a visible browser window at your e-banking and hands it to you; it never types into that window. Afterwards it attaches to the same window over the debugging port and reads through the session you established. One login serves many calls — disconnecting a debug client leaves the window standing, which is the whole reason this is usable.

flowchart TD
    C["MCP client"] -->|"stdio JSON-RPC"| S["ebill-mcp"]

    S -->|"ebill_open"| W["a visible browser window<br/>opens at YOUR e-banking"]
    W --> YOU["you log in — second factor,<br/>then open eBill"]
    YOU --> TAB[("the eBill tab<br/>stays open")]

    S -->|"every other tool"| ATT["attach over the debugging port"]
    ATT --> TAB
    TAB -->|"fetch with the browser's<br/>own session cookie"| P[("SIX eBill portal")]

    ATT --> G{"is the path on<br/>the allow-list?"}
    G -->|"no"| NO["refused before it is sent"]
    G -->|"yes — five read paths"| P

    P -.->|"bills, billers, PDFs"| OUT["answers, and files on disk"]

    classDef gate fill:#fff4e5,stroke:#d9822b
    classDef bad fill:#fdecea,stroke:#c0392b
    classDef you fill:#eafaf1,stroke:#27ae60
    class G gate
    class NO bad
    class YOU,W you

No token ever reaches this process. The session lives in the browser and the browser applies it, so there is nothing here to leak — and nothing to store.

Related MCP server: taxme-mcp

What it cannot do

Approving a bill, releasing one for payment, editing an amount, adding a biller subscription and cancelling a standing approval are all one call away in the same API, and one click away in the same page. "We only wrote reads" is a property of today's code, so it is enforced twice:

  1. Every request goes through one function that takes no method and no body. There is no code path in this server that can send anything but a GET.

  2. Every path is matched against an allow-list first. Five patterns, all reads. Nothing that changes state is on it, so reaching one takes editing the source rather than passing an argument.

Both are tested, and the fixture answers 405 to anything but a GET — so the assertion "only reads arrived" cannot pass for the wrong reason.

Prerequisites

  • Node.js ≥ 20.19

  • A Chromium for Playwright, and ideally a real Chrome to log in with

  • Swiss e-banking with eBill enabled

git clone https://github.com/sapn95/ebill-mcp.git
cd ebill-mcp
npm install
npx playwright install chromium

Register in Claude Code

claude mcp add ebill --scope user -- node /absolute/path/to/ebill-mcp/index.js

Set your bank's entry page once, so ebill_open does not have to be told every time — this server does not guess which bank you use:

export EBILL_BANK_URL=https://your-bank.example.com/login

The normal flow

  1. ebill_open — a window opens at your e-banking. You log in and open eBill.

  2. ebill_status — confirms the session is reachable and says how long it has left.

  3. ebill_list_bills, ebill_download_all, … for as long as the session lasts.

  4. When it expires, every tool says so and names the fix: log in again.

Tools

Tool

Arguments

ebill_status

ebill_open

url (optional; defaults to EBILL_BANK_URL)

ebill_settings

ebill_list_bills

status (open | done | all), limit

ebill_get_bill

bill_id

ebill_billers

ebill_download_bill

bill_id, output_path (absolute)

ebill_download_all

output_dir (absolute), status

Environment variables

Variable

Default

Purpose

EBILL_BASE_URL

https://ebill-portal.six-group.com

portal origin

EBILL_CDP

http://localhost:9222

where the logged-in window listens

EBILL_PROFILE

~/.ebill-mcp/profile

browser profile — holds a live banking session

EBILL_BANK_URL

unset

your e-banking entry page for ebill_open

EBILL_BROWSER

chrome

channel or absolute path

EBILL_DEBUG

unset

1 traces every path read, on stderr

A variable that is set, even to the empty string, is authoritative: an empty EBILL_BANK_URL means there is no bank here, not "fall back to the default". Anything else would make "no bank" impossible to express, and would let a test that thought it was isolated open a real login page.

Security: the profile directory holds a live e-banking session. It is a secret, it is git-ignored, and it belongs outside any repository. Delete it when a run is done.

Three things the portal does that cost a day to find out

A 200 is not evidence. The Angular server answers any unknown path under its own prefix with the app shell and a 200 application/json. The four obvious guesses at a PDF endpoint — payments/{id}/receipt, /document, /bill, /pdf — all "work" if you read status codes. None of them exists. Every download here is checked by its first bytes instead.

The PDF is not under /api/. It is /ebill-portal/ui/payment-pdfs/<businessCaseId>/<receiptFileName>, and the filename out of the record is part of the path — URL-encoded, not derivable, not optional. Records without a filename have no document, and are reported as such rather than given a synthesised name.

One status is half an archive. The bills live under two, done and open, and the default view shows one of them. ebill_list_bills reads both unless you narrow it on purpose.

Also worth knowing: businessCaseDate is the date eBill delivered the bill, which is days to weeks away from the date printed on the document. If you are filing these, the printed date is usually the one you want.

Checks

npm run gate      # lint + smoke + hygiene + tests with coverage enforced
npm test          # just the tests
npm run mutate    # mutation-test the lines this branch changed

Runs offline and without a bank: the suites attach to a throwaway Chromium holding a local fixture, so nothing they do can reach a real account.

The fixture is the interesting part. It answers the app shell with a 200 for unknown paths exactly as the portal does — a fixture that returned 404 there would make the guard against it untestable — and it refuses anything that is not a GET, so the test asserting that only reads left this process means something.

Mutation testing

npm run mutate asks a different question: not "do the tests pass" but "would they notice if a guard were removed". StrykerJS deletes one piece of behaviour at a time and reruns the suite; whatever survives is something no assertion is watching. It found eleven real gaps in the sibling pingen-mcp after model review rounds had stopped turning anything up. Here it runs over the lines a branch changed, because this suite launches a real browser and a full pass costs hours.

License

MIT © sapn95 — see LICENSE.

Available Tools

8 tools
ebill_billersB

Billers that have ever sent something to this account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states what the tool returns and does not disclose whether the operation is read-only, the response format, or any pagination/filtering behavior. For a minimal read-only tool this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise phrase, front-loaded with the key noun 'Billers.' It contains no extraneous words and is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (no parameters, no output schema, no annotations), the description sufficiently conveys the core purpose. It does not detail return format, but for a straightforward query tool this is acceptable and not a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so there is no parameter semantics to explain. The baseline for zero parameters is 4, and the description does not need to add anything further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (billers) and a clear selection criterion (ever sent something to this account). It lacks an explicit verb like 'list' or 'retrieve,' but the meaning is unambiguous and it distinguishes itself from siblings like ebill_list_bills, which are about bills rather than billers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives like ebill_status or ebill_list_bills. There are no mentions of prerequisites, intended use cases, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ebill_download_allA

Download every bill that has a document into output_dir, named _.pdf. Existing files are skipped, never overwritten.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
output_dirYesabsolute directory to write into

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and discloses key behaviors: filters to bills with documents, uses an output directory, names files deterministically, and skips existing files without overwriting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the main action and include relevant details (naming, skip behavior) without any filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core behavior but lacks details on return values and does not clarify what the 'status' parameter controls, leaving some ambiguity for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description clarifies the output_dir usage and adds the naming convention, but it does not explain the 'status' parameter (open/done/all). With 50% schema coverage, it only partially compensates for the missing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Download every bill that has a document into output_dir' with a specific naming convention ('<delivered>_<id>.pdf'), distinguishing it from sibling tools like ebill_download_bill that target a single bill.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies bulk usage ('every bill') but does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ebill_download_billA

Download one bill PDF to an absolute output_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idYes
output_pathYesabsolute path to write to

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavior. It clearly states the primary action (downloading a PDF to a path), but does not mention file overwrite behavior, whether directories are created, or any side effects. This is adequate for a simple operation but lacks deeper context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no unnecessary words. It front-loads the core action and destination, making it immediately scannable and easy to understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter download tool, the description is largely complete. It lacks context about what happens after the download (e.g., return value) and does not mention edge cases like overwriting, but given the lack of an output schema and the simplicity of the operation, it covers most essentials.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: output_path has a description ('absolute path to write to'), while bill_id has none. The description reinforces the output_path purpose but adds no detail about bill_id format or identifier semantics. It provides minimal added meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Download one bill PDF to an absolute output_path' uses a specific verb and resource, stating exactly what the tool does. It distinguishes from siblings like 'ebill_download_all' by emphasizing 'one' bill and from 'ebill_get_bill' by indicating a PDF file download to a path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as 'ebill_get_bill' for viewing or 'ebill_download_all' for bulk downloads. There is no explicit mention of exclusions or preferred use cases, leaving the agent to infer from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ebill_get_billB

One bill by id, with its biller, amount, due date and whether it has a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations provided, so the description carries the full burden. It discloses the return fields but says nothing about side effects, errors, authentication, or behavior when the ID is not found. Even for a read operation, this is minimal and lacks safety/error context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence of 18 words. It states the primary function immediately and includes no fluff or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id tool with one parameter and no output schema, the description is reasonably complete: it specifies the input and the key fields in the response. However, it omits details like not-found behavior, any required permissions, and how to access the associated document (likely via ebill_download_bill), so it is not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter (bill_id) with no description (coverage 0%). The tool description clarifies that this ID identifies the bill to fetch, adding some meaning beyond the raw property name. However, it does not specify format, constraints, or any additional context about the ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves a single bill by ID, using an implicit 'get' verb and naming the resource ('bill'). It mentions the specific fields returned (biller, amount, due date, document presence), which distinguishes it from siblings like ebill_list_bills (multiple bills) and ebill_download_bill (document retrieval).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention ebill_list_bills for multiple bills or ebill_download_bill for documents, leaving usage purely implied by the phrase 'One bill by id'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ebill_list_billsA

List bills from the archive, newest first. Both open and settled unless you narrow it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNostop after this many
statusNodefault all — one status alone is half an archive

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that results are from the archive, sorted newest first, and that the default includes all statuses. While it does not mention side effects or error conditions, 'list' makes the read-only nature evident, and the stated behavior adds useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff. It communicates the core purpose, ordering, and status default efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with two optional parameters and no output schema, the description provides sufficient context: archive scope, ordering, and default status coverage. It could be more complete by mentioning what fields are returned, but that is not essential for basic selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The tool description's 'Both open and settled unless you narrow it' reinforces the status parameter's semantics, but it adds little beyond what the schema already says about limit and status defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('List bills from the archive'), states the ordering ('newest first'), and clarifies the status default ('Both open and settled unless you narrow it'). This clearly distinguishes it from siblings like ebill_open or ebill_get_bill by specifying it covers the full archive listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives implicit usage guidance by stating the default behavior covers both open and settled bills, suggesting this is the general-purpose archive listing tool. It does not explicitly name alternatives or exclusions, but the context is clear enough for basic selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ebill_openA

Open a visible browser window at your e-banking so YOU can log in. Returns as soon as the window is reachable; it stays open for later calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoe-banking entry page (defaults to EBILL_BANK_URL)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description discloses key traits: window is visible (not headless), user must log in manually, the tool returns when the window is reachable (not after login), and the window persists for later calls. This covers side effects and timing well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the action and purpose. No redundant words, every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-action tool with no output schema, the description explains purpose, user involvement, return timing, and persistence. It is sufficient for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter (url) is fully described in the schema with its default. The description adds nothing beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool opens a visible browser window at the e-banking URL for manual login. This distinguishes it from sibling bill-related tools, which perform data operations rather than user interaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use before other tools that require an authenticated session via 'it stays open for later calls.' It does not explicitly name alternatives or exclusions, but the context is clear that this is for initiating login.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ebill_settingsA

Report the configuration in force — portal origin, CDP endpoint, profile path. Side-effect free.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states 'Side-effect free', which is a valuable behavioral promise given no annotations are provided. It also discloses the specific items reported (portal origin, CDP endpoint, profile path). It does not discuss permissions, error behavior, or response structure, but for a simple read-only tool, this is reasonable transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no unnecessary words. It states the action ('Report'), the object ('configuration in force'), and the key detail ('Side-effect free'). This is ideal for quick consumption by an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no output schema, and no annotations, the description carries the full burden. It lists the three components of the configuration it reports, which conveys what the response will contain. The lack of explicit return format is a minor gap, but the tool is simple enough that this is adequate. A higher score would require mention of response structure or error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description has no need to explain them. The baseline for no-parameter tools is 4, and the description adds value by listing the content of the report, which indirectly clarifies what the tool does with its (nonexistent) inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Report' and names the resource 'configuration in force', with concrete examples (portal origin, CDP endpoint, profile path). This clearly distinguishes it from siblings like ebill_status or ebill_list_bills, which deal with bill operations rather than configuration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the tool name and description: it's for reporting configuration settings. However, there is no explicit 'when to use' or comparison to alternatives, nor any exclusions. The description does not mention sibling tools, so guidance is only inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ebill_statusB

Whether a logged-in eBill window is reachable, and how long the session has left.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It mentions a 'logged-in eBill window' implying an existing session, but doesn't disclose side effects, what 'reachable' means, error conditions, or whether the result includes additional data. The terseness limits transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the core function. It has no filler words, and each element (reachability, session time left) is relevant and contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool, the description covers the primary output concept (reachability and remaining session time). However, it lacks context about what 'reachable' means, the expected return format, and any system prerequisites. It's minimally adequate but leaves some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so there are no parameter semantics to explain. Baseline of 4 applies due to the zero-parameter case, and the description doesn't need to add parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool assesses 'whether a logged-in eBill window is reachable, and how long the session has left.' This identifies a status-checking function distinct from siblings like ebill_open or ebill_get_bill. Although it lacks an explicit verb, the implication of 'whether' conveys a checking/reporting operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool compared to siblings such as ebill_open or ebill_list_bills. It doesn't mention prerequisites, ideal contexts, or any exclusions, leaving the agent without direction on when it is appropriate.

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.

  1. 8 tool updatesv0.1.0
    • First observedebill_billers
    • First observedebill_download_all
    • First observedebill_download_bill
    • First observedebill_get_bill
    • First observedebill_list_bills
    • First observedebill_open
    • First observedebill_settings
    • First observedebill_status

TDQS

A3.8/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a distinct purpose: session status, login window, settings, bill listing, single bill retrieval, biller listing, single download, and bulk download. There is no overlap or ambiguity between them.

Naming Consistency3/5

All tools share the 'ebill_' prefix, but naming conventions are mixed. Some verbs (open), some nouns (status, settings, billers), and some verb+noun (list_bills, get_bill, download_bill). This is readable but not strictly consistent.

Tool Count5/5

8 tools is a well-scoped set for an e-bill retrieval and download service, comfortably within the ideal 3-15 range. Each tool serves a clear, necessary function.

Completeness4/5

The surface covers session management, configuration, bill listing, retrieval, and downloads (single and all). Minor gaps like a logout or payment operation could be argued, but they are not core to the stated purpose, so the workflow is largely complete.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server for FinTS/HBCI banking; enables account information retrieval such as balances and transactions via PIN-TAN.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server providing access to the easybill REST API for managing invoices, customers, articles, payments, projects, and time tracking, with read-only mode by default.
    16
    28
    19
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Read-only MCP server that exposes SAP Business One Service Layer and Cisco CCWR contract search APIs for querying sales orders, delivery notes, business partners, and service contracts, without modifying data.
    MIT