{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-06T18:00:26.663Z","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime.md","server":{"slug":"io-usefulapi-exaktime","name":"ExakTime / Arcoro MCP by usefulapi","registryName":"io.usefulapi/exaktime","description":"MCP server for Arcoro and ExakTime — workforce data, jobs, cost codes and locations.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"exaktime","type":"remote","identifier":"https://exaktime.usefulapi.io/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime","version":"1.6.4","transport":null,"scoredAt":"2026-11-06T13:08:33.074Z"},"score":{"total":18,"tier":"low","status":"scored","weekDelta":null,"history":[{"date":"2026-11-06","total":18},{"date":"2026-11-05","total":18},{"date":"2026-11-04","total":18},{"date":"2026-11-03","total":18},{"date":"2026-11-02","total":18},{"date":"2026-11-01","total":63},{"date":"2026-10-31","total":63}]},"categories":[{"name":"Endpoint Security","score":46,"verdict":"fail","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.","HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.","HSTS check failed: the Strict-Transport-Security header is absent.","DNSSEC check failed: this domain isn't protected by DNSSEC."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.unreachable","args":{}},{"code":"https.inconclusive","args":{"reason":"redirect_not_https"}},{"code":"headers.hsts_absent","args":{}},{"code":"dnssec.absent","args":{}}]},{"name":"Transport & Reachability","score":0,"verdict":"fail","reasons":["Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly."],"codes":[{"code":"transport.redirected","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":0,"verdict":"unverified","reasons":["Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list."],"codes":[{"code":"schema.unreachable","args":{}}]},{"name":"Stability & Change Management","score":0,"verdict":"unverified","reasons":["Stability not yet verified: not enough scan history yet (needs a 30-day window)."],"codes":[{"code":"stability.insufficient_history","args":{}}]},{"name":"Tool Coverage","score":0,"verdict":"unverified","reasons":["Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolquality.unreachable","args":{}}]},{"name":"Tool Safety","score":0,"verdict":"unverified","reasons":["Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolsafety.unreachable","args":{}}]},{"name":"Capabilities","score":0,"verdict":"unverified","reasons":["Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"codes":[{"code":"cap.unreachable","args":{}}]}],"inconclusive":["Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.","HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.","Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.","Stability not yet verified: not enough scan history yet (needs a 30-day window).","Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"malware":[],"components":[{"slug":"exaktime","type":"remote","identifier":"https://exaktime.usefulapi.io/mcp","withdrawn":false,"score":18,"current":true,"url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime.md"}],"facts":[{"label":"Endpoint","value":"https://exaktime.usefulapi.io/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"1.6.4"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"exaktime_list_employees","title":"List employees","description":"List employees (Person records of type Employee) with name, job title, department, employee id, active/inactive status and which Arcoro modules they use. Use personId with exaktime_get_employee. GET /v1/Common/Persons/Employees.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":107},{"name":"exaktime_list_persons","title":"Search persons","description":"List or search Person records (employees and API users) by first name, last name, employee identifier or work email. Returns personId, names, work email, employee id, username and whether the person is a contractor or deleted. GET /v1/Common/Persons.","inputs":[{"name":"employee_identifier","type":"string","required":false,"description":"Your employee id / number."},{"name":"first_name","type":"string","required":false,"description":"First name filter."},{"name":"last_name","type":"string","required":false,"description":"Last name filter."},{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."},{"name":"work_email","type":"string","required":false,"description":"Work email address."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":157},{"name":"exaktime_get_person","title":"Get person","description":"One Person record: names, contact details, address, login username and security groups. Government identifiers are not available through this server. GET /v1/Common/Persons/{personId}.","inputs":[{"name":"person_id","type":"integer","required":true,"description":"Arcoro personId."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":59},{"name":"exaktime_get_employee","title":"Get employee","description":"Employment details for a person: hire/termination date, status, employment and pay type, pay rates, job code, manager, location, department, pay schedule and union. GET /v1/Common/Persons/{personId}/Employees.","inputs":[{"name":"person_id","type":"integer","required":true,"description":"Arcoro personId."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":70},{"name":"exaktime_list_locations","title":"List locations","description":"List locations (job sites and offices) with address, coordinates, active flag and whether they are used for time and attendance. GET /v1/Common/Locations.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":88},{"name":"exaktime_get_location","title":"Get location","description":"One location by id. GET /v1/Common/Locations/{id}.","inputs":[{"name":"location_id","type":"integer","required":true,"description":"Arcoro locationId."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"exaktime_list_jobs","title":"List jobs","description":"List jobs (projects) with identifier, name, active flag, dates, department, parent job and assigned locations. GET /v1/Time/Jobs.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":87},{"name":"exaktime_get_job","title":"Get job","description":"One job by id. GET /v1/Time/Jobs/{id}.","inputs":[{"name":"job_id","type":"integer","required":true,"description":"Arcoro jobId."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":38},{"name":"exaktime_list_cost_codes","title":"List cost codes","description":"List cost codes (phases and work activities that time is booked against) with identifier, name, active flag and cost type. GET /v1/Time/CostCodes.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":92},{"name":"exaktime_get_cost_code","title":"Get cost code","description":"One cost code by id. GET /v1/Time/CostCodes/{id}.","inputs":[{"name":"cost_code_id","type":"integer","required":true,"description":"Arcoro cost code id."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":43},{"name":"exaktime_list_cost_types","title":"List cost types","description":"List cost types (groupings of cost codes, e.g. labor, equipment) with identifier, name and active flag. GET /v1/Time/CostTypes.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":91},{"name":"exaktime_list_departments","title":"List departments","description":"List departments with identifier, name and active flag. GET /v1/Common/Departments.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":74},{"name":"exaktime_list_job_codes","title":"List job codes","description":"List job codes (positions / trades) with name, description and active flag. GET /v1/Common/JobCodes.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":81},{"name":"exaktime_list_pay_schedules","title":"List pay schedules","description":"List pay schedules with frequency, first pay date, pay periods per year and the default flag. GET /v1/Payroll/PaySchedules.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":86},{"name":"exaktime_list_labor_classes","title":"List labor classes","description":"List labor classes with identifier, name and active flag. GET /v1/Payroll/LaborClasses.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":78},{"name":"exaktime_list_rate_codes","title":"List rate codes","description":"List payroll rate codes with identifier, name, description and whether it is the base rate. GET /v1/Payroll/RateCodes.","inputs":[{"name":"page","type":"integer","required":false,"description":"Page number, from 1 (default 1). Pass the previous reply's next_page."},{"name":"page_size","type":"integer","required":false,"description":"Results per page, 1-100 (default 50)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":84},{"name":"exaktime_list_time_records","title":"List time records","description":"List time records (timecard entries: who worked, when, on which cost code and location, regular/overtime hours). Filter by work date range, person, location or cost code identifier; newest first. Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/DwTimeRecords.","inputs":[{"name":"active_only","type":"boolean","required":false,"description":"true: skip deleted/inactive records."},{"name":"all_fields","type":"boolean","required":false,"description":"true: return every warehouse column (GPS, punch ids, modified-by...). Default: the main columns."},{"name":"cost_code_identifier","type":"string","required":false,"description":"Only this cost code identifier."},{"name":"from_date","type":"string","required":false,"description":"First work date to include (yyyy-mm-dd)."},{"name":"location_id","type":"integer","required":false,"description":"Only this location (locationId)."},{"name":"person_id","type":"integer","required":false,"description":"Only this employee (personId)."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"to_date","type":"string","required":false,"description":"Last work date to include (yyyy-mm-dd)."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":251},{"name":"exaktime_list_time_punches","title":"List time punches","description":"List raw clock punches (punch time, device type, location, network time difference). Filter by date range (UTC days), person or location; newest first. Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/DwTimePunches.","inputs":[{"name":"from_date","type":"string","required":false,"description":"First day to include (yyyy-mm-dd, UTC)."},{"name":"location_id","type":"integer","required":false,"description":"Only this location (locationId)."},{"name":"person_id","type":"integer","required":false,"description":"Only this employee (personId)."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"to_date","type":"string","required":false,"description":"Last day to include (yyyy-mm-dd, UTC)."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":190},{"name":"exaktime_list_shifts","title":"List scheduled shifts","description":"List scheduled shifts (employee, start/end, title, cost code, location, notes). Filter by start date range (UTC days), person or location; newest first. Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/DwShifts.","inputs":[{"name":"from_date","type":"string","required":false,"description":"First start day to include (yyyy-mm-dd, UTC)."},{"name":"location_id","type":"integer","required":false,"description":"Only this location (locationId)."},{"name":"person_id","type":"integer","required":false,"description":"Only this employee (personId)."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"to_date","type":"string","required":false,"description":"Last start day to include (yyyy-mm-dd, UTC)."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":190},{"name":"exaktime_list_pay_periods","title":"List pay periods","description":"List pay periods (id, start and end date, closed or open, type), newest first. Use the id to find approvals. Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/DwPayPeriods.","inputs":[{"name":"from_date","type":"string","required":false,"description":"Pay periods starting on or after this date."},{"name":"is_closed","type":"boolean","required":false,"description":"true: only closed periods; false: only open ones."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"to_date","type":"string","required":false,"description":"Pay periods starting on or before this date."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":169},{"name":"exaktime_list_time_off_requests","title":"List time off requests","description":"List time off requests (employee, plan, start/end date, hours, status, comments, manager). Filter by status, person or start-date range. Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/DwTimeOffRequests.","inputs":[{"name":"from_date","type":"string","required":false,"description":"Requests starting on or after this date."},{"name":"person_id","type":"integer","required":false,"description":"Only this employee (personId)."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"status","type":"string","required":false,"description":"Request status exactly as Arcoro shows it, e.g. Pending, Approved, Denied."},{"name":"to_date","type":"string","required":false,"description":"Requests starting on or before this date."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":192},{"name":"exaktime_list_time_off_balances","title":"List time off balances","description":"List time off balances per employee and plan (balance hours, maximum balance, manager). Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/DwTimeOffBalances.","inputs":[{"name":"person_id","type":"integer","required":false,"description":"Only this employee (personId)."},{"name":"plan_name","type":"string","required":false,"description":"Only this time off plan, exact name."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":140},{"name":"exaktime_list_timecard_approvals","title":"List daily timecard approvals","description":"List daily timecard approvals (work date, approval type, who approved and when, the employee). Filter by work date range or employee. Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/DwWorkDateTimeApprovals.","inputs":[{"name":"from_date","type":"string","required":false,"description":"First work date to include."},{"name":"person_id","type":"integer","required":false,"description":"Only this employee's timecards (personId)."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"to_date","type":"string","required":false,"description":"Last work date to include."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":167},{"name":"exaktime_list_pay_period_approvals","title":"List pay period approvals","description":"List pay period (timesheet) approvals and sign-offs: pay period, approval type, approver, time, employee, comment. Use it to see who has not yet signed off. Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/DwPayPeriodApprovals.","inputs":[{"name":"pay_period_id","type":"integer","required":false,"description":"Only this pay period (from exaktime_list_pay_periods)."},{"name":"person_id","type":"integer","required":false,"description":"Only this employee's timesheets (personId)."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":171},{"name":"exaktime_list_meal_break_violations","title":"List meal break violations","description":"List meal break compliance violations (type, date, expected vs actual value) linked to a time record id. Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/DwMealBreakViolations.","inputs":[{"name":"from_date","type":"string","required":false,"description":"First violation date to include."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"time_record_id","type":"string","required":false,"description":"Only violations of this time record."},{"name":"to_date","type":"string","required":false,"description":"Last violation date to include."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":159},{"name":"exaktime_query_odata","title":"Query any OData entity set","description":"Read-only OData query over any Arcoro data warehouse entity set, for questions the other tools do not cover (equipment, expenses, users, time records by hour group, learning, performance, recruiting, benefits...). Entity sets start with Dw, e.g. DwUsers, DwEquipments, DwExpenses, DwCostCodes, DwLocations, DwTimeRecordByHourGroups, DwEmploymentStatusHistories. Full list: https://my.arcoro.com/api/odata ; schema: https://api.arcoro.com/odata/$metadata. $filter uses OData v4 syntax, e.g. startswith(LastName,'Sm') and IsActive eq true. Source: the read-only OData data warehouse, refreshed nightly, so today's entries may not show until tomorrow. Page with skip/next_skip. GET /odata/{EntitySet}.","inputs":[{"name":"entity_set","type":"string","required":true,"description":"Entity set name, e.g. DwUsers."},{"name":"filter","type":"string","required":false,"description":"OData $filter expression."},{"name":"orderby","type":"string","required":false,"description":"OData $orderby, e.g. LastName,FirstName desc."},{"name":"select","type":"string","required":false,"description":"Comma-separated property names ($select)."},{"name":"skip","type":"integer","required":false,"description":"Rows to skip (default 0). Pass the previous reply's next_skip."},{"name":"top","type":"integer","required":false,"description":"Rows to return, 1-1000 (default 100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":288},{"name":"exaktime_create_job","title":"Create job","description":"WRITE: create a job (project) that employees can book time to. Identifier must be unique. The job appears in Arcoro right away; it can be deactivated again with exaktime_update_job (there is no delete). POST /v1/Time/Jobs.","inputs":[{"name":"all_locations","type":"boolean","required":false,"description":"true: the job is available at every location; false: only at location_ids."},{"name":"department_id","type":"integer","required":false,"description":"Department id (exaktime_list_departments)."},{"name":"end_date","type":"string","required":false,"description":"Job end date."},{"name":"identifier","type":"string","required":true,"description":"Your unique job number/identifier."},{"name":"is_active","type":"boolean","required":false,"description":"Active jobs can be selected for time entry."},{"name":"is_certified","type":"boolean","required":false,"description":"Certified payroll job."},{"name":"location_ids","type":"array","required":false,"description":"Location ids the job is limited to (exaktime_list_locations). Setting them turns off 'available at all locations'."},{"name":"name","type":"string","required":true,"description":"Job name."},{"name":"parent_job_id","type":"integer","required":false,"description":"Parent job id, to create a sub-job."},{"name":"start_date","type":"string","required":false,"description":"Job start date."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":227},{"name":"exaktime_update_job","title":"Update job","description":"WRITE: change fields of an existing job (rename it, set dates, assign locations, or set is_active=false to close it). Only the fields you pass change (null clears a nullable field); the tool reads the job first and sends the full object, because Arcoro replaces the job on PUT. Two edits to the same job at the same moment can overwrite each other: run them one after the other. PUT /v1/Time/Jobs/{id}.","inputs":[{"name":"all_locations","type":"boolean","required":false,"description":"true: the job is available at every location; false: only at location_ids."},{"name":"department_id","type":null,"required":false,"description":"Department id, or null to clear it."},{"name":"end_date","type":null,"required":false,"description":"Job end date, or null to clear it."},{"name":"identifier","type":"string","required":false,"description":"Your unique job number/identifier."},{"name":"is_active","type":"boolean","required":false,"description":"Active jobs can be selected for time entry."},{"name":"is_certified","type":"boolean","required":false,"description":"Certified payroll job."},{"name":"job_id","type":"integer","required":true,"description":"Arcoro jobId."},{"name":"location_ids","type":"array","required":false,"description":"Location ids the job is limited to (exaktime_list_locations). Setting them turns off 'available at all locations'."},{"name":"name","type":"string","required":false,"description":"Job name."},{"name":"parent_job_id","type":null,"required":false,"description":"Parent job id, or null to detach the job from its parent."},{"name":"start_date","type":null,"required":false,"description":"Job start date, or null to clear it."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":285},{"name":"exaktime_create_cost_code","title":"Create cost code","description":"WRITE: create a cost code (phase or work activity) that time can be booked against. The name must be unique. It can be deactivated again with exaktime_update_cost_code (there is no delete). POST /v1/Time/CostCodes.","inputs":[{"name":"cost_type_id","type":"integer","required":false,"description":"Cost type id (exaktime_list_cost_types)."},{"name":"display_option","type":"string","required":false,"description":"Default: selectable by users. System: system-defined, hidden from users."},{"name":"identifier","type":"string","required":true,"description":"Your unique cost code identifier."},{"name":"is_active","type":"boolean","required":false,"description":"Default true."},{"name":"name","type":"string","required":true,"description":"Cost code name (unique)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":139},{"name":"exaktime_update_cost_code","title":"Update cost code","description":"WRITE: change fields of an existing cost code (rename it, change its cost type, or set is_active=false to retire it). Only the fields you pass change; the tool reads the cost code first and sends the full object. PUT /v1/Time/CostCodes/{id}.","inputs":[{"name":"cost_code_id","type":"integer","required":true,"description":"Arcoro cost code id."},{"name":"cost_type_id","type":"integer","required":false,"description":null},{"name":"display_option","type":"string","required":false,"description":"Default: selectable by users. System: system-defined, hidden from users."},{"name":"identifier","type":"string","required":false,"description":null},{"name":"is_active","type":"boolean","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":137},{"name":"exaktime_create_location","title":"Create location","description":"WRITE: create a location (job site or office). Add the address and/or latitude and longitude so geofencing and maps work. It can be deactivated again with exaktime_update_location (there is no delete). POST /v1/Common/Locations.","inputs":[{"name":"address","type":"object","required":false,"description":"Street address; every field except address_line2 is required by Arcoro."},{"name":"comments","type":"string","required":false,"description":null},{"name":"identifier","type":"string","required":false,"description":"Your location identifier."},{"name":"is_active","type":"boolean","required":false,"description":"Default true."},{"name":"is_office","type":"boolean","required":false,"description":null},{"name":"is_time_and_attendance","type":"boolean","required":false,"description":"Employees can clock in at this location."},{"name":"latitude","type":"number","required":false,"description":null},{"name":"longitude","type":"number","required":false,"description":null},{"name":"name","type":"string","required":true,"description":"Location name."},{"name":"onboarding_business_unit_id","type":"integer","required":false,"description":"Onboarding business unit id; Arcoro requires it for an office when Onboarding business units are enabled."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":190},{"name":"exaktime_update_location","title":"Update location","description":"WRITE: change fields of an existing location (rename, move, new address, or set is_active=false to retire it). Only the fields you pass change; the tool reads the location first and sends the full object. PUT /v1/Common/Locations/{id}.","inputs":[{"name":"address","type":"object","required":false,"description":"Street address; every field except address_line2 is required by Arcoro."},{"name":"comments","type":"string","required":false,"description":null},{"name":"identifier","type":"string","required":false,"description":null},{"name":"is_active","type":"boolean","required":false,"description":null},{"name":"is_office","type":"boolean","required":false,"description":null},{"name":"is_time_and_attendance","type":"boolean","required":false,"description":null},{"name":"latitude","type":"number","required":false,"description":null},{"name":"location_id","type":"integer","required":true,"description":"Arcoro locationId."},{"name":"longitude","type":"number","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"onboarding_business_unit_id","type":"integer","required":false,"description":"Onboarding business unit id; Arcoro requires it for an office when Onboarding business units are enabled."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":190}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-06T13:08:33.000Z","track":"remote","endpoint":"https://exaktime.usefulapi.io/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=usefulapi.io","issuer":"CN=WE1,O=Google Trust Services,C=US","notBefore":"2026-09-13T08:55:39Z","notAfter":"2026-12-12T09:54:12Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=WE1,O=Google Trust Services,C=US","issuer":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","notBefore":"2023-12-13T09:00:00Z","notAfter":"2029-02-20T14:00:00Z","keyType":"ECDSA","keyBits":256,"isCa":true},{"subject":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","issuer":"CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE","notBefore":"2023-11-15T03:43:21Z","notAfter":"2028-01-28T00:00:42Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"insecure","label":"Not signed","name":"exaktime.usefulapi.io.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"io.","outcome":"verified","label":"Verified"},{"zone":"usefulapi.io.","outcome":"insecure_proven","label":"Unsigned (proven)"}]},"auth":{"outcome":"inconclusive","label":"Inconclusive","gate":null,"gateLabel":null,"status":302,"authorizationServers":[]},"httpsRedirect":{"outcome":"inconclusive","label":"Inconclusive","status":302},"transports":[{"transport":"streamable-http","outcome":"redirected","label":"Redirected","status":302,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-31","recent":[{"id":"chg_01a1ae3e-d853-77e4-836a-bb1e612ae3cc","kind":"score.rubric_changed","summary":"We updated how we score, so this day's move reflects our rubric, not a change to the server","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-06","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a1ae3e-d853-77e4-836a-bb1e612ae3cc"},{"id":"chg_01a19992-3e2c-7718-a8bd-50e83f0c2fde","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a19992-3e2c-7718-a8bd-50e83f0c2fde"},{"id":"chg_01a19992-3e2f-7a01-b338-dead4b7bc5fc","kind":"check.unverifiable","summary":"Authorization (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a19992-3e2f-7a01-b338-dead4b7bc5fc"},{"id":"chg_01a19992-3e30-775c-b12f-bf867d8d408e","kind":"check.unverifiable","summary":"Stability (0.03 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a19992-3e30-775c-b12f-bf867d8d408e"},{"id":"chg_01a19992-3e30-7d30-ab4e-c6512ac2c220","kind":"check.unverifiable","summary":"Schema quality (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a19992-3e30-7d30-ab4e-c6512ac2c220"},{"id":"chg_01a19992-3e31-792c-a4a4-2f75bf2b2f60","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a19992-3e31-792c-a4a4-2f75bf2b2f60"},{"id":"chg_01a19992-3e32-786a-a2b7-1d3111c50968","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a19992-3e32-786a-a2b7-1d3111c50968"},{"id":"chg_01a19992-3e33-78d7-8be2-d8339dc1ce02","kind":"capture.status_changed","summary":"Endpoint reachability (reachable → not serving MCP)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a19992-3e33-78d7-8be2-d8339dc1ce02"},{"id":"chg_01a19992-3e35-7657-8f38-74d9c9ef9a87","kind":"score.total_changed","summary":"Trust score (63 → 18)","materiality":"functional","direction":"regression","scoreDelta":-45,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a19992-3e35-7657-8f38-74d9c9ef9a87"},{"id":"chg_01a1946b-4ae2-7dae-886d-35d968a52f54","kind":"check.reverified","summary":"Stability (unverified → 0.03)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a1946b-4ae2-7dae-886d-35d968a52f54"},{"id":"chg_01a193fb-7161-7ad8-87cc-7ee15432cc2c","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a193fb-7161-7ad8-87cc-7ee15432cc2c"},{"id":"chg_01a19028-2940-788e-b6f1-7b1034a61eb7","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime#chg-chg_01a19028-2940-788e-b6f1-7b1034a61eb7"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime/changelog.json"},"links":{"html":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime","markdown":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime.md","changelogJson":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime/changelog.json","changelogRss":"https://verifymcp.io/servers/io-usefulapi-exaktime/exaktime.xml","external":[{"label":"Remote endpoint","href":"https://exaktime.usefulapi.io/mcp"},{"label":"Repository","href":"https://github.com/m190/usefulapi-mcp"},{"label":"Website","href":"https://usefulapi.io/exaktime/"}]}}