Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
a1d0fec
chore(internal/client): fix form-urlencoded requests
stainless-app[bot] Feb 18, 2026
edc6fb5
chore(internal): allow setting x-stainless-api-key header on mcp serv…
stainless-app[bot] Feb 18, 2026
0278e79
chore(internal): cache fetch instruction calls in MCP server
stainless-app[bot] Feb 19, 2026
875e4fc
fix(mcp): initialize SDK lazily to avoid failing the connection on in…
stainless-app[bot] Feb 20, 2026
73f331b
chore(internal): remove mock server code
stainless-app[bot] Feb 20, 2026
8bac25f
chore: update mock server docs
stainless-app[bot] Feb 20, 2026
b8844d4
chore(mcp): correctly update version in sync with sdk
stainless-app[bot] Feb 20, 2026
73bfd2a
fix(docs/contributing): correct pnpm link command
stainless-app[bot] Feb 24, 2026
56f145c
chore(internal): upgrade @modelcontextprotocol/sdk and hono
stainless-app[bot] Feb 24, 2026
0f48e15
chore(internal): make MCP code execution location configurable via a …
stainless-app[bot] Feb 25, 2026
2994023
chore(internal): fix MCP Dockerfiles so they can be built without bui…
stainless-app[bot] Feb 26, 2026
9c22d30
chore(internal): fix MCP Dockerfiles so they can be built without bui…
stainless-app[bot] Feb 26, 2026
8a830b9
chore(internal): move stringifyQuery implementation to internal function
stainless-app[bot] Feb 27, 2026
b4ec89b
feat(mcp): add an option to disable code tool
stainless-app[bot] Feb 27, 2026
5537be5
fix(mcp): update prompt
stainless-app[bot] Feb 27, 2026
8abe8c6
codegen metadata
stainless-app[bot] Mar 3, 2026
b63ab24
release: 0.21.0
stainless-app[bot] Mar 3, 2026
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
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.20.2"
".": "0.21.0"
}
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 5
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/isaacus%2Fisaacus-8cedb48141daf72e4c1a8b29dad13fb1025dd5edad384296be4bd28277b8d7cc.yml
openapi_spec_hash: 306db110474ab42cf13c1ce7cf178cb3
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/isaacus%2Fisaacus-baf5ebdd05d1b5192759a356c2701131c47cfb5b7239a49fcb94e68d4210648c.yml
openapi_spec_hash: 6ea786d56726e18156adf57915fcbe5f
config_hash: 9040e7359f066240ad536041fb2c5185
30 changes: 30 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
# Changelog

## 0.21.0 (2026-03-03)

Full Changelog: [v0.20.2...v0.21.0](https://github.com/isaacus-dev/isaacus-typescript/compare/v0.20.2...v0.21.0)

### Features

* **mcp:** add an option to disable code tool ([b4ec89b](https://github.com/isaacus-dev/isaacus-typescript/commit/b4ec89ba60bf0baa492f407b6a7a2eab50237f67))


### Bug Fixes

* **docs/contributing:** correct pnpm link command ([73bfd2a](https://github.com/isaacus-dev/isaacus-typescript/commit/73bfd2abf18103cca4a37898ee2f23c1444ce5bf))
* **mcp:** initialize SDK lazily to avoid failing the connection on init errors ([875e4fc](https://github.com/isaacus-dev/isaacus-typescript/commit/875e4fc2ac4211278b81cfbf94dee10154d7c56d))
* **mcp:** update prompt ([5537be5](https://github.com/isaacus-dev/isaacus-typescript/commit/5537be5ec545efbe38de1454b3f855bebe6fa387))


### Chores

* **internal/client:** fix form-urlencoded requests ([a1d0fec](https://github.com/isaacus-dev/isaacus-typescript/commit/a1d0fecc8af11202a614786e2dceb2b0928a38ee))
* **internal:** allow setting x-stainless-api-key header on mcp server requests ([edc6fb5](https://github.com/isaacus-dev/isaacus-typescript/commit/edc6fb5bd091f0183e868c40ce5613db65daa028))
* **internal:** cache fetch instruction calls in MCP server ([0278e79](https://github.com/isaacus-dev/isaacus-typescript/commit/0278e790e2d7384a9318436103389a578d0cf79f))
* **internal:** fix MCP Dockerfiles so they can be built without buildkit ([9c22d30](https://github.com/isaacus-dev/isaacus-typescript/commit/9c22d30b32e6e8a303257de8809942606a021717))
* **internal:** fix MCP Dockerfiles so they can be built without buildkit ([2994023](https://github.com/isaacus-dev/isaacus-typescript/commit/2994023b8e36ac061cea8139025b8421e6c659fd))
* **internal:** make MCP code execution location configurable via a flag ([0f48e15](https://github.com/isaacus-dev/isaacus-typescript/commit/0f48e15c7296096e24eeecfad6100aa6ca00c2de))
* **internal:** move stringifyQuery implementation to internal function ([8a830b9](https://github.com/isaacus-dev/isaacus-typescript/commit/8a830b9f2be17ccc102d697da32dd8308d04a3fe))
* **internal:** remove mock server code ([73f331b](https://github.com/isaacus-dev/isaacus-typescript/commit/73f331b4dbedeaa77b9fed681f263a9a1505c9a0))
* **internal:** upgrade @modelcontextprotocol/sdk and hono ([56f145c](https://github.com/isaacus-dev/isaacus-typescript/commit/56f145cf805d5c34c0f84c86a200f0b692c62533))
* **mcp:** correctly update version in sync with sdk ([b8844d4](https://github.com/isaacus-dev/isaacus-typescript/commit/b8844d441f8c7449e0df84da92665af836b833b4))
* update mock server docs ([8bac25f](https://github.com/isaacus-dev/isaacus-typescript/commit/8bac25f74d58949f1f0c1a5c3e1cdf6dd7a1ca4a))

## 0.20.2 (2026-02-18)

Full Changelog: [v0.20.1...v0.20.2](https://github.com/isaacus-dev/isaacus-typescript/compare/v0.20.1...v0.20.2)
Expand Down
8 changes: 1 addition & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,11 @@ $ yarn link isaacus
# With pnpm
$ pnpm link --global
$ cd ../my-package
$ pnpm link -global isaacus
$ pnpm link --global isaacus
```

## Running tests

Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.

```sh
$ npx prism mock path/to/your/openapi.yml
```

```sh
$ yarn run test
```
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "isaacus",
"version": "0.20.2",
"version": "0.21.0",
"description": "The official TypeScript library for the Isaacus API",
"author": "Isaacus <support@isaacus.com>",
"types": "dist/index.d.ts",
Expand Down
9 changes: 7 additions & 2 deletions packages/mcp-server/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,12 @@ COPY . .
RUN yarn install --frozen-lockfile && \
yarn build

# Production stage
FROM node:24-alpine
FROM denoland/deno:alpine-2.7.1

# Install node and npm
RUN apk add --no-cache nodejs npm

ENV LD_LIBRARY_PATH=/usr/lib:/usr/local/lib

# Add non-root user
RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001
Expand All @@ -57,6 +61,7 @@ COPY --from=builder /build/dist ./node_modules/isaacus

# Change ownership to nodejs user
RUN chown -R nodejs:nodejs /app
RUN chown -R nodejs:nodejs /deno-dir

# Switch to non-root user
USER nodejs
Expand Down
10 changes: 7 additions & 3 deletions packages/mcp-server/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"dxt_version": "0.2",
"name": "isaacus-mcp",
"version": "0.11.0",
"version": "0.21.0",
"description": "The official MCP Server for the Isaacus API",
"author": {
"name": "Isaacus",
Expand All @@ -18,7 +18,9 @@
"entry_point": "index.js",
"mcp_config": {
"command": "node",
"args": ["${__dirname}/index.js"],
"args": [
"${__dirname}/index.js"
],
"env": {
"ISAACUS_API_KEY": "${user_config.ISAACUS_API_KEY}"
}
Expand All @@ -39,5 +41,7 @@
"node": ">=18.0.0"
}
},
"keywords": ["api"]
"keywords": [
"api"
]
}
4 changes: 2 additions & 2 deletions packages/mcp-server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "isaacus-mcp",
"version": "0.20.2",
"version": "0.21.0",
"description": "The official MCP Server for the Isaacus API",
"author": "Isaacus <support@isaacus.com>",
"types": "dist/index.d.ts",
Expand Down Expand Up @@ -32,7 +32,7 @@
"dependencies": {
"isaacus": "file:../../dist/",
"@cloudflare/cabidela": "^0.2.4",
"@modelcontextprotocol/sdk": "^1.25.2",
"@modelcontextprotocol/sdk": "^1.26.0",
"@valtown/deno-http-worker": "^0.0.21",
"cookie-parser": "^1.4.6",
"cors": "^2.8.5",
Expand Down
17 changes: 16 additions & 1 deletion packages/mcp-server/src/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

import { IncomingMessage } from 'node:http';
import { ClientOptions } from 'isaacus';
import { McpOptions } from './options';

export const parseAuthHeaders = (req: IncomingMessage, required?: boolean): Partial<ClientOptions> => {
export const parseClientAuthHeaders = (req: IncomingMessage, required?: boolean): Partial<ClientOptions> => {
if (req.headers.authorization) {
const scheme = req.headers.authorization.split(' ')[0]!;
const value = req.headers.authorization.slice(scheme.length + 1);
Expand All @@ -25,3 +26,17 @@ export const parseAuthHeaders = (req: IncomingMessage, required?: boolean): Part
: req.headers['x-isaacus-api-key'];
return { apiKey };
};

export const getStainlessApiKey = (req: IncomingMessage, mcpOptions: McpOptions): string | undefined => {
// Try to get the key from the x-stainless-api-key header
const headerKey =
Array.isArray(req.headers['x-stainless-api-key']) ?
req.headers['x-stainless-api-key'][0]
: req.headers['x-stainless-api-key'];
if (headerKey && typeof headerKey === 'string') {
return headerKey;
}

// Fall back to value set in the mcpOptions (e.g. from environment variable), if provided
return mcpOptions.stainlessApiKey;
};
3 changes: 3 additions & 0 deletions packages/mcp-server/src/code-tool-paths.cts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

export const workerPath = require.resolve('./code-tool-worker.mjs');
1 change: 1 addition & 0 deletions packages/mcp-server/src/code-tool-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export type WorkerInput = {
client_opts: ClientOptions;
intent?: string | undefined;
};

export type WorkerOutput = {
is_error: boolean;
result: unknown | null;
Expand Down
Loading