MCP Server for Visma Intempus
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., "@MCP Server for Visma Intempusregister 7.5 hours on case 12345 for yesterday"
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.
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, plusintempus_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_employeecreate/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-stepintempus_prepare_admin_change→intempus_commit_prepared_operationfor deletes and period locks (contractlocked_date).
Related MCP server: HR System MCP Server
Guarantees
Identity fails closed. The gateway-verified UPN (
X-MCP-User, honored whenINTEMPUS_TRUST_FORWARDED_USER=true) must resolve to exactly one Intempus employee — byINTEMPUS_IDENTITY_MAP, then Intempus username, then work email, case-insensitive. The privatepersonal_emailis 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 withoutX-MCP-Userare 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_credentialare not readable.
Not possible via Intempus' public API
Verified live on 2026-09-29 (details in docs/api-notes.md):
Approving time.
approvedis read-only, andapproved_by_initial/approved_by_finalcan 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 anX-Security-Keyfrom 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 kindlock_work_reportsworks once Intempus enables it; period locks via the contract'slocked_datework 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.employeecannot be filtered on email, and username has no case-insensitive filter, so identity is matched in memory (cached 60 s).explored_employee_balanceandscheduleanswer 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) |
|
|
|
|
|
|
|
|
|
duty group for | admin host, |
|
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 APIDocker images: ghcr.io/borgels/mcp-server-intempus (published on push to main).
Available Tools
11 toolsintempus_delete_my_work_reportDelete My Time Registration (Intempus)ADestructive
Delete one of your own time registrations. Only possible while it is neither approved nor locked.
| Name | Required | Description | Default |
|---|---|---|---|
| workReportId | Yes |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No |
TDQS
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.
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.
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.
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.
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.
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)CRead-onlyIdempotent
Your planned work in a period (default: the next 14 days).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotent
Your Intempus employee record, contracts (work model, locked date) and approver levels.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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)BRead-onlyIdempotent
Search cases/projects that accept time registrations, by number, name or customer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| includeInactive | No | Admin only: include closed cases. |
TDQS
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.
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.
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.
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.
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.
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)BRead-onlyIdempotent
Your time registrations in a period (default: last 31 days), with approval status and total.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| limit | No | ||
| approved | No |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| employeeId | No | Admin only: the work types valid for this employee today. | |
| workModelId | No | Admin only. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Work date (start date). | |
| hours | No | Amount in the work type unit (hours for time). Derived from start/end minus break when omitted. | |
| caseId | No | Case/project id from intempus_list_cases. Omit for time without a case (e.g. absence). | |
| endDate | No | Only for registrations spanning several days (e.g. holiday). | |
| endTime | No | ||
| remarks | No | ||
| startTime | No | ||
| breakHours | No | ||
| workTypeId | Yes | Work type id from intempus_list_work_types. | |
| idempotencyKey | No | ||
| additionalRemarks | No |
TDQS
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.
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.
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.
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.
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.
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 CapabilitiesARead-onlyIdempotent
Search the Intempus MCP server capabilities and examples. Use this first when deciding which tool to call.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Work date (start date). | |
| hours | No | Amount in the work type unit (hours for time). Derived from start/end minus break when omitted. | |
| caseId | No | Case/project id from intempus_list_cases. Omit for time without a case (e.g. absence). | |
| endDate | No | Only for registrations spanning several days (e.g. holiday). | |
| endTime | No | ||
| remarks | No | ||
| startTime | No | ||
| breakHours | No | ||
| workTypeId | No | Work type id from intempus_list_work_types. | |
| workReportId | Yes | ||
| additionalRemarks | No |
TDQS
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.
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.
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.
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.
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.
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)BRead-onlyIdempotent
Show this endpoint's profile and the Intempus employee (and approver levels) the session is bound to.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
11 tool updates
v0.1.0- First observed
intempus_delete_my_work_report - First observed
intempus_get_my_balances - First observed
intempus_get_my_planning - First observed
intempus_get_my_profile - First observed
intempus_list_cases - First observed
intempus_list_my_work_reports - First observed
intempus_list_work_types - First observed
intempus_register_time - First observed
intempus_search_capabilities - First observed
intempus_update_my_work_report - First observed
intempus_whoami
TDQS
Scored across 11 tools
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.
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.
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.
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
Related MCP Connectors
Permissioned access to Outlook, OneDrive and Teams via the user's own Microsoft account
Read time entries, projects, clients, tasks and invoices; log and update tracked time.
Track and manage employee time off with quick balance lookups and streamlined applications. Find t…
Read teams, spaces, lists and tasks; create, update and comment on tasks and track time.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables automated timesheet management including creating entries, listing work activities, managing daily scrum updates, and viewing assigned projects with automatic authentication handling.10 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables employee information lookup, directory listing, payroll access, and time-off request management with Okta token validation.-
- FlicenseAqualityDmaintenanceProvides Planview Enterprise One API access with Okta passwordless authentication, enabling work item and project management, and automated timesheet completion.7-
- FlicenseAqualityCmaintenanceEnables viewing, creating, and managing time registrations, absences, and timesheet approvals through the Timelog API using natural language.211-