Skip to main content
Glama
borgels

MCP Server for Visma Intempus

by borgels

mcp-server-intempus

MCP server for Visma Intempus — time registration, approval, balances (saldi), cases, employees and planning — with three profiles and per-user scoping.

Profiles

One image, selected by INTEMPUS_PROFILE. Each profile runs on its own hostname behind its own Entra security group (see Deployment).

  • employee — self-service for full- and part-time employees, hard-scoped to the requesting user: intempus_get_my_profile, intempus_list_my_work_reports, intempus_register_time, intempus_update_my_work_report / intempus_delete_my_work_report (only while neither approved nor locked), intempus_get_my_balances, intempus_get_my_planning, plus intempus_list_cases, intempus_list_work_types (own work model only), intempus_whoami, intempus_search_capabilities.

  • approver — the employee tools plus a read-only team view: intempus_list_team, intempus_list_team_work_reports (e.g. what awaits approval), intempus_get_team_balances, intempus_get_team_planning. Scope = the employees, departments and cases the user is responsible for in Intempus (responsible_for_employee / _department / _case). Approving happens in Intempus itself — see below.

  • admin — company-wide: employees (intempus_manage_employee create/update/offboard), contracts, login access, approvers and responsibilities (which is what scopes the approver endpoint), time for anyone, cases, customers, balances, schedules, planned work, reference data, allowlisted generic reads (intempus_get_resource), and the two-step intempus_prepare_admin_change → intempus_commit_prepared_operation for deletes and period locks (contract locked_date).

Related MCP server: HR System MCP Server

Guarantees

  • Identity fails closed. The gateway-verified UPN (X-MCP-User, honored when INTEMPUS_TRUST_FORWARDED_USER=true) must resolve to exactly one Intempus employee — by INTEMPUS_IDENTITY_MAP, then Intempus username, then work email, case-insensitive. The private personal_email is never used. Employee and approver tools never accept a foreign employee id as "me"; reports of others read as "not found".

  • Approvers stay in scope. A user without an approver level in Intempus gets nothing on the approver endpoint, and one with a level but no assignments sees nobody (unless INTEMPUS_APPROVER_UNASSIGNED_SCOPE=all).

  • Registrations are checked before they are sent against the rules Intempus enforces: a contract covering the date, outside the contract's locked period, a work type from the contract's work model, start/end times for interval work types, a case for project work, an open case. creation_id (UUID v5 of user + employee + idempotencyKey) makes retries safe — verified live: a retry returns the same report.

  • Irreversible admin changes are two-step: the prepare result is an HMAC-signed preview naming every affected record; commit accepts only an unaltered operation signed by this server, within 15 minutes, by the user who prepared it, whose steps still pass the allowlist. The gateway can gate the commit tool with a separate duty group.

  • Writes need INTEMPUS_ENABLE_WRITES=true — checked in the policy and again in every write path.

  • Attribution. The API key belongs to one Intempus user, so Intempus' own history shows that user for every change. The JSONL audit (INTEMPUS_AUDIT_LOG) records the Entra user, profile, tool and a hash of the arguments (plus the operation hash on commits); requests without X-MCP-User are refused when trust is enabled.

  • No credentials in tool arguments or results: generated passwords are never echoed, password/PIN fields are stripped from raw reads, api_key/outlook_credential are not readable.

Not possible via Intempus' public API

Verified live on 2026-09-29 (details in docs/api-notes.md):

  • Approving time. approved is read-only, and approved_by_initial / approved_by_final can be set (to a user profile) without the report becoming approved. Approval stays in Intempus' web/approval app; the approver endpoint shows what is waiting. Intempus' own MCP server (mcp.intempus.dk, needs an X-Security-Key from Intempus) advertises bulk approval — the way to get approval into Claude, if wanted.

  • Locking work reports (work_report/bulk/) needs Intempus' "work report state" feature, which ONE's account does not have (401 "…only be updated if the feature is enabled"). The prepare kind lock_work_reports works once Intempus enables it; period locks via the contract's locked_date work today.

  • Deleting employees. Intempus refuses (409) while a user profile exists, every employee gets one, and user profiles cannot be deleted. Employees are removed by offboarding: open contracts end on the last day and backend/approval logins are revoked.

Intempus facts this server relies on

Verified against a production account on 2026-09-29; details in docs/api-notes.md.

  • Auth Authorization: ApiKey <username>:<key>; the username is case-sensitive.

  • employee cannot be filtered on email, and username has no case-insensitive filter, so identity is matched in memory (cached 60 s).

  • explored_employee_balance and schedule answer HTTP 500 to cursor pagination; the client falls back to offset paging.

  • Relations are URIs in lists but embedded objects in some detail responses (e.g. work_type.work_model); both are handled.

  • Holiday balances accrue at month end: a balance "as of today" does not include this month's accrual yet.

  • Rate limit is 500 requests/minute per Intempus user, shared with every integration using the same key (e.g. bpc).

Relation to bpc (projekt.onedanmark.dk)

bpc keeps its own direct Intempus integration (cases out, approved time in). This server runs alongside it and follows the same case convention: intempus_manage_case with projectNumber names the case "<projektnr> - <navn>", which is what bpc matches on, and refuses a create when the number or name already exists.

Configuration

See .env.example. Minimal production set: INTEMPUS_API_USER, INTEMPUS_API_KEY, INTEMPUS_PROFILE, INTEMPUS_TRUST_FORWARDED_USER=true, INTEMPUS_ENABLE_WRITES=true, INTEMPUS_AUDIT_LOG=/data/audit.jsonl, MCP_HTTP_TOKEN (shared with the gateway), and INTEMPUS_OPERATION_SECRET on the admin instance.

Deployment

Runs on one-1 behind the Borgels MCP Entra gateway (bos-server-config/one-1/mcp), one container per profile:

Profile

Host

Entra group (ONE tenant)

employee

intempus.mcp.onedanmark.dk

SG-MCP-intempus-one

approver

intempus-godkend.mcp.onedanmark.dk

SG-MCP-intempus-godkender-one

admin

intempus-admin.mcp.onedanmark.dk

SG-MCP-intempus-admin-one

duty group for intempus_commit_prepared_operation

admin host, toolGroups

SG-MCP-intempus-admin-commit-one

Group membership must be direct (the app emits ApplicationGroup claims; nested groups are not included), and each group must be assigned to the Borgels MCP enterprise app. Each person's Entra UPN must match their Intempus username or work email (or be mapped with INTEMPUS_IDENTITY_MAP).

Run

npm install
npm run dev          # stdio (acting user from INTEMPUS_DEFAULT_USER)
npm run dev:http     # streamable HTTP on :3000/mcp (stateless)
npm test
INTEMPUS_PROFILE=admin SMOKE_USER=you@example.com npm run smoke:live   # read-only, against the real API

Docker images: ghcr.io/borgels/mcp-server-intempus (published on push to main).

Available Tools

11 tools
intempus_delete_my_work_reportDelete My Time Registration (Intempus)A
Destructive

Delete one of your own time registrations. Only possible while it is neither approved nor locked.

ParametersJSON Schema
NameRequiredDescriptionDefault
workReportIdYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the mutation risk is covered. The description adds the valuable state constraint (unapproved and unlocked) plus ownership scope ('your own'), but says nothing about reversibility or how the caller obtains an eligible ID.

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 sentences, zero filler, with the destructive action front-loaded and the eligibility constraint immediately following.

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 one-parameter destructive tool with no output schema, the description covers purpose and eligibility but leaves the ID provenance and any failure behavior (what happens if the record is approved) unstated, so an agent still needs inference from sibling tools.

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

Parameters2/5

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

Schema description coverage is 0% and the single parameter workReportId is completely unexplained in the description. With a destructive tool, telling the agent where the ID comes from (e.g. intempus_list_my_work_reports) would materially reduce mis-invocation risk, and it is absent.

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?

States a specific verb+resource ('Delete ... time registration') and explicitly scopes it to the caller's own records, which cleanly separates it from siblings like intempus_update_my_work_report and intempus_register_time.

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?

Gives a clear precondition for use ('only possible while it is neither approved nor locked'), which is real routing information. It does not name an alternative for when the record is approved/locked (e.g. correction or update), so it falls short of explicit when-not guidance.

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

intempus_get_my_balancesMy Balances (Intempus)A
Read-onlyIdempotent

Your balances (ferie, feriefri, timebank/flex, sygdom …) as computed by Intempus up to a date (default today). Holiday accrues at month end, so pass to = the end of the holiday year to see the full entitlement. Only balances visible to employees.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/openWorldHint and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the default date, that holiday accrues at month end (explaining why results shift), and the employee-visible scoping constraint.

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?

Three tight sentences, front-loaded with what the tool returns before the accrual tip and the visibility caveat. No 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?

For a no-required-param read tool with no output schema, the description covers the concept, default, and accrual timing well. It still leaves the `from` parameter and the shape of returned balances (units, keys) entirely unaddressed.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden, and it only half-delivers: it explains that `to` defaults to today and why a specific `to` matters, but the `from` parameter is never mentioned or explained anywhere.

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 names a concrete resource ('your balances (ferie, feriefri, timebank/flex, sygdom…)') and states it is computed by Intempus up to a date. No sibling tool covers balances, so it is distinguishable in practice, though it never explicitly contrasts itself with an alternative.

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?

It gives a concrete usage rule: 'pass to = the end of the holiday year to see the full entitlement,' and notes the default (today). It also scopes the audience ('Only balances visible to employees'), but offers no when-not-to-use or alternative tool guidance.

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

intempus_get_my_planningMy Planning (Intempus)C
Read-onlyIdempotent

Your planned work in a period (default: the next 14 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral detail, the default 14-day window, but says nothing about return shape, volume, or timezone/scheduling semantics.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, and the default value is placed where it is most useful. It is arguably too terse to serve its purpose, but nothing is wasted.

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

Completeness2/5

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

With two undocumented parameters, no output schema, and no explanation of what a 'planned work' entry contains, the agent cannot know what the result represents before calling. For a query tool with zero annotation-independent documentation, this is thin.

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

Parameters2/5

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

Schema coverage is 0%: neither 'from' nor 'to' has any description. The description mentions only the default window and never explains the two parameters, their format, or range inclusivity, so it fails to compensate for the coverage gap.

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?

States a specific resource ('your planned work') and scope ('in a period'), which contrasts adequately with siblings like intempus_get_my_balances and intempus_list_my_work_reports. It does not explicitly differentiate itself from those siblings, but the resource is unambiguous.

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 on when to use this vs. related tools such as intempus_list_my_work_reports or intempus_register_time. The only usage-adjacent information is the default period, which is a behavior, not a usage condition.

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

intempus_get_my_profileMy Profile (Intempus)A
Read-onlyIdempotent

Your Intempus employee record, contracts (work model, locked date) and approver levels.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds genuine value beyond that by disclosing the shape of the returned data (employee record, contracts, approver levels) in the absence of an 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.

Conciseness5/5

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

A single front-loaded sentence with zero filler; the essential facts (owner, resource, contents) arrive immediately.

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?

With no parameters, no output schema, and rich annotations, the description does most of the remaining work by naming the returned sections. It could still clarify the authenticated-user scoping versus other lookups, but nothing critical is missing for a no-arg read.

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 takes zero parameters, for which the baseline is 4. The description correctly implies an implicit self-scope ("Your ... record"), reinforcing that no identifier argument is needed.

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?

States a specific resource — the caller's Intempus employee record — and enumerates its contents (contracts with work model and locked date, approver levels). However, it never distinguishes itself from the overlapping sibling intempus_whoami, which an agent could reasonably pick instead.

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 statement of when to call this versus siblings, and the potential overlap with intempus_whoami is left unaddressed. The agent must infer usage purely from the noun phrase.

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

intempus_list_casesList Cases (Intempus)B
Read-onlyIdempotent

Search cases/projects that accept time registrations, by number, name or customer.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
includeInactiveNoAdmin only: include closed cases.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered. The description adds one real behavioral constraint (results are limited to cases accepting time registrations), but says nothing about pagination, result ordering, or the admin-only nature of includeInactive beyond what the schema states.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the scope constraint and searchable fields are packed efficiently. It is arguably too terse given the undocumented limit parameter, but nothing in it is wasted.

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?

There is no output schema, so the description would ideally say something about what is returned or how results are bounded. With 3 parameters, 33% schema coverage, and no return-value guidance, the definition is minimally adequate but leaves gaps an agent must guess at.

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 only 33%: 'query' and 'limit' are undocumented in the schema. The description partially compensates by explaining that query searches by number, name or customer, but 'limit' (max 500) is left entirely unexplained in both places. Partial compensation justifies a 3.

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?

States a specific verb (search/list) and resource (cases/projects), plus a meaningful scope qualifier: only cases that accept time registrations. It also names the searchable fields (number, name, customer). It stops short of naming any sibling tool to differentiate itself, so it lands at 4 rather than 5.

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 phrase 'cases/projects that accept time registrations' implies the workflow (find a case before calling intempus_register_time), but there is no explicit when-to-use, when-not-to-use, or comparison against siblings such as intempus_list_work_types. Usage is inferable but not stated.

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

intempus_list_my_work_reportsMy Time Registrations (Intempus)B
Read-onlyIdempotent

Your time registrations in a period (default: last 31 days), with approval status and total.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo
approvedNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the default period and the fact that approved status and a total are included, but says nothing about pagination behavior for the 2000-item 'limit' or ordering, which are the remaining behavioral unknowns.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the period scope and default come first and the returned fields follow. It is efficiently sized, though brevity comes at the cost of the parameter and behavioral detail noted elsewhere.

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 read-only list tool whose annotations already cover safety and which has no output schema, this is close to adequate: scope, default, and key return fields are stated. It still stops short of documenting the filter/paging parameters, which is the main completeness gap.

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

Parameters2/5

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

Four parameters with 0% schema description coverage, so the description must carry the burden. It partially covers from/to by explaining the default 31-day period, but 'limit' and 'approved' are never explained — the phrase 'with approval status' reads as a return field, not the filter, leaving the agent to guess.

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?

States a specific verb+resource: 'Your time registrations' in a period, with the included fields (approval status, total). It is distinguishable from siblings like get_my_balances or list_work_types, though it never explicitly names how it differs from get_my_planning, which also deals with the user's own time data.

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 default window ('last 31 days') tells the agent what happens if no period is supplied, which is useful invocation context. However, there is no explicit when-to-use vs. sibling guidance (e.g., vs. get_my_planning or get_my_balances) and no exclusions, so usage is only implied.

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

intempus_list_work_typesList Work Types (Intempus)A
Read-onlyIdempotent

Work types (projekttimer, ferie, sygdom, kørsel …). Employees and approvers get the types of their own work model; admins may filter by work model or employee.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
employeeIdNoAdmin only: the work types valid for this employee today.
workModelIdNoAdmin only.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world, non-destructive behavior, so the safety profile is covered. The description adds meaningful access-scoping semantics: results are scoped to the caller's own work model unless admin, and only admins may filter by work model or employee. That visibility rule is not encoded in 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.

Conciseness5/5

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

Two short sentences, front-loaded with the resource and examples, then the access rule. No filler.

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 parameterless-required, read-only listing tool with no output schema, the description supplies the domain examples, default scoping, and admin filter rule an agent needs. Only the free-text 'query' parameter remains unexplained.

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 67% and both documented parameters (employeeId, workModelId) are marked admin-only in the schema. The description reinforces the admin-only filter behavior for work model and employee, but says nothing about the undocumented 'query' parameter, so it only partially compensates. Baseline 3 fits.

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?

States a specific verb and resource ('Work types') and gives concrete examples (projekttimer, ferie, sygdom, kørsel) that pin down the domain object. It does not explicitly contrast itself with siblings, but the resource is distinctive enough among the listed tools.

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 second sentence implies usage context by describing what different callers receive ('Employees and approvers get the types of their own work model'), which hints at when the tool is appropriate without stating exclusions or naming an alternative. It is implied guidance rather than explicit when/when-not routing.

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

intempus_register_timeRegister Time (Intempus)A

Register time for yourself. Give a work type, optional case, a date and either startTime+endTime (optionally breakHours) or hours. Checks that you have a contract on the date, that the work type belongs to your work model and that the case is open. Pass idempotencyKey to make a retry safe.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesWork date (start date).
hoursNoAmount in the work type unit (hours for time). Derived from start/end minus break when omitted.
caseIdNoCase/project id from intempus_list_cases. Omit for time without a case (e.g. absence).
endDateNoOnly for registrations spanning several days (e.g. holiday).
endTimeNo
remarksNo
startTimeNo
breakHoursNo
workTypeIdYesWork type id from intempus_list_work_types.
idempotencyKeyNo
additionalRemarksNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, open-world, non-destructive, non-idempotent write. The description adds real behavioral context beyond that: the pre-write validation rules (contract on the date, work type belonging to the work model, case being open) and the idempotencyKey mechanism to make retries safe. It does not say what happens when validation fails or what the response contains.

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?

Three tightly written sentences with zero filler; the primary action and scope come first, followed by input shape, validation behavior, and the retry tip. Every sentence carries information an agent needs.

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?

No output schema exists, but the description covers the action, required inputs, precondition checks, and idempotency behavior for an 11-parameter mutation tool. The chief remaining gap is the result/failure shape and how to recover after a validation rejection, which the description does not address.

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?

With only 45% schema coverage and 11 parameters, the description does useful compensating work: it names work type, optional case, date, startTime+endTime with optional breakHours, and hours, and clarifies the either/or rule that the schema leaves implicit. It omits meaning for remarks, additionalRemarks, and endDate (multi-day spans), so it is not fully complete.

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?

States a specific verb and resource ("Register time for yourself") that clearly identifies the write/create operation among list/get/update/delete siblings, and even scopes it to the caller. However it never names or contrasts an adjacent sibling (e.g. update_my_work_report) explicitly, so the differentiation is inferred rather than stated.

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 explains the required input combination (work type, optional case, date plus either start/end or hours) which is useful how-to guidance, but it offers no explicit when-to-use/when-not-to-use framing or alternative tool routing. Usage is implied by the operation itself rather than articulated.

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

intempus_search_capabilitiesSearch Intempus CapabilitiesA
Read-onlyIdempotent

Search the Intempus MCP server capabilities and examples. Use this first when deciding which tool to call.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds only that examples are included, saying nothing about result size, ranking, or how to follow up on matches.

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 short sentences with no filler: what it does first, when to use it second. Nothing could be trimmed without losing 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 zero-required-parameter search tool with no output schema, an agent can call it correctly, but it cannot predict what comes back or how to constrain the search via query/limit. Combined with 0% param coverage, the definition is serviceable but leaves real gaps.

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

Parameters2/5

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

Schema description coverage is 0% for both parameters, so the description carries the full burden. It never explains that 'query' is a free-text search string (e.g., empty returns everything) or that 'limit' caps results with a default of 20 and a max of 50, leaving both params undocumented.

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?

States a specific verb (search) and resource (Intempus MCP server capabilities and examples), and its meta/discovery nature clearly distinguishes it from the ten sibling work-report/account tools. 'Capabilities and examples' is slightly abstract, but the intent is unambiguous.

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?

'Use this first when deciding which tool to call' gives an explicit, actionable usage condition that no sibling would satisfy. It doesn't enumerate exclusions or post-discovery behavior, but for a discovery entry-point that is acceptable.

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

intempus_update_my_work_reportEdit My Time Registration (Intempus)A

Change one of your own time registrations. Only possible while it is neither approved nor locked.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoWork date (start date).
hoursNoAmount in the work type unit (hours for time). Derived from start/end minus break when omitted.
caseIdNoCase/project id from intempus_list_cases. Omit for time without a case (e.g. absence).
endDateNoOnly for registrations spanning several days (e.g. holiday).
endTimeNo
remarksNo
startTimeNo
breakHoursNo
workTypeIdNoWork type id from intempus_list_work_types.
workReportIdYes
additionalRemarksNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the mutation profile is partly covered. The description adds real value with the approved/locked state precondition. However, for an 11-parameter update it omits critical behavior: whether omitted fields are preserved or cleared (partial vs full replace) and what happens on a rejected edit.

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 compact sentences with the action stated first and the constraint second; every clause carries information and nothing is padded.

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 low-coverage, 11-parameter mutation with no output schema, the description covers purpose and one eligibility rule but leaves partial-update semantics, required-field guidance, and permission requirements unaddressed. Adequate as a minimum viable description, but not complete for the tool's complexity.

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

Parameters2/5

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

Schema description coverage is only 45% across 11 parameters, so the description was expected to compensate and does not. It names no parameter, no required field (workReportId), and no interaction rules such as hours being derived from startTime/endTime/breakHours when omitted.

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?

States a specific verb and resource with explicit ownership scope: 'Change one of your own time registrations.' This cleanly separates it from intempus_register_time (create) and intempus_delete_my_work_report (delete). It stops short of naming any sibling directly, so it is clear but not fully differentiated in-text.

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?

Provides a concrete when-not condition: 'Only possible while it is neither approved nor locked,' which tells the agent when the call will fail. It does not, however, point to an alternative (e.g. register_time for new entries) or mention prerequisite lookups from list_cases/list_work_types that the id parameters imply.

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

intempus_whoamiWho Am I (Intempus)B
Read-onlyIdempotent

Show this endpoint's profile and the Intempus employee (and approver levels) the session is bound to.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description usefully adds that the result is tied to the current session binding and includes approver levels, but says nothing about auth requirements, error behavior when unauthenticated, or response shape.

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

Conciseness4/5

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

A single compact sentence that is front-loaded with the verb 'Show' and the payload. The only waste is the slightly confusing 'this endpoint's profile' construction, which costs a word of clarity rather than length.

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 read-only tool there is no output schema, so the description carries the burden of describing what comes back; it lists profile, employee and approver levels, which is a reasonable sketch but not complete (no mention of structure, IDs, or what the 'endpoint profile' contains).

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?

There are zero parameters and 100% schema description coverage, so the baseline is 4. The description adds nothing about parameters because there is nothing to add.

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

Purpose3/5

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

The description names a recognizable resource (the session's profile / bound Intempus employee and approver levels), but the phrasing 'this endpoint's profile' is odd and it never distinguishes itself from the sibling intempus_get_my_profile, which appears to retrieve overlapping identity information.

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 when-to-use guidance and no exclusions are given. With intempus_get_my_profile in the sibling list, the agent is left to guess which identity tool to call; the description should say why you would call whoami instead of get_my_profile.

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. 11 tool updatesv0.1.0
    • First observedintempus_delete_my_work_report
    • First observedintempus_get_my_balances
    • First observedintempus_get_my_planning
    • First observedintempus_get_my_profile
    • First observedintempus_list_cases
    • First observedintempus_list_my_work_reports
    • First observedintempus_list_work_types
    • First observedintempus_register_time
    • First observedintempus_search_capabilities
    • First observedintempus_update_my_work_report
    • First observedintempus_whoami

TDQS

A3.6/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have clearly distinct purposes (list work types, list cases, register/update/delete time, balances, planning). However, intempus_whoami and intempus_get_my_profile overlap in showing employee/approver info, which could cause an agent to pick the wrong one.

Naming Consistency4/5

All tools use the intempus_ prefix and snake_case, with a mostly consistent verb_noun pattern (list_work_types, get_my_balances, register_time). The outlier is intempus_whoami, which does not follow the verb_noun format, but this is a common exception.

Tool Count5/5

11 tools is well within the ideal range and each tool maps to a distinct operation within the employee self-service domain (time registration CRUD, profiles, balances, planning). No tool feels redundant or missing at the count level.

Completeness4/5

Core employee workflows are covered: time registration create/read/update/delete, work types, cases, balances, and planning. Approver-specific operations (e.g., approving/rejecting reports) are absent despite approver levels being mentioned, and there is no single-report retrieval, but these are minor workable gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers