{"$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-06T11:31:29.129Z","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard.md","server":{"slug":"io-usefulapi-workyard","name":"Workyard MCP by usefulapi","registryName":"io.usefulapi/workyard","description":"Read Workyard employees, projects, time cards and geofences; approve time cards and add notes.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"workyard","type":"remote","identifier":"https://workyard.usefulapi.io/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard","version":"1.10.3","transport":null,"scoredAt":"2026-11-06T01:08:52.999Z"},"score":{"total":18,"tier":"low","status":"scored","weekDelta":-45,"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":67},{"date":"2026-10-31","total":66},{"date":"2026-10-30","total":63},{"date":"2026-10-29","total":63},{"date":"2026-10-28","total":62}]},"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":"workyard","type":"remote","identifier":"https://workyard.usefulapi.io/mcp","withdrawn":false,"score":18,"current":true,"url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard.md"}],"facts":[{"label":"Endpoint","value":"https://workyard.usefulapi.io/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"1.10.3"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"workyard_get_organization","title":"Get Workyard organization","description":"The organization this connection uses (id, name, settings such as timezone) from GET /orgs/{org_id}.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"workyard_list_employees","title":"List Workyard employees","description":"List employees of the organization (employee_id, profile_id, name, title, role, status, contact data). Filter by status (active, removed, saas_disabled, expired; comma list), email, role name or free-text search. Paged: use next_page.","inputs":[{"name":"email","type":"string","required":false,"description":"Exact email filter (comma list allowed; sent as eq:...)."},{"name":"employee_id","type":"string","required":false,"description":"One or more employee ids, comma separated."},{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-200 (Workyard default 100)."},{"name":"page","type":"integer","required":false,"description":"Page number, 1-based (default 1). Use next_page from the previous reply."},{"name":"role_name","type":"string","required":false,"description":"Role filter: worker, manager, admin (comma list; sent as eq:...)."},{"name":"search","type":"string","required":false,"description":"Free-text search over name, email and identifier."},{"name":"status","type":"string","required":false,"description":"Employee status filter: active, removed, saas_disabled, expired (comma list; sent as eq:...)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":219},{"name":"workyard_list_projects","title":"List Workyard projects","description":"List projects (id, name, identifier, customer, locations). Optionally filter by name or archived state. Paged: use next_page.","inputs":[{"name":"include_computed_totals","type":"boolean","required":false,"description":"Include computed totals per project."},{"name":"is_archived","type":"boolean","required":false,"description":"true = archived projects only, false = active only (default: Workyard's default)."},{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-200 (Workyard default 50)."},{"name":"name","type":"string","required":false,"description":"Project name: a plain name matches names starting with it (like:name%); eq:... and like:... forms are passed through."},{"name":"page","type":"integer","required":false,"description":"Page number, 1-based (default 1). Use next_page from the previous reply."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":161},{"name":"workyard_get_project","title":"Get Workyard project","description":"One project by id (workyard_list_projects gives the ids).","inputs":[{"name":"project_id","type":"integer","required":true,"description":"The project id (org_project_id)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":38},{"name":"workyard_list_time_cards","title":"List Workyard time cards","description":"List time cards (id, employee_id, start_dt_unix, end_dt_unix, status, approver, totals). Workyard returns only status=working when no status is given, so pass status (for example submitted,approved) for finished work. Filter by employee and by start time (unix seconds, interpreted in the organization timezone). Paged: use next_page; the reply also carries time_summary.","inputs":[{"name":"employee_id","type":"string","required":false,"description":"One or more employee ids, comma separated."},{"name":"include_last_location","type":"boolean","required":false,"description":"Include the employee's last known location (personal data)."},{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-200 (Workyard default 50)."},{"name":"page","type":"integer","required":false,"description":"Page number, 1-based (default 1). Use next_page from the previous reply."},{"name":"sort_by","type":"string","required":false,"description":"Sort in Workyard syntax: asc: or desc: plus start_dt or updated_at, joined with +, e.g. desc:start_dt."},{"name":"start_before_unix","type":"integer","required":false,"description":"Time card started before this unix time (seconds)."},{"name":"start_from_unix","type":"integer","required":false,"description":"Time card started at or after this unix time (seconds)."},{"name":"status","type":"string","required":false,"description":"Status filter such as working, submitted, approved or submitted,approved (sent as eq:...). Omitted = working only."},{"name":"time_approver_id","type":"string","required":false,"description":"Filter by approver employee id(s)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":301},{"name":"workyard_get_time_card","title":"Get Workyard time card","description":"One time card by id, with its details (workyard_list_time_cards gives the ids).","inputs":[{"name":"time_card_id","type":"integer","required":true,"description":"The time card id."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":43},{"name":"workyard_list_time_card_activity_segments","title":"List Workyard time card activity segments","description":"The activity segments of one time card (where and on which project the employee worked, segment by segment). Not paged.","inputs":[{"name":"include_archived_projects","type":"boolean","required":false,"description":"Include segments of archived projects."},{"name":"time_card_id","type":"integer","required":true,"description":"The time card id."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":66},{"name":"workyard_list_geofences","title":"List Workyard geofences (work sites)","description":"List geofences / work sites (id, name, place, enabled, radius). Filter by name, enabled state or project. Paged: use next_page.","inputs":[{"name":"enabled","type":"boolean","required":false,"description":"Only enabled (true) or disabled (false) geofences."},{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-1000 (Workyard default 1000)."},{"name":"name","type":"string","required":false,"description":"Geofence name: a plain name matches names starting with it; eq:... and like:... forms are passed through."},{"name":"page","type":"integer","required":false,"description":"Page number, 1-based (default 1). Use next_page from the previous reply."},{"name":"project_id","type":"string","required":false,"description":"Only geofences of this project id (comma list allowed)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":165},{"name":"workyard_list_active_geofences","title":"List active Workyard geofences","description":"All active geofences with limited data (Workyard: GET active_geofences). It does not say who is clocked in; use workyard_list_time_cards with status working for that.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"workyard_list_geofence_projects","title":"List projects of a Workyard geofence","description":"The projects attached to one geofence (work site). Paged: use next_page.","inputs":[{"name":"geofence_id","type":"integer","required":true,"description":"The geofence id (workyard_list_geofences gives the ids)."},{"name":"is_archived","type":"boolean","required":false,"description":"true = archived projects only."},{"name":"limit","type":"integer","required":false,"description":"Results per page, 1-200 (Workyard default 50)."},{"name":"page","type":"integer","required":false,"description":"Page number, 1-based (default 1). Use next_page from the previous reply."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":113},{"name":"workyard_approve_time_card","title":"Approve a Workyard time card","description":"WRITE: approve ONE time card (PATCH .../time_cards/{id}/approve). Approval feeds payroll in Workyard and may not be undoable through the API: only call it when the user asked to approve this exact time card.","inputs":[{"name":"time_card_id","type":"integer","required":true,"description":"The time card id to approve."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":74},{"name":"workyard_add_time_card_note","title":"Add a note to a Workyard time card","description":"WRITE: add a text note to one time card (POST .../time_cards/{id}/notes). Adds a new note on every call; it does not edit or delete existing notes.","inputs":[{"name":"description","type":"string","required":true,"description":"The note text."},{"name":"time_card_id","type":"integer","required":true,"description":"The time card id."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":73}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-06T01:08:52.000Z","track":"remote","endpoint":"https://workyard.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":"workyard.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-28","recent":[{"id":"chg_01a1ae66-c499-7800-a464-aef7b8aa9315","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-workyard/workyard#chg-chg_01a1ae66-c499-7800-a464-aef7b8aa9315"},{"id":"chg_01a199cd-80b6-72b0-a5df-47ccc5eac432","kind":"check.unverifiable","summary":"Stability (0.13 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a199cd-80b6-72b0-a5df-47ccc5eac432"},{"id":"chg_01a199cd-80b7-7384-a92a-c8c5f0e7d797","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-workyard/workyard#chg-chg_01a199cd-80b7-7384-a92a-c8c5f0e7d797"},{"id":"chg_01a199cd-80b7-7a75-a56f-e5b91a7dba24","kind":"check.unverifiable","summary":"Authorization (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a199cd-80b7-7a75-a56f-e5b91a7dba24"},{"id":"chg_01a199cd-80b7-7f3f-b365-6f22de63ad5c","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-workyard/workyard#chg-chg_01a199cd-80b7-7f3f-b365-6f22de63ad5c"},{"id":"chg_01a199cd-80b8-78b6-9c3b-aa7a88a6c1cd","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a199cd-80b8-78b6-9c3b-aa7a88a6c1cd"},{"id":"chg_01a199cd-80b8-7d94-b21b-f488263d83fd","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-workyard/workyard#chg-chg_01a199cd-80b8-7d94-b21b-f488263d83fd"},{"id":"chg_01a199cd-80b9-7315-8d01-6f5c0ca4ff86","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-workyard/workyard#chg-chg_01a199cd-80b9-7315-8d01-6f5c0ca4ff86"},{"id":"chg_01a199cd-80b9-7ca1-a8f0-6df061293789","kind":"score.total_changed","summary":"Trust score (67 → 18)","materiality":"functional","direction":"regression","scoreDelta":-49,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a199cd-80b9-7ca1-a8f0-6df061293789"},{"id":"chg_01a194a7-0980-7acf-9a1a-c59dc18a6737","kind":"score.total_changed","summary":"Trust score (66 → 67)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a194a7-0980-7acf-9a1a-c59dc18a6737"},{"id":"chg_01a193fb-7e27-708a-859b-2a43c6b5cccc","kind":"check.verdict","summary":"Authorization (partial → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e27-708a-859b-2a43c6b5cccc"},{"id":"chg_01a193fb-7e27-7778-9dd7-9fa84617ba4f","kind":"check.verdict","summary":"MCP protocol (fail → pass)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e27-7778-9dd7-9fa84617ba4f"},{"id":"chg_01a193fb-7e28-74e9-adeb-48ce8fac296f","kind":"prompt.added","summary":"New prompt “add_context_to_a_time_card”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e28-74e9-adeb-48ce8fac296f"},{"id":"chg_01a193fb-7e28-7a64-9454-d5b9b994d250","kind":"prompt.added","summary":"New prompt “approve_a_reviewed_time_card”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e28-7a64-9454-d5b9b994d250"},{"id":"chg_01a193fb-7e29-70ef-8ce8-50189a9b6ed5","kind":"prompt.added","summary":"New prompt “check_who_is_clocked_in”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e29-70ef-8ce8-50189a9b6ed5"},{"id":"chg_01a193fb-7e29-7604-bb1e-3eaa49aa6b85","kind":"prompt.added","summary":"New prompt “find_projects_and_work_sites”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e29-7604-bb1e-3eaa49aa6b85"},{"id":"chg_01a193fb-7e2a-7026-9073-bd6fe1bde94e","kind":"prompt.added","summary":"New prompt “review_submitted_time_cards”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e2a-7026-9073-bd6fe1bde94e"},{"id":"chg_01a193fb-7e2a-776b-afb1-c06e5fe53f1b","kind":"server.version_changed","summary":"Server version (1.6.0 → 1.8.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e2a-776b-afb1-c06e5fe53f1b"},{"id":"chg_01a193fb-7e2a-7e14-b471-bfd88fe80df3","kind":"protocol.version_changed","summary":"MCP protocol version (2025-06-18 → 2025-11-25)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e2a-7e14-b471-bfd88fe80df3"},{"id":"chg_01a193fb-7e2b-7439-9f29-f2e33d9a9e93","kind":"score.total_changed","summary":"Trust score (64 → 66)","materiality":"functional","direction":"improvement","scoreDelta":2,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard#chg-chg_01a193fb-7e2b-7439-9f29-f2e33d9a9e93"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard/changelog.json"},"links":{"html":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard","markdown":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard.md","changelogJson":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard/changelog.json","changelogRss":"https://verifymcp.io/servers/io-usefulapi-workyard/workyard.xml","external":[{"label":"Remote endpoint","href":"https://workyard.usefulapi.io/mcp"},{"label":"Repository","href":"https://github.com/m190/usefulapi-mcp"},{"label":"Website","href":"https://usefulapi.io/workyard/"}]}}