Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
TWIST_API_KEY=your-key-goes-here
COMMS_API_KEY=your-key-goes-here
# Optional: override the API base URL (defaults to https://comms.todoist.com)
# COMMS_BASE_URL=https://comms.staging.todoist.com
72 changes: 0 additions & 72 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,6 @@ jobs:
- name: Install dependencies
run: npm ci

- name: Capture previous tag
id: previous_tag
run: echo "tag=$(git describe --tags --abbrev=0 2>/dev/null || true)" >> "$GITHUB_OUTPUT"

- name: Release
run: npx semantic-release
env:
Expand All @@ -79,71 +75,3 @@ jobs:
GIT_AUTHOR_EMAIL: ${{ steps.bot_user.outputs.id }}+${{ steps.generate_token.outputs.app-slug }}[bot]@users.noreply.github.com
GIT_COMMITTER_NAME: ${{ steps.generate_token.outputs.app-slug }}[bot]
GIT_COMMITTER_EMAIL: ${{ steps.bot_user.outputs.id }}+${{ steps.generate_token.outputs.app-slug }}[bot]@users.noreply.github.com

- name: Derive release announcement
id: announcement
env:
PREVIOUS_TAG: ${{ steps.previous_tag.outputs.tag }}
run: |
git fetch --force --tags origin

new_tag="$(git describe --tags --abbrev=0 2>/dev/null || true)"
if [ -z "${new_tag}" ] || [ "${new_tag}" = "${PREVIOUS_TAG}" ]; then
echo "should_announce=false" >> "$GITHUB_OUTPUT"
exit 0
fi

package_name="$(node -p "JSON.parse(require('fs').readFileSync('package.json', 'utf8')).name")"
package_version="$(node -p "JSON.parse(require('fs').readFileSync('package.json', 'utf8')).version")"
release_version="${new_tag#v}"

package_url="https://www.npmjs.com/package/${package_name}/v/${package_version}"
release_url="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/tag/${new_tag}"
repo_url="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}"

if [ -n "${PREVIOUS_TAG}" ]; then
changelog="$(git log --no-merges --reverse --pretty='format:- %s (%H-%h)' "${PREVIOUS_TAG}..${new_tag}" | grep -v '^- chore(release): ' || true)"
else
changelog="$(git log --no-merges --reverse --pretty='format:- %s (%H-%h)' "${new_tag}" | grep -v '^- chore(release): ' || true)"
fi

if [ -z "${changelog}" ]; then
changelog='- No additional commits listed.'
else
changelog="$(printf '%s\n' "${changelog}" | sed -E -e 's,\(([a-f0-9]+)-([a-f0-9]+)\),([`\2`]('"${repo_url}"'/commit/\1)),g' | sed -E -e 's,\(#([0-9]+)\),([#\1]('"${repo_url}"'/pull/\1)),g')"
fi

{
echo "should_announce=true"
echo "package_version=${package_version}"
echo "message<<EOF"
echo "🎉 **Twist MCP & Tools ${new_tag} published** 🚀"
echo
printf '%s\n' "${changelog}"
echo
echo "[GitHub release](${release_url}) | [npm package](${package_url})"
echo "EOF"
} >> "$GITHUB_OUTPUT"

- name: Announce release in Twist
if: ${{ steps.announcement.outputs.should_announce == 'true' }}
uses: Doist/twist-post-action@74a0255b75ad93c06b9eb1009960106efe13f5ca
with:
message: ${{ steps.announcement.outputs.message }}
install_id: ${{ secrets.TWIST_RELEASE_INSTALL_ID }}
install_token: ${{ secrets.TWIST_RELEASE_INSTALL_TOKEN }}
continue-on-error: true

- name: Trigger twist-ai-integrations update
if: ${{ steps.announcement.outputs.should_announce == 'true' }}
run: |
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/Doist/twist-ai-integrations/dispatches \
-f event_type='twist-ai-updated' \
-f client_payload='{"version":"${{ steps.announcement.outputs.package_version }}","npm_tag":"latest"}'
env:
GH_TOKEN: ${{ secrets.DEPLOY_TOKEN }}
continue-on-error: true
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Twist AI MCP Server - Development Guidelines
# Comms MCP Server - Development Guidelines

## Adding a New Tool

Expand Down Expand Up @@ -48,4 +48,4 @@ npx tsx scripts/run-tool.ts search-content '{"query":"project update"}'
npx tsx scripts/run-tool.ts fetch-inbox '{"workspaceId":12345}'
```

Requires `TWIST_API_KEY` in `.env` (and optionally `TWIST_BASE_URL`).
Requires `COMMS_API_KEY` in `.env` (and optionally `COMMS_BASE_URL`, e.g. `https://comms.staging.todoist.com` for staging).
288 changes: 7 additions & 281 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,285 +1,11 @@
## [5.4.0](https://github.com/Doist/twist-ai/compare/v5.3.0...v5.4.0) (2026-05-20)

### Features

* add delete-object tool ([#183](https://github.com/Doist/twist-ai/issues/183)) ([084c2b4](https://github.com/Doist/twist-ai/commit/084c2b4fba439c21e6b27b3bae4abef8249a87fc))

## [5.3.0](https://github.com/Doist/twist-ai/compare/v5.2.0...v5.3.0) (2026-05-12)

### Features

* adopt twist-sdk 2.6.0 native groups + notifyAudience for replies ([#193](https://github.com/Doist/twist-ai/issues/193)) ([ee1956b](https://github.com/Doist/twist-ai/commit/ee1956bc64bc03c6d0fa5461a891021dcd3c5e02)), closes [#188](https://github.com/Doist/twist-ai/issues/188)

## [5.2.0](https://github.com/Doist/twist-ai/compare/v5.1.0...v5.2.0) (2026-05-06)

### Features

* add Twist group recipients support ([#188](https://github.com/Doist/twist-ai/issues/188)) ([f094482](https://github.com/Doist/twist-ai/commit/f094482eb4e5614b19143e842014ee2d96a61f29))

## [5.1.0](https://github.com/Doist/twist-ai/compare/v5.0.0...v5.1.0) (2026-04-30)

### Features

* add get-mentions tool for fetching user mentions ([#185](https://github.com/Doist/twist-ai/issues/185)) ([f9c2f14](https://github.com/Doist/twist-ai/commit/f9c2f146fa83953869b1a07c3e00ac7c903a2fe4))

## [5.0.0](https://github.com/Doist/twist-ai/compare/v4.7.1...v5.0.0) (2026-04-28)

### ⚠ BREAKING CHANGES

* replace update-thread/update-comment with unified update-object tool (#182)

### Features

* replace update-thread/update-comment with unified update-object tool ([#182](https://github.com/Doist/twist-ai/issues/182)) ([82e04c0](https://github.com/Doist/twist-ai/commit/82e04c0076e55649ded85691419798e7709048ef))

## [4.7.1](https://github.com/Doist/twist-ai/compare/v4.7.0...v4.7.1) (2026-04-27)

### Bug Fixes

* **deps:** update dependency @doist/twist-sdk to v2.4.1 ([#179](https://github.com/Doist/twist-ai/issues/179)) ([26305c7](https://github.com/Doist/twist-ai/commit/26305c7c276013ba3a55f497f770d32f4afd9cb6))

## [4.7.0](https://github.com/Doist/twist-ai/compare/v4.6.1...v4.7.0) (2026-04-24)

### Features

* add update-thread and update-comment tools ([#164](https://github.com/Doist/twist-ai/issues/164)) ([d0e4541](https://github.com/Doist/twist-ai/commit/d0e4541352c1451c96072764a47cf516aa2168fa))

## [4.6.1](https://github.com/Doist/twist-ai/compare/v4.6.0...v4.6.1) (2026-04-20)

### Bug Fixes

* **deps:** update dependency dotenv to v17.4.2 ([#174](https://github.com/Doist/twist-ai/issues/174)) ([48992e5](https://github.com/Doist/twist-ai/commit/48992e55e6ca4cacbe7337519f96a5fa1d9554b6))

## [4.6.0](https://github.com/Doist/twist-ai/compare/v4.5.2...v4.6.0) (2026-04-16)

### Features

* **fetch-inbox:** add archiveFilter parameter ([#172](https://github.com/Doist/twist-ai/issues/172)) ([6d30a8e](https://github.com/Doist/twist-ai/commit/6d30a8ec50153a1ea965a813768be2c9017b62c3))

## [4.5.2](https://github.com/Doist/twist-ai/compare/v4.5.1...v4.5.2) (2026-04-13)

### Bug Fixes

* **deps:** update production dependencies ([#169](https://github.com/Doist/twist-ai/issues/169)) ([5a13118](https://github.com/Doist/twist-ai/commit/5a13118e4243024fcac451e300dd44a6166e97c6))

## [4.5.1](https://github.com/Doist/twist-ai/compare/v4.5.0...v4.5.1) (2026-04-08)

### Bug Fixes

* add prepublishOnly script for release safety ([#154](https://github.com/Doist/twist-ai/issues/154)) ([62ef2ee](https://github.com/Doist/twist-ai/commit/62ef2eedfb358f8d6a29a744988e04d9e4c8ddc3))
* **deps:** update dependency @doist/twist-sdk to v2.2.0 ([#159](https://github.com/Doist/twist-ai/issues/159)) ([92df923](https://github.com/Doist/twist-ai/commit/92df9231c5056f57e18ba6a7542d0ae1f24e27b6))
* remove CHANGELOG formatting step from release pipeline ([#168](https://github.com/Doist/twist-ai/issues/168)) ([da97b19](https://github.com/Doist/twist-ai/commit/da97b192d878c2d13a060cf2c763bb00ae7aa200))
* use individual permission inputs for create-github-app-token v3 ([#157](https://github.com/Doist/twist-ai/issues/157)) ([3298d5d](https://github.com/Doist/twist-ai/commit/3298d5dcabee330e852cf6a6d148dc9b00c91ec1))

# Changelog

## [4.5.0](https://github.com/Doist/twist-ai/compare/v4.4.0...v4.5.0) (2026-03-23)


### Features

* add list-channels tool ([#146](https://github.com/Doist/twist-ai/issues/146)) ([28f87bd](https://github.com/Doist/twist-ai/commit/28f87bd48a259581014f8a2d0089b4d3c8cce18b))

## [4.4.0](https://github.com/Doist/twist-ai/compare/v4.3.2...v4.4.0) (2026-03-18)


### Features

* add create-thread tool ([#139](https://github.com/Doist/twist-ai/issues/139)) ([6990e54](https://github.com/Doist/twist-ai/commit/6990e54c806228099e880c8cde361908669278a3))

## [4.3.2](https://github.com/Doist/twist-ai/compare/v4.3.1...v4.3.2) (2026-03-18)


### Bug Fixes

* support 'conversation' type in search results ([#137](https://github.com/Doist/twist-ai/issues/137)) ([0d80bf1](https://github.com/Doist/twist-ai/commit/0d80bf1b851dfb8cb0e08e8af9556b5c9bb05b72))

## [4.3.1](https://github.com/Doist/twist-ai/compare/v4.3.0...v4.3.1) (2026-03-13)


### Bug Fixes

* use correct clear payload for away status and fix output schema ([#131](https://github.com/Doist/twist-ai/issues/131)) ([7237139](https://github.com/Doist/twist-ai/commit/7237139c8c547b7d30e62709a5f225a6e53eee86))

## [4.3.0](https://github.com/Doist/twist-ai/compare/v4.2.3...v4.3.0) (2026-03-13)


### Features

* add `away` tool for managing user away status ([#130](https://github.com/Doist/twist-ai/issues/130)) ([504c575](https://github.com/Doist/twist-ai/commit/504c575574bdc15bef76d8773a067bfaf9409d13))


### Bug Fixes

* **deps:** update dependency dotenv to v17.3.1 ([#117](https://github.com/Doist/twist-ai/issues/117)) ([9931448](https://github.com/Doist/twist-ai/commit/99314485a275ed0173d14f557332afded8676979))
* use PAT for release-please to trigger CI on its PRs ([#119](https://github.com/Doist/twist-ai/issues/119)) ([0168650](https://github.com/Doist/twist-ai/commit/01686500a9f892c4e3c0eb3c138eb635d3827691))

## [4.2.3](https://github.com/Doist/twist-ai/compare/v4.2.2...v4.2.3) (2026-02-18)


### Bug Fixes

* add fallback URL construction when SDK batch validation strips .url ([#113](https://github.com/Doist/twist-ai/issues/113)) ([854b5db](https://github.com/Doist/twist-ai/commit/854b5db38eb0b1f56ea7be7517e80ce227ed001d))
* **deps:** update dependency dotenv to v17.2.4 ([#111](https://github.com/Doist/twist-ai/issues/111)) ([de5b1cf](https://github.com/Doist/twist-ai/commit/de5b1cff3ef208ebfacdc46873eddfbef60c2a08))

## [4.2.2](https://github.com/Doist/twist-ai/compare/v4.2.1...v4.2.2) (2026-02-10)


### Bug Fixes

* add CI workflow to satisfy required check on release PRs ([#106](https://github.com/Doist/twist-ai/issues/106)) ([92eaa10](https://github.com/Doist/twist-ai/commit/92eaa107f1b758d81015af233ba0eb68eee8d09e))
* suppress dotenv@17 stdout logging that breaks stdio MCP transport ([#104](https://github.com/Doist/twist-ai/issues/104)) ([e2c02d0](https://github.com/Doist/twist-ai/commit/e2c02d0fffaea412014feb676aa4e2eb27c8c6f9))

## [4.2.1](https://github.com/Doist/twist-ai/compare/v4.2.0...v4.2.1) (2026-02-09)


### Bug Fixes

* bump @doist/twist-sdk to 2.0.1 to fix missing url on batched list results ([#102](https://github.com/Doist/twist-ai/issues/102)) ([d5f8256](https://github.com/Doist/twist-ai/commit/d5f8256ea0db6a1486719272281660dfe3b348c1))

## [4.2.0](https://github.com/Doist/twist-ai/compare/v4.1.0...v4.2.0) (2026-02-09)


### Features

* add automated cross-repository trigger for twist-ai-integrations ([#93](https://github.com/Doist/twist-ai/issues/93)) ([46e47fb](https://github.com/Doist/twist-ai/commit/46e47fb24485b69158ae9b8c251a5262e24d3f71))
* upgrade @doist/twist-sdk to v2.0.0 and use entity.url ([#99](https://github.com/Doist/twist-ai/issues/99)) ([2e19452](https://github.com/Doist/twist-ai/commit/2e1945244af505c0c7b0f94313e10cd72a0664f6))

## [4.1.0](https://github.com/Doist/twist-ai/compare/v4.0.0...v4.1.0) (2026-02-02)


### Features

* include Twist URLs in get-workspaces tool output ([#91](https://github.com/Doist/twist-ai/issues/91)) ([eb0d3ea](https://github.com/Doist/twist-ai/commit/eb0d3eae736d72f31161109287968c4d45c2cefa))

## [4.0.0](https://github.com/Doist/twist-ai/compare/v3.1.0...v4.0.0) (2026-01-27)


### ⚠ BREAKING CHANGES

* **mcp:** Tool names changed (e.g. load_thread -> load-thread, fetch_inbox -> fetch-inbox, mark_done -> mark-done).

### Features

* **mcp:** switch tool names to kebab-case ([06f4404](https://github.com/Doist/twist-ai/commit/06f4404dcf90168d89f91e3abdee499ad0462df5)), closes [#82](https://github.com/Doist/twist-ai/issues/82)

## [3.1.0](https://github.com/Doist/twist-ai/compare/v3.0.1...v3.1.0) (2026-01-27)


### Features

* **mcp:** add ToolAnnotations hints ([fc8eaa4](https://github.com/Doist/twist-ai/commit/fc8eaa4d019ea996edac31259c4ff8b48335e4cb))

## [3.0.1](https://github.com/Doist/twist-ai/compare/v3.0.0...v3.0.1) (2026-01-27)


### Bug Fixes

* register build_link tool in MCP server ([#83](https://github.com/Doist/twist-ai/issues/83)) ([d4ed5b4](https://github.com/Doist/twist-ai/commit/d4ed5b4cf094b8d9418648619c6fed93f8524e38))

## [3.0.0](https://github.com/Doist/twist-ai/compare/v2.0.0...v3.0.0) (2025-12-30)


### ⚠ BREAKING CHANGES

* @modelcontextprotocol/sdk moved to peerDependencies. Consumers must now explicitly install: npm install @modelcontextprotocol/sdk@^1.25.0

### Features

* make MCP SDK a peer dependency ([50eeba2](https://github.com/Doist/twist-ai/commit/50eeba20736bb8e6204ac1c25d2e43550a946443))


### Bug Fixes

* **deps:** update dependency @modelcontextprotocol/sdk to v1.25.1 ([#66](https://github.com/Doist/twist-ai/issues/66)) ([ae4f9c8](https://github.com/Doist/twist-ai/commit/ae4f9c82d85b7591e38fdcdd44bffec9e4233dc8))

## [2.0.0](https://github.com/Doist/twist-ai/compare/v1.2.2...v2.0.0) (2025-12-16)


### ⚠ BREAKING CHANGES

* upgrade to Zod v4 ([#59](https://github.com/Doist/twist-ai/issues/59))

### Features

* upgrade to Zod v4 ([#59](https://github.com/Doist/twist-ai/issues/59)) ([1ce1254](https://github.com/Doist/twist-ai/commit/1ce1254df67d56207426b0cb541939e089a5301c))


### Bug Fixes

* **deps:** update dependency @modelcontextprotocol/sdk to v1.24.0 [security] ([#57](https://github.com/Doist/twist-ai/issues/57)) ([21023c5](https://github.com/Doist/twist-ai/commit/21023c59a5d9fa94defcbd8cb661df0febbc0a07))
* **deps:** update dependency @modelcontextprotocol/sdk to v1.24.1 ([#61](https://github.com/Doist/twist-ai/issues/61)) ([b5e52a2](https://github.com/Doist/twist-ai/commit/b5e52a2d37207a76b0720915a7772041d17ac1c1))
* **deps:** update dependency @modelcontextprotocol/sdk to v1.24.3 ([#63](https://github.com/Doist/twist-ai/issues/63)) ([cb0e8e9](https://github.com/Doist/twist-ai/commit/cb0e8e92779e65c400b7593818af29c8ad00c221))

## [1.2.2](https://github.com/Doist/twist-ai/compare/v1.2.1...v1.2.2) (2025-12-02)


### Bug Fixes

* always include structuredContent in tool outputs to prevent MCP validation errors ([#55](https://github.com/Doist/twist-ai/issues/55)) ([40fc577](https://github.com/Doist/twist-ai/commit/40fc5776196b443add18a746e49405349eb57980))
* **deps:** update dependency @modelcontextprotocol/sdk to v1.23.0 ([#52](https://github.com/Doist/twist-ai/issues/52)) ([16f7d46](https://github.com/Doist/twist-ai/commit/16f7d4606b6bb8d98a3993ab52bef5cb2fead30d))

## [1.2.1](https://github.com/Doist/twist-ai/compare/v1.2.0...v1.2.1) (2025-11-27)


### Bug Fixes

* **deps:** update production dependencies ([#47](https://github.com/Doist/twist-ai/issues/47)) ([0c4e020](https://github.com/Doist/twist-ai/commit/0c4e020d2f2ea22519055ad2534dfd70aa84a784))

## [1.2.0](https://github.com/Doist/twist-ai/compare/v1.1.1...v1.2.0) (2025-11-20)


### Features

* add read-only and destructive hints to all tools ([#44](https://github.com/Doist/twist-ai/issues/44)) ([234f3de](https://github.com/Doist/twist-ai/commit/234f3de1dab0d5eb7b8fb6284aec1b7f36d8f00e))

## [1.1.1](https://github.com/Doist/twist-ai/compare/v1.1.0...v1.1.1) (2025-11-19)


### Bug Fixes

* Correct repository URL case for npm provenance ([3af8429](https://github.com/Doist/twist-ai/commit/3af8429b4575c1b64c69dc9fee1a92eb58ca498a))
* **deps:** update dependency @modelcontextprotocol/sdk to v1.21.1 ([#40](https://github.com/Doist/twist-ai/issues/40)) ([be0a8b3](https://github.com/Doist/twist-ai/commit/be0a8b38e51608a0b375495369e4ec5f248641f3))

## [1.1.0](https://github.com/Doist/twist-ai/compare/v1.0.0...v1.1.0) (2025-11-12)


### Features

* Switch publishing from GitHub Packages to npmjs ([fda0f3b](https://github.com/Doist/twist-ai/commit/fda0f3bb6c683a0251535da5771d556cd865041e))


### Bug Fixes

* **deps:** pin dependencies ([#35](https://github.com/Doist/twist-ai/issues/35)) ([af53226](https://github.com/Doist/twist-ai/commit/af53226503cfd5b7b5209117211fd7cb941ed044))

## [1.0.0](https://github.com/Doist/twist-ai/compare/v0.2.2...v1.0.0) (2025-11-08)


### ⚠ BREAKING CHANGES

* Update to v1 of Twist SDK ([#30](https://github.com/Doist/twist-ai/issues/30))

### Features

* Add output schema support to all tools ([#28](https://github.com/Doist/twist-ai/issues/28)) ([355a341](https://github.com/Doist/twist-ai/commit/355a3414ccdd35b47e2b81d007fba71e651950ff))
* Update to v1 of Twist SDK ([#30](https://github.com/Doist/twist-ai/issues/30)) ([a2d7110](https://github.com/Doist/twist-ai/commit/a2d7110b898e3b621f7fcadbeaf2ca164833ff38))

## [0.2.2-alpha.2](https://github.com/Doist/twist-ai/compare/v0.2.1-alpha.2...v0.2.2-alpha.2) (2025-10-28)

### Bug Fixes

- Migrate to twist-sdk v0.1.0-alpha.4 API

## [0.2.1-alpha.2](https://github.com/Doist/twist-ai/compare/v0.2.0-alpha.2...v0.2.1-alpha.2) (2025-10-26)

### Bug Fixes

- Add --repo parameter to workflow run command ([a1dce5e](https://github.com/Doist/twist-ai/commit/a1dce5e44978869af7ebd7856327d2981fd85e0f))

## [0.2.0-alpha.2](https://github.com/Doist/twist-ai/compare/v0.1.0-alpha.2...v0.2.0-alpha.2) (2025-10-26)
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Features
## Unreleased

- Adds `get-workspaces` and `get-users` tools ([#13](https://github.com/Doist/twist-ai/issues/13)) ([2c86c85](https://github.com/Doist/twist-ai/commit/2c86c85ff9f216608624c5baf915a95ee0d5211e))
- Set up release-please automation with workflow_dispatch trigger ([#15](https://github.com/Doist/twist-ai/issues/15)) ([9216665](https://github.com/Doist/twist-ai/commit/9216665d926b6376a1eb165686af05800cfcaf4f))
- Forked from [Doist/twist-ai](https://github.com/Doist/twist-ai); renamed
to `@doist/comms-mcp` and re-targeted at the Comms API via
[`@doist/comms-sdk`](https://github.com/Doist/comms-sdk-typescript).
Loading
Loading