Skip to content

Commit c014870

Browse files
authored
Merge pull request #1197 from kesslerio/release/v1.6.1
Chore: prepare v1.6.1 release
2 parents ae17556 + a21d4e3 commit c014870

10 files changed

Lines changed: 56 additions & 18 deletions

File tree

.github/workflows/publish-mcp-registry.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,12 @@ jobs:
102102
node --version
103103
npm --version
104104
105-
- name: Publish to NPM with trusted publishing
105+
- name: Publish to NPM with provenance
106106
if: steps.check.outputs.should_publish == 'true'
107+
# --provenance generates a Sigstore attestation linking the package to this CI build.
107108
# Requires npm Trusted Publisher configuration for this repository/workflow.
108-
run: npm publish --access public
109+
# See: https://docs.npmjs.com/generating-provenance-statements
110+
run: npm publish --access public --provenance
109111

110112
publish-registry:
111113
needs: publish-npm

.github/workflows/release.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ permissions:
1515
contents: write
1616
packages: write
1717
pull-requests: read
18+
id-token: write
1819

1920
jobs:
2021
# Job 1: Validate Release

.npmrc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Supply chain security defaults
2+
# These settings are read by npm, pnpm, and bun (with varying support levels).
3+
4+
# Enforce exact version pinning (no ^ or ~ ranges on save)
5+
save-exact=true
6+
7+
# Strict peer dependency checking — fail on missing/invalid peers
8+
strict-peer-dependencies=true

CHANGELOG.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [1.6.1] - 2026-05-14
11+
12+
**TL;DR for Users**: New dedicated list configuration tools, npm provenance for supply chain verification, and Docker build fix.
13+
1014
### Added
1115

1216
- **`create-list` tool** (#1195, #1196) - Dedicated list creation with template expansion (`sales_pipeline`, `recruiting_tracker`, `support_queue`), parent-object validation against workspace objects, and dry-run preview
1317
- **`update-list-configuration` tool** (#1195, #1196) - Dedicated list update with immutable field detection (rejects `parent_object` changes), dry-run preview, and categorized error guidance
1418
- Shared `ListConfigurationValidator` for parent-object validation, immutable field detection, template expansion, and error categorization — consumed by both dedicated tools and universal create/update strategies (#1195)
19+
- **npm provenance publishing** — every release is now cryptographically linked to the GitHub Actions build and source commit via Sigstore, enabling supply chain verification with `npm view attio-mcp --json | jq .attestations`
20+
- `.npmrc` with `save-exact` and `strict-peer-dependencies` for safer installs
1521

1622
### Changed
1723

1824
- Universal list create and update paths now validate `parent_object` and detect immutable fields before API calls (#1195)
1925
- List error categorization prefers HTTP status codes over fragile string matching (#1196)
26+
- Docker build stage now uses `oven/bun:1` instead of `node:20-slim` for consistency with the project's package manager
2027

2128
## [1.6.0] - 2026-05-05
2229

@@ -949,7 +956,8 @@ Users upgrading from v0.1.x should note:
949956
- Troubleshooting guides
950957
- Development and contribution guidelines
951958

952-
[Unreleased]: https://github.com/kesslerio/attio-mcp-server/compare/v1.6.0...HEAD
959+
[Unreleased]: https://github.com/kesslerio/attio-mcp-server/compare/v1.6.1...HEAD
960+
[1.6.1]: https://github.com/kesslerio/attio-mcp-server/compare/v1.6.0...v1.6.1
953961
[1.6.0]: https://github.com/kesslerio/attio-mcp-server/compare/v1.5.0...v1.6.0
954962
[1.5.0]: https://github.com/kesslerio/attio-mcp-server/compare/v1.4.1...v1.5.0
955963
[1.4.1]: https://github.com/kesslerio/attio-mcp-server/compare/v1.4.0...v1.4.1

Dockerfile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@
44
# =============================================================================
55
# Build Stage
66
# =============================================================================
7-
FROM node:20-slim AS builder
7+
FROM oven/bun:1 AS builder
88

99
WORKDIR /app
1010

1111
# Copy package files first for better layer caching
12-
COPY package*.json ./
12+
COPY package.json bun.lock ./
1313

1414
# Install all dependencies (including devDependencies for build)
15-
RUN npm ci
15+
RUN bun install --frozen-lockfile
1616

1717
# Copy source code
1818
COPY . .
1919

2020
# Build the project
21-
RUN npm run build
21+
RUN bun run build
2222

2323
# Prune devDependencies for production
24-
RUN npm prune --production
24+
RUN bun install --frozen-lockfile --production
2525

2626
# =============================================================================
2727
# Production Stage

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
[![Node.js Version](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org/)
66
[![GitHub Release](https://img.shields.io/github/v/release/kesslerio/attio-mcp-server)](https://github.com/kesslerio/attio-mcp-server/releases)
77
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/kesslerio/attio-mcp-server)
8+
[![npm provenance](https://img.shields.io/npm/attio-mcp/provenance)](https://www.npmjs.com/package/attio-mcp)
89

910
A comprehensive Model Context Protocol (MCP) server for [Attio](https://attio.com/), providing **complete CRM surface coverage**. This server enables AI assistants like Claude and ChatGPT to interact directly with your entire Attio workspace through natural language—manage Deals, Tasks, Lists, People, Companies, Records, and Notes without falling back to raw API calls.
1011

@@ -734,6 +735,24 @@ Deal stages are specific to your workspace. Check your Attio workspace settings
734735
- **No Data Storage**: Direct API passthrough with no local data retention
735736
- **Open Source**: Full transparency with Apache 2.0 license
736737
- **Optional On-Premises**: Deploy in your own infrastructure
738+
- **npm Provenance**: Published with [Sigstore provenance](https://docs.npmjs.com/generating-provenance-statements) — every release is cryptographically linked to the GitHub Actions build and source commit
739+
740+
### Supply Chain Verification
741+
742+
This package is published with npm provenance, creating a verifiable chain from source code to published artifact. Verify a release:
743+
744+
```sh
745+
# Check provenance attestation on any published version
746+
npm view attio-mcp --json | jq .attestations
747+
748+
# With pnpm (v10+), enforce trust policy at install time
749+
# pnpm trustPolicy: no-downgrade blocks packages published with weaker credentials
750+
```
751+
752+
For maximum supply chain protection, install with [pnpm v10+](https://pnpm.io) which enforces:
753+
754+
- **`trustPolicy: no-downgrade`** — blocks versions published with weaker credentials than prior versions
755+
- **`minimumReleaseAge`** — cooldown period before new versions can be installed
737756

738757
## 📚 Documentation
739758

configs/vitest/vitest.config.offline.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ export default defineConfig({
2424
// Temporarily exclude failing CI tests (#1061)
2525
'test/unit/core/tools/status-field-validation.test.ts', // Requires @attio-mcp/core build
2626
'test/utils/postal-code-mapping.test.ts', // Display name normalization fails in CI
27+
// Live smoke tests require real Attio API
28+
'test/smoke-list-config-tools.test.ts',
2729
],
2830
globals: true,
2931
testTimeout: 10000,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "attio-mcp",
3-
"version": "1.6.0",
3+
"version": "1.6.1",
44
"description": "AI-powered access to Attio CRM. Manage contacts, companies, deals, tasks, and notes. Search records, update pipelines, and automate workflows for sales and GTM teams.",
55
"mcpName": "io.github.kesslerio/attio-mcp-server",
66
"main": "dist/smithery.js",

server.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
"url": "https://github.com/kesslerio/attio-mcp-server",
99
"source": "github"
1010
},
11-
"version": "1.6.0",
11+
"version": "1.6.1",
1212
"packages": [
1313
{
1414
"registryType": "npm",
1515
"registryBaseUrl": "https://registry.npmjs.org",
1616
"identifier": "attio-mcp",
17-
"version": "1.6.0",
17+
"version": "1.6.1",
1818
"transport": {
1919
"type": "stdio"
2020
},

test/scripts/release-notes.test.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,16 @@ describe('release notes builder', () => {
2222
packageJson.version
2323
);
2424

25-
expect(releaseNotes).toContain(
26-
'This release makes common company and deal writes easier'
27-
);
25+
expect(releaseNotes).toContain('list configuration tools');
2826
expect(releaseNotes).toContain("## What's New");
2927
expect(releaseNotes).toContain('### Added');
30-
expect(releaseNotes).toContain('### Fixed');
31-
expect(releaseNotes).toContain('create_company');
32-
expect(releaseNotes).toContain('config-discovered custom objects');
28+
expect(releaseNotes).toContain('### Changed');
29+
expect(releaseNotes).toContain('create-list');
30+
expect(releaseNotes).toContain('npm provenance');
3331
expect(releaseNotes).toContain('npm install -g attio-mcp');
3432
expect(releaseNotes).toContain('npm update -g attio-mcp');
3533
expect(releaseNotes).toContain(
36-
'**Full Changelog**: https://github.com/kesslerio/attio-mcp-server/compare/v1.5.0...v1.6.0'
34+
'**Full Changelog**: https://github.com/kesslerio/attio-mcp-server/compare/v1.6.0...v1.6.1'
3735
);
3836
});
3937
});

0 commit comments

Comments
 (0)