Skip to content

feat: Regular Time entry support with name resolution#33

Merged
asachs01 merged 1 commit intowyre-technology:mainfrom
shaank0:feat/regular-time-entries
Apr 3, 2026
Merged

feat: Regular Time entry support with name resolution#33
asachs01 merged 1 commit intowyre-technology:mainfrom
shaank0:feat/regular-time-entries

Conversation

@shaank0
Copy link
Copy Markdown
Contributor

@shaank0 shaank0 commented Mar 14, 2026

Summary

  • Regular Time entriesautotask_create_time_entry can now create time entries not tied to a ticket, task, or project (for meetings, admin work, training, etc.)
  • Name-based resolution — accepts resourceName (e.g., "Will Spence") instead of requiring numeric resourceID
  • Category selection — accepts category (e.g., "Internal Meeting") instead of requiring numeric internalBillingCodeID
  • Smart prompting — when resource or category is missing, returns available options instead of failing
  • Billing code stubs implementedsearchBillingCodes() and getBillingCode() now work instead of throwing "not available" errors

Example usage in Claude Desktop:

"Log 1 hour of regular time for Will Spence, internal meeting, summary: B and I meeting"

Depends on

Test plan

  • Create Regular Time entry with resourceName + category (both resolved automatically)
  • Verify prompting when no resource specified → lists prompt for name
  • Verify prompting when no category specified → lists available categories (Internal Meeting, Training, PTO, etc.)
  • Verify ticket-scoped time entries still work unchanged
  • Verify task/project-scoped time entries still work unchanged
  • Verify invalid resource name returns helpful error
  • Verify invalid category name returns list of valid options

🤖 Generated with Claude Code

Copy link
Copy Markdown
Member

@asachs01 asachs01 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the contribution @shaank0! The Regular Time entry feature is a great addition. However, there are some blockers before this can be merged:

Blockers

  1. Dependent SDK PR is closed. This PR depends on wyre-technology/autotask-node#153, which is closed (not merged). The SDK methods this relies on (createRegularTimeEntry(), resolveResourceByName(), getInternalBillingCodes(), etc.) don't exist, so all new code paths will throw at runtime.

  2. CI is failing. The existing test should handle unsupported entity methods with proper error messages expects getBillingCode() to throw "Billing codes API not directly available", but the PR changes that method to call the (non-existent) SDK. The test needs updating.

  3. No new tests. The PR adds substantial new logic (name resolution, category resolution, prompting flow, three distinct createTimeEntry paths) but includes zero new tests.

Other Notes

  • Heavy use of (client as any) casts — understandable if the SDK types aren't updated, but means zero compile-time safety
  • searchBillingCodes ignores its _options parameter entirely
  • Handler mutates the a (arguments) object directly with delete — fragile if the framework ever freezes or logs args after the handler

Next steps: Please get the SDK PR (autotask-node#153) reopened and merged first, then update tests and we can move forward. The architecture and approach look solid otherwise.

github-actions Bot pushed a commit to KameronTT/autotask-mcp that referenced this pull request Apr 1, 2026
# 1.0.0 (2026-04-01)

* feat!: Namespace all MCP tools with 'autotask_' prefix (v2.0.0) ([1190101](1190101))

### Bug Fixes

* add CLI bin entry and enforce test failures in CI ([10ce1c7](10ce1c7)), closes [wyre-technology#4](https://github.com/KameronTT/autotask-mcp/issues/4) [wyre-technology#4](https://github.com/KameronTT/autotask-mcp/issues/4)
* add missing required fields to task, project note, and project creation ([df72fb4](df72fb4)), closes [wyre-technology/msp-claude-plugins#36](wyre-technology/msp-claude-plugins#36) [wyre-technology#40](https://github.com/KameronTT/autotask-mcp/issues/40) [wyre-technology#41](https://github.com/KameronTT/autotask-mcp/issues/41) [wyre-technology#42](https://github.com/KameronTT/autotask-mcp/issues/42) [wyre-technology#40](wyre-technology#40) [wyre-technology#41](wyre-technology#41) [wyre-technology#42](wyre-technology#42)
* Address GitHub issues [wyre-technology#3](https://github.com/KameronTT/autotask-mcp/issues/3), [wyre-technology#8](https://github.com/KameronTT/autotask-mcp/issues/8), [wyre-technology#9](https://github.com/KameronTT/autotask-mcp/issues/9) - search filtering and API endpoints ([b11256b](b11256b))
* **cache:** solve thundering herd bug resolving company mapping limits ([ffa318a](ffa318a))
* **ci:** add GITHUB_TOKEN to version detection step ([99e2b29](99e2b29))
* **ci:** add multi-platform Docker builds for arm64 support ([9e565c6](9e565c6))
* **ci:** Add proper permissions for release and security scan jobs ([d60e138](d60e138))
* **ci:** Disable npm publishing in semantic-release ([ae11880](ae11880))
* **ci:** fix broken YAML in Discord notification step ([bc3b34a](bc3b34a))
* **ci:** move Discord notification into release workflow ([113d526](113d526))
* **ci:** pack MCPB bundle after semantic-release version bump ([53c952e](53c952e))
* **ci:** replace dist file uploads with MCPB bundle in releases ([280127f](280127f))
* **ci:** Replace local file dependency with git dependency for autotask-node ([828bf1a](828bf1a))
* **ci:** Resolve npm ci prefer-offline/online conflict in Dockerfile ([60734c8](60734c8))
* **ci:** use Node 22 in release job for semantic-release v25 compatibility ([f8d96eb](f8d96eb))
* **deploy:** replace node_compat with nodejs_compat for Wrangler v4 ([e0bb78d](e0bb78d)), closes [wyre-technology#50](https://github.com/KameronTT/autotask-mcp/issues/50)
* **deps:** bump autotask-node to main branch with endpoint semaphore fix ([35cef9c](35cef9c))
* **deps:** update autotask-node to compiled semaphore fix ([f282e21](f282e21))
* **deps:** Update autotask-node to v2.0.6 ([1a2e08e](1a2e08e))
* **deps:** update autotask-node with gzip compression body fix ([62a6373](62a6373)), closes [#151](https://github.com/KameronTT/autotask-mcp/issues/151)
* **deps:** Update package-lock.json with correct autotask-node v2.0.6 hash ([7c0ff90](7c0ff90))
* **deps:** upgrade semantic-release to ^25.0.0 for github plugin compatibility ([41e88f1](41e88f1))
* disable broken gzip compression and fix create ID parsing ([d6889f3](d6889f3))
* **docker:** drop arm64 platform to fix QEMU build failures ([038f21c](038f21c))
* **docker:** Fix build and runtime failures in Dockerfile ([c6e37e2](c6e37e2))
* **docker:** pin npm to v10 to fix git dep install failure ([bab0dc8](bab0dc8))
* **docs:** Add base path prefix to content links for GitHub Pages ([be4b661](be4b661))
* **docs:** Use npx for Claude Code instructions instead of bundle extraction ([e5c7a01](e5c7a01))
* don't crash on missing credentials, return tool-level errors instead ([cd9294c](cd9294c))
* **expenses:** correct weekEnding field name and required params for expense report creation ([226d38d](226d38d))
* **gateway:** skip autotask-node connection test in stateless mode ([67643c6](67643c6))
* load .env file at startup for credential configuration ([192c52c](192c52c))
* **mapping:** coalesce concurrent cache refreshes and fix fetch-all fallback ([ea08f80](ea08f80))
* **mcpb:** Add bundle signing, size reduction, and Claude Desktop compatibility ([89a4711](89a4711))
* **mcpb:** Fix bundle runtime errors and add automated test harness ([c3beb22](c3beb22))
* **notes:** use sub-resource URL /Tickets/{id}/Notes for create_ticket_note ([wyre-technology#33](https://github.com/KameronTT/autotask-mcp/issues/33)) ([d9a26a0](d9a26a0))
* prevent dotenv stdout pollution in MCP stdio transport ([8818749](8818749))
* prevent stdout pollution from autotask-node's dotenv.config() ([abc61fd](abc61fd))
* **projects:** build searchProjects filters from individual params ([6e30860](6e30860)), closes [wyre-technology/msp-claude-plugins#36](wyre-technology/msp-claude-plugins#36)
* quote item creation 404 and quote creation 500 errors ([wyre-technology#30](https://github.com/KameronTT/autotask-mcp/issues/30)) ([7f8e64f](7f8e64f)), closes [wyre-technology/autotask-node#149](wyre-technology/autotask-node#149)
* rename duplicate step id 'version' to 'release-version' in docker job ([5e093cb](5e093cb))
* resolve .env relative to script location as fallback ([367eb0d](367eb0d))
* resolve merge conflict markers from squash merges ([6c152eb](6c152eb)), closes [wyre-technology#43](https://github.com/KameronTT/autotask-mcp/issues/43) [wyre-technology#44](https://github.com/KameronTT/autotask-mcp/issues/44) [wyre-technology#45](https://github.com/KameronTT/autotask-mcp/issues/45)
* **security:** address code scanning vulnerabilities ([9fba187](9fba187))
* **security:** update brace-expansion for CVE-2025-5889 ([wyre-technology#19](https://github.com/KameronTT/autotask-mcp/issues/19)) ([619d8d8](619d8d8)), closes [wyre-technology#13](https://github.com/KameronTT/autotask-mcp/issues/13) [wyre-technology#14](https://github.com/KameronTT/autotask-mcp/issues/14)
* **security:** update Docker base image for npm CVEs ([wyre-technology#16](https://github.com/KameronTT/autotask-mcp/issues/16)) ([cef86ba](cef86ba)), closes [wyre-technology#13](https://github.com/KameronTT/autotask-mcp/issues/13)
* **security:** update lodash for CVE-2025-13465 ([wyre-technology#18](https://github.com/KameronTT/autotask-mcp/issues/18)) ([99e856d](99e856d)), closes [wyre-technology#13](https://github.com/KameronTT/autotask-mcp/issues/13) [wyre-technology#14](https://github.com/KameronTT/autotask-mcp/issues/14)
* **security:** update MCP SDK for CVE-2026-0621, CVE-2025-66414 ([wyre-technology#17](https://github.com/KameronTT/autotask-mcp/issues/17)) ([33a7d81](33a7d81)), closes [wyre-technology#13](https://github.com/KameronTT/autotask-mcp/issues/13) [wyre-technology#11](https://github.com/KameronTT/autotask-mcp/issues/11)
* **security:** update tar for CVE-2026-23950, CVE-2026-23745 ([6890ca6](6890ca6)), closes [wyre-technology#12](https://github.com/KameronTT/autotask-mcp/issues/12)
* surface Autotask API validation errors instead of generic 500 ([wyre-technology#32](https://github.com/KameronTT/autotask-mcp/issues/32)) ([b8e2453](b8e2453))
* sync manifest.json version from package.json at pack time ([c7a9724](c7a9724))
* task creation endpoint, ticket notes, field info + phase tools ([9d7fa42](9d7fa42)), closes [wyre-technology#46](https://github.com/KameronTT/autotask-mcp/issues/46) [wyre-technology#47](https://github.com/KameronTT/autotask-mcp/issues/47)
* **test:** Run all MCPB tests in single server session to avoid rate limits ([7b425cf](7b425cf))
* **tests:** Resolve ESM compatibility and rewrite mapping tests ([a294a7c](a294a7c))
* **tests:** update expense item test assertions to match refactored API ([9affc62](9affc62)), closes [wyre-technology#27](https://github.com/KameronTT/autotask-mcp/issues/27)
* **tests:** update expense item tests to match implemented API signatures ([7fac014](7fac014))
* **tickets:** update autotask-node lockfile with PATCH collection endpoint fix ([4156635](4156635))
* **tickets:** update autotask-node to PATCH collection endpoint fix ([0cf01d8](0cf01d8))
* **tickets:** use PATCH instead of PUT for updateTicket ([c0a0b7b](c0a0b7b))
* **tools:** return explicit not-found errors to prevent LLM hallucination ([wyre-technology#31](https://github.com/KameronTT/autotask-mcp/issues/31)) ([7f628db](7f628db))
* upgrade autotask-node to v2.0.3 (removes dotenv dependency) ([1a5727b](1a5727b))
* upgrade autotask-node to v2.0.4 (graceful logger) ([213db40](213db40))
* upgrade autotask-node to v2.0.5 (stderr-only logging) ([a01588b](a01588b))
* use autotask-node v2.1.0 parent-child URL pattern for note/time entry creates ([6397094](6397094))
* use correct parent-child URL patterns for child entity creation ([wyre-technology#24](https://github.com/KameronTT/autotask-mcp/issues/24)) ([47f2a75](47f2a75))
* use stateless per-request server pattern for HTTP transport ([e8c6326](e8c6326))

### Features

* add create_expense_item tool and fix expense report accessors ([0cf9f09](0cf9f09))
* add DigitalOcean and Cloudflare deploy infrastructure and badges ([b68bad5](b68bad5))
* Add ESLint configuration file ([3a8ef4d](3a8ef4d))
* Add gateway mode for hosted MCP deployments ([14d5682](14d5682))
* add HTTP Streamable transport for remote MCP access ([2d31853](2d31853)), closes [wyre-technology#7](https://github.com/KameronTT/autotask-mcp/issues/7)
* add MCPB (MCP Bundle) packaging for desktop distribution ([e7601b1](e7601b1))
* Add picklist discovery tools and elicitation support ([93c68f2](93c68f2))
* add Service Call support (11 new tools) ([11b682e](11b682e)), closes [wyre-technology#38](https://github.com/KameronTT/autotask-mcp/issues/38)
* add Service Calls CRUD support ([wyre-technology#38](https://github.com/KameronTT/autotask-mcp/issues/38)) ([163d5eb](163d5eb))
* add TicketCharges CRUD support ([b61aaf0](b61aaf0))
* add TicketCharges CRUD support ([wyre-technology#36](https://github.com/KameronTT/autotask-mcp/issues/36)) ([de2d684](de2d684))
* **billing:** Add BillingItems and BillingItemApprovalLevels support ([4c88034](4c88034)), closes [wyre-technology#21](https://github.com/KameronTT/autotask-mcp/issues/21)
* bump autotask-node to v2.2.0 with Regular Time entry support ([00f1f1e](00f1f1e))
* Initialize Taskmaster and fix build setup ([5e22e0c](5e22e0c))
* Quote Builder - create quotes with line items from cost sheets ([wyre-technology#29](https://github.com/KameronTT/autotask-mcp/issues/29)) ([5da3a98](5da3a98))
* **search:** Add compact response format, smart defaults, and pagination ([00aa4b9](00aa4b9))
* Switch Docker publishing to GitHub Container Registry ([97fa1ac](97fa1ac))
* **time-entries:** add approvalStatus filter for un-posted entries ([d27f0ab](d27f0ab)), closes [wyre-technology#21](https://github.com/KameronTT/autotask-mcp/issues/21)
* **tools:** add autotask_update_ticket tool ([b73c3f9](b73c3f9)), closes [wyre-technology#28](https://github.com/KameronTT/autotask-mcp/issues/28)
* **tools:** wire autotask_update_ticket handler ([13fe142](13fe142))

### Reverts

* remove arm64 platform and QEMU, keep linux/amd64 only ([d2f4d6a](d2f4d6a))

### BREAKING CHANGES

* All 35 MCP tools now use 'autotask_' prefix to prevent
naming collisions when multiple MCP servers are connected.

- search_companies → autotask_search_companies
- create_ticket → autotask_create_ticket
- test_connection → autotask_test_connection
- (all other tools follow same pattern)

Migration: Update all tool calls to use new namespaced names.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@asachs01 asachs01 marked this pull request as draft April 3, 2026 14:28
Adds the ability to create "Regular Time" entries (meetings, admin work,
training, etc.) that are not tied to a ticket, task, or project.

Tool changes:
- autotask_create_time_entry now accepts resourceName (auto-resolves to
  resourceID) and category (auto-resolves to internalBillingCodeID)
- When no resource is specified, prompts user for their name
- When no category is specified on Regular Time, lists available
  categories and prompts user to pick one
- Added projectID field for project-scoped time entries

Service changes:
- createTimeEntry now supports Regular Time via SDK's
  createRegularTimeEntry() when no ticket/task/project is specified
- Implemented resolveResourceByName(), getInternalBillingCodeNames(),
  and resolveInternalBillingCodeByName() delegating to SDK helpers
- Implemented searchBillingCodes() and getBillingCode() which were
  previously unimplemented stubs

Key Autotask API details:
- Regular Time requires internalBillingCodeID (not billingCodeID)
- Only BillingCodes with useType=3 are valid internal categories
- The API returns {itemId: N} for creates, not {id: N}

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@asachs01 asachs01 force-pushed the feat/regular-time-entries branch from 416d1a9 to f1947a8 Compare April 3, 2026 14:38
@asachs01 asachs01 marked this pull request as ready for review April 3, 2026 14:38
@asachs01 asachs01 merged commit 02e2e9a into wyre-technology:main Apr 3, 2026
0 of 7 checks passed
asachs01 added a commit that referenced this pull request Apr 8, 2026
Add four new MCP tools for managing Autotask ticket checklist items:

- autotask_search_ticket_checklist_items
- autotask_create_ticket_checklist_item
- autotask_update_ticket_checklist_item
- autotask_delete_ticket_checklist_item

Checklist items are a sub-resource of tickets in the Autotask REST API
and can only be accessed via /Tickets/{id}/ChecklistItems. Following the
same pattern as the note-creation fix in #33, the service talks to the
underlying axios instance directly rather than routing through the
autotask-node SDK, which does not expose this sub-resource. API-level
validation errors are surfaced instead of being swallowed as generic
500s (see #32).

Refs #55

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
asachs01 added a commit that referenced this pull request Apr 8, 2026
Add four new MCP tools for managing Autotask ticket checklist items:

- autotask_search_ticket_checklist_items
- autotask_create_ticket_checklist_item
- autotask_update_ticket_checklist_item
- autotask_delete_ticket_checklist_item

Checklist items are a sub-resource of tickets in the Autotask REST API
and can only be accessed via /Tickets/{id}/ChecklistItems. Following the
same pattern as the note-creation fix in #33, the service talks to the
underlying axios instance directly rather than routing through the
autotask-node SDK, which does not expose this sub-resource. API-level
validation errors are surfaced instead of being swallowed as generic
500s (see #32).

Refs #55

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
github-actions Bot pushed a commit that referenced this pull request Apr 8, 2026
# [2.18.0](v2.17.2...v2.18.0) (2026-04-08)

### Features

* **attachments:** add autotask_create_ticket_attachment tool ([#55](#55)) ([#62](#62)) ([8ff325e](8ff325e))
* **billing:** add invoice details tool and billing item filters ([#55](#55)) ([#61](#61)) ([cc9354f](cc9354f))
* **checklist:** add ticket checklist items CRUD tools ([#55](#55)) ([#59](#59)) ([78e0f78](78e0f78)), closes [#33](#33) [#32](#32)
* **config:** auto-detect Autotask API zone from username ([#55](#55)) ([#60](#60)) ([01a3bae](01a3bae))
* **projects:** add autotask_update_project tool ([#55](#55)) ([#57](#57)) ([1efeead](1efeead))
* **tickets:** expand create/update_ticket field coverage ([#55](#55)) ([#58](#58)) ([16614ff](16614ff))
github-actions Bot pushed a commit to KameronTT/autotask-mcp that referenced this pull request Apr 8, 2026
# 1.0.0 (2026-04-08)

* feat!: Namespace all MCP tools with 'autotask_' prefix (v2.0.0) ([1190101](1190101))

### Bug Fixes

* add CLI bin entry and enforce test failures in CI ([10ce1c7](10ce1c7)), closes [wyre-technology#4](https://github.com/KameronTT/autotask-mcp/issues/4) [wyre-technology#4](https://github.com/KameronTT/autotask-mcp/issues/4)
* add missing required fields to task, project note, and project creation ([df72fb4](df72fb4)), closes [wyre-technology/msp-claude-plugins#36](wyre-technology/msp-claude-plugins#36) [wyre-technology#40](https://github.com/KameronTT/autotask-mcp/issues/40) [wyre-technology#41](https://github.com/KameronTT/autotask-mcp/issues/41) [wyre-technology#42](https://github.com/KameronTT/autotask-mcp/issues/42) [wyre-technology#40](wyre-technology#40) [wyre-technology#41](wyre-technology#41) [wyre-technology#42](wyre-technology#42)
* Address GitHub issues [wyre-technology#3](https://github.com/KameronTT/autotask-mcp/issues/3), [wyre-technology#8](https://github.com/KameronTT/autotask-mcp/issues/8), [wyre-technology#9](https://github.com/KameronTT/autotask-mcp/issues/9) - search filtering and API endpoints ([b11256b](b11256b))
* allow unauthenticated tools/list in gateway mode ([afa5120](afa5120))
* **cache:** solve thundering herd bug resolving company mapping limits ([ffa318a](ffa318a))
* **ci:** add GITHUB_TOKEN to version detection step ([99e2b29](99e2b29))
* **ci:** add multi-platform Docker builds for arm64 support ([9e565c6](9e565c6))
* **ci:** Add proper permissions for release and security scan jobs ([d60e138](d60e138))
* **ci:** deploy :latest tag, force revision via env var bump ([dd31423](dd31423))
* **ci:** Disable npm publishing in semantic-release ([ae11880](ae11880))
* **ci:** fix broken YAML in Discord notification step ([bc3b34a](bc3b34a))
* **ci:** move Discord notification into release workflow ([113d526](113d526))
* **ci:** pack MCPB bundle after semantic-release version bump ([53c952e](53c952e))
* **ci:** replace dist file uploads with MCPB bundle in releases ([280127f](280127f))
* **ci:** Replace local file dependency with git dependency for autotask-node ([828bf1a](828bf1a))
* **ci:** Resolve npm ci prefer-offline/online conflict in Dockerfile ([60734c8](60734c8))
* **ci:** use Node 22 in release job for semantic-release v25 compatibility ([f8d96eb](f8d96eb))
* **deploy:** replace node_compat with nodejs_compat for Wrangler v4 ([e0bb78d](e0bb78d)), closes [wyre-technology#50](https://github.com/KameronTT/autotask-mcp/issues/50)
* **deps:** bump autotask-node to main branch with endpoint semaphore fix ([35cef9c](35cef9c))
* **deps:** update autotask-node to compiled semaphore fix ([f282e21](f282e21))
* **deps:** Update autotask-node to v2.0.6 ([1a2e08e](1a2e08e))
* **deps:** update autotask-node with gzip compression body fix ([62a6373](62a6373)), closes [#151](https://github.com/KameronTT/autotask-mcp/issues/151)
* **deps:** Update package-lock.json with correct autotask-node v2.0.6 hash ([7c0ff90](7c0ff90))
* **deps:** upgrade semantic-release to ^25.0.0 for github plugin compatibility ([41e88f1](41e88f1))
* disable broken gzip compression and fix create ID parsing ([d6889f3](d6889f3))
* **docker:** drop arm64 platform to fix QEMU build failures ([038f21c](038f21c))
* **docker:** Fix build and runtime failures in Dockerfile ([c6e37e2](c6e37e2))
* **docker:** pin npm to v10 to fix git dep install failure ([bab0dc8](bab0dc8))
* **docs:** Add base path prefix to content links for GitHub Pages ([be4b661](be4b661))
* **docs:** Use npx for Claude Code instructions instead of bundle extraction ([e5c7a01](e5c7a01))
* don't crash on missing credentials, return tool-level errors instead ([cd9294c](cd9294c))
* **expenses:** correct weekEnding field name and required params for expense report creation ([226d38d](226d38d))
* **gateway:** skip autotask-node connection test in stateless mode ([67643c6](67643c6))
* load .env file at startup for credential configuration ([192c52c](192c52c))
* **mapping:** coalesce concurrent cache refreshes and fix fetch-all fallback ([ea08f80](ea08f80))
* **mcpb:** Add bundle signing, size reduction, and Claude Desktop compatibility ([89a4711](89a4711))
* **mcpb:** Fix bundle runtime errors and add automated test harness ([c3beb22](c3beb22))
* **notes:** use sub-resource URL /Tickets/{id}/Notes for create_ticket_note ([wyre-technology#33](https://github.com/KameronTT/autotask-mcp/issues/33)) ([d9a26a0](d9a26a0))
* prevent dotenv stdout pollution in MCP stdio transport ([8818749](8818749))
* prevent stdout pollution from autotask-node's dotenv.config() ([abc61fd](abc61fd))
* **projects:** build searchProjects filters from individual params ([6e30860](6e30860)), closes [wyre-technology/msp-claude-plugins#36](wyre-technology/msp-claude-plugins#36)
* quote item creation 404 and quote creation 500 errors ([wyre-technology#30](https://github.com/KameronTT/autotask-mcp/issues/30)) ([7f8e64f](7f8e64f)), closes [wyre-technology/autotask-node#149](wyre-technology/autotask-node#149)
* rename duplicate step id 'version' to 'release-version' in docker job ([5e093cb](5e093cb))
* resolve .env relative to script location as fallback ([367eb0d](367eb0d))
* resolve Docker build failure caused by prepare script running before source copy ([87b0a0c](87b0a0c))
* resolve merge conflict markers from squash merges ([6c152eb](6c152eb)), closes [wyre-technology#43](https://github.com/KameronTT/autotask-mcp/issues/43) [wyre-technology#44](https://github.com/KameronTT/autotask-mcp/issues/44) [wyre-technology#45](https://github.com/KameronTT/autotask-mcp/issues/45)
* **security:** address code scanning vulnerabilities ([9fba187](9fba187))
* **security:** update brace-expansion for CVE-2025-5889 ([wyre-technology#19](https://github.com/KameronTT/autotask-mcp/issues/19)) ([619d8d8](619d8d8)), closes [wyre-technology#13](https://github.com/KameronTT/autotask-mcp/issues/13) [wyre-technology#14](https://github.com/KameronTT/autotask-mcp/issues/14)
* **security:** update Docker base image for npm CVEs ([wyre-technology#16](https://github.com/KameronTT/autotask-mcp/issues/16)) ([cef86ba](cef86ba)), closes [wyre-technology#13](https://github.com/KameronTT/autotask-mcp/issues/13)
* **security:** update lodash for CVE-2025-13465 ([wyre-technology#18](https://github.com/KameronTT/autotask-mcp/issues/18)) ([99e856d](99e856d)), closes [wyre-technology#13](https://github.com/KameronTT/autotask-mcp/issues/13) [wyre-technology#14](https://github.com/KameronTT/autotask-mcp/issues/14)
* **security:** update MCP SDK for CVE-2026-0621, CVE-2025-66414 ([wyre-technology#17](https://github.com/KameronTT/autotask-mcp/issues/17)) ([33a7d81](33a7d81)), closes [wyre-technology#13](https://github.com/KameronTT/autotask-mcp/issues/13) [wyre-technology#11](https://github.com/KameronTT/autotask-mcp/issues/11)
* **security:** update tar for CVE-2026-23950, CVE-2026-23745 ([6890ca6](6890ca6)), closes [wyre-technology#12](https://github.com/KameronTT/autotask-mcp/issues/12)
* surface Autotask API validation errors instead of generic 500 ([wyre-technology#32](https://github.com/KameronTT/autotask-mcp/issues/32)) ([b8e2453](b8e2453))
* sync manifest.json version from package.json at pack time ([c7a9724](c7a9724))
* task creation endpoint, ticket notes, field info + phase tools ([9d7fa42](9d7fa42)), closes [wyre-technology#46](https://github.com/KameronTT/autotask-mcp/issues/46) [wyre-technology#47](https://github.com/KameronTT/autotask-mcp/issues/47)
* **test:** Run all MCPB tests in single server session to avoid rate limits ([7b425cf](7b425cf))
* **tests:** Resolve ESM compatibility and rewrite mapping tests ([a294a7c](a294a7c))
* **tests:** update expense item test assertions to match refactored API ([9affc62](9affc62)), closes [wyre-technology#27](https://github.com/KameronTT/autotask-mcp/issues/27)
* **tests:** update expense item tests to match implemented API signatures ([7fac014](7fac014))
* **tests:** update test expectations for implemented billing code methods ([1833d02](1833d02))
* **tickets:** update autotask-node lockfile with PATCH collection endpoint fix ([4156635](4156635))
* **tickets:** update autotask-node to PATCH collection endpoint fix ([0cf01d8](0cf01d8))
* **tickets:** use PATCH instead of PUT for updateTicket ([c0a0b7b](c0a0b7b))
* **time-entries:** bypass broken list() filter by calling /TimeEntries/query directly ([146e94d](146e94d)), closes [wyre-technology#53](https://github.com/KameronTT/autotask-mcp/issues/53)
* **tools:** return explicit not-found errors to prevent LLM hallucination ([wyre-technology#31](https://github.com/KameronTT/autotask-mcp/issues/31)) ([7f628db](7f628db))
* upgrade autotask-node to v2.0.3 (removes dotenv dependency) ([1a5727b](1a5727b))
* upgrade autotask-node to v2.0.4 (graceful logger) ([213db40](213db40))
* upgrade autotask-node to v2.0.5 (stderr-only logging) ([a01588b](a01588b))
* use autotask-node v2.1.0 parent-child URL pattern for note/time entry creates ([6397094](6397094))
* use correct parent-child URL patterns for child entity creation ([wyre-technology#24](https://github.com/KameronTT/autotask-mcp/issues/24)) ([47f2a75](47f2a75))
* use stateless per-request server pattern for HTTP transport ([e8c6326](e8c6326))

### Features

* add create_expense_item tool and fix expense report accessors ([0cf9f09](0cf9f09))
* add DigitalOcean and Cloudflare deploy infrastructure and badges ([b68bad5](b68bad5))
* Add ESLint configuration file ([3a8ef4d](3a8ef4d))
* Add gateway mode for hosted MCP deployments ([14d5682](14d5682))
* add HTTP Streamable transport for remote MCP access ([2d31853](2d31853)), closes [wyre-technology#7](https://github.com/KameronTT/autotask-mcp/issues/7)
* add MCPB (MCP Bundle) packaging for desktop distribution ([e7601b1](e7601b1))
* Add picklist discovery tools and elicitation support ([93c68f2](93c68f2))
* add Regular Time entry support with name resolution ([f1947a8](f1947a8))
* add Service Call support (11 new tools) ([11b682e](11b682e)), closes [wyre-technology#38](https://github.com/KameronTT/autotask-mcp/issues/38)
* add Service Calls CRUD support ([wyre-technology#38](https://github.com/KameronTT/autotask-mcp/issues/38)) ([163d5eb](163d5eb))
* add TicketCharges CRUD support ([b61aaf0](b61aaf0))
* add TicketCharges CRUD support ([wyre-technology#36](https://github.com/KameronTT/autotask-mcp/issues/36)) ([de2d684](de2d684))
* **attachments:** add autotask_create_ticket_attachment tool ([wyre-technology#55](https://github.com/KameronTT/autotask-mcp/issues/55)) ([wyre-technology#62](https://github.com/KameronTT/autotask-mcp/issues/62)) ([8ff325e](8ff325e))
* **billing:** Add BillingItems and BillingItemApprovalLevels support ([4c88034](4c88034)), closes [wyre-technology#21](https://github.com/KameronTT/autotask-mcp/issues/21)
* **billing:** add invoice details tool and billing item filters ([wyre-technology#55](https://github.com/KameronTT/autotask-mcp/issues/55)) ([wyre-technology#61](https://github.com/KameronTT/autotask-mcp/issues/61)) ([cc9354f](cc9354f))
* bump autotask-node to v2.2.0 with Regular Time entry support ([00f1f1e](00f1f1e))
* **checklist:** add ticket checklist items CRUD tools ([wyre-technology#55](https://github.com/KameronTT/autotask-mcp/issues/55)) ([wyre-technology#59](https://github.com/KameronTT/autotask-mcp/issues/59)) ([78e0f78](78e0f78)), closes [wyre-technology#33](https://github.com/KameronTT/autotask-mcp/issues/33) [wyre-technology#32](https://github.com/KameronTT/autotask-mcp/issues/32)
* **config:** auto-detect Autotask API zone from username ([wyre-technology#55](https://github.com/KameronTT/autotask-mcp/issues/55)) ([wyre-technology#60](https://github.com/KameronTT/autotask-mcp/issues/60)) ([01a3bae](01a3bae))
* Initialize Taskmaster and fix build setup ([5e22e0c](5e22e0c))
* **projects:** add autotask_update_project tool ([wyre-technology#55](https://github.com/KameronTT/autotask-mcp/issues/55)) ([wyre-technology#57](https://github.com/KameronTT/autotask-mcp/issues/57)) ([1efeead](1efeead))
* Quote Builder - create quotes with line items from cost sheets ([wyre-technology#29](https://github.com/KameronTT/autotask-mcp/issues/29)) ([5da3a98](5da3a98))
* **search:** Add compact response format, smart defaults, and pagination ([00aa4b9](00aa4b9))
* **site-config:** add company site configuration read and update tools ([wyre-technology#55](https://github.com/KameronTT/autotask-mcp/issues/55)) ([wyre-technology#63](https://github.com/KameronTT/autotask-mcp/issues/63)) ([bb26f1a](bb26f1a)), closes [wyre-technology#5](https://github.com/KameronTT/autotask-mcp/issues/5)
* Switch Docker publishing to GitHub Container Registry ([97fa1ac](97fa1ac))
* **tickets:** expand create/update_ticket field coverage ([wyre-technology#55](https://github.com/KameronTT/autotask-mcp/issues/55)) ([wyre-technology#58](https://github.com/KameronTT/autotask-mcp/issues/58)) ([16614ff](16614ff))
* **time-entries:** add approvalStatus filter for un-posted entries ([d27f0ab](d27f0ab)), closes [wyre-technology#21](https://github.com/KameronTT/autotask-mcp/issues/21)
* **tools:** add autotask_update_ticket tool ([b73c3f9](b73c3f9)), closes [wyre-technology#28](https://github.com/KameronTT/autotask-mcp/issues/28)
* **tools:** wire autotask_update_ticket handler ([13fe142](13fe142))

### Reverts

* remove arm64 platform and QEMU, keep linux/amd64 only ([d2f4d6a](d2f4d6a))

### BREAKING CHANGES

* All 35 MCP tools now use 'autotask_' prefix to prevent
naming collisions when multiple MCP servers are connected.

- search_companies → autotask_search_companies
- create_ticket → autotask_create_ticket
- test_connection → autotask_test_connection
- (all other tools follow same pattern)

Migration: Update all tool calls to use new namespaced names.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants