Commit Graph

5 Commits

Author SHA1 Message Date
e38841918d Fix status-cache poisoning, add HTTP timeouts, coerce custom status names
- _status_choices no longer caches failures: a transient /ticket_form_fields
  error used to cache [] forever, silently degrading unresolved=True to an
  unfiltered listing (including Resolved/Closed) until container restart.
  unresolved=True and list_ticket_statuses now return an explicit error when
  the status list can't be fetched instead of degrading silently.
- All API calls (server and skill helper) now use a 30s timeout with a clean
  error, so a hung connection can't block a tool call indefinitely.
- _coerce_status falls back to the instance's live status list, so custom
  names like "Working" coerce to their id instead of 400ing at the API.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 10:38:56 -06:00
0b6747812f Handle custom ticket statuses: list_ticket_statuses tool + unresolved shortcut
The pesco instance defines 13 ticket statuses, not the 4 defaults, so a
(status:2 OR status:3) 'open tickets' filter silently dropped Working,
Scheduled, Waiting*, Pending Approval, etc. — undercounting 24 open tickets as 1.

Add a status helper that reads the status field from /ticket_form_fields and
treats only ids 4/5 (and closed/resolved-labelled) as terminal. Expose
list_ticket_statuses() and a list_tickets(unresolved=True) shortcut that builds
the full non-terminal status clause automatically. Document the gotcha in the
skill reference.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 21:36:25 -06:00
61c0b39e06 Improve ticket-filter guidance: agent_id lookup, status OR, workspace_id
list_tickets struggled to express 'assigned to me and not resolved/closed'.
Document that assignee filtering uses the numeric agent_id (resolve from email
via list_agents first) and that open statuses must be enumerated as
(status:2 OR status:3) since there's no negation. Add workspace_id passthrough
for multi-workspace accounts. Mirror the guidance in the skill reference.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 21:28:36 -06:00
7e0a3fabc2 Fix MCP 'Invalid Host header' (421) for LAN access
The streamable-HTTP transport enables DNS-rebinding protection by default,
which rejects non-localhost Host headers with HTTP 421. The server is reached
by LAN IP via mcp-remote (not a browser) and is gated by a bearer token, so
disable the protection via TransportSecuritySettings.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 21:12:40 -06:00
133b8fa569 Add Freshservice MCP server for Cowork deployment
Cowork runs the agent in an isolated VM, so the uploaded skill can't see host
credentials or reach the Freshservice host. Add an HTTP/streamable MCP server
(bearer-auth, Dockerfile, compose) to run as a container on the LAN box and
connect via mcp-remote like the existing sharepoint-lists server. The skill
remains the right tool for the non-sandboxed Claude Code CLI.

Also gitignore mcp-server/.env and include the desktop skill install package.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 18:41:02 -06:00