Skip to content

Commit e5aaecb

Browse files
authored
Merge pull request #46 from isaacus-dev/release-please--branches--main--changes--next--components--isaacus
release: 0.9.0
2 parents 5a416e4 + 7066c45 commit e5aaecb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+858
-498
lines changed

.devcontainer/devcontainer.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
"postCreateCommand": "yarn install",
1010
"customizations": {
1111
"vscode": {
12-
"extensions": [
13-
"esbenp.prettier-vscode"
14-
]
12+
"extensions": ["esbenp.prettier-vscode"]
1513
}
1614
}
1715
}

.github/workflows/ci.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
- name: Set up Node
2020
uses: actions/setup-node@v4
2121
with:
22-
node-version: '18'
22+
node-version: '20'
2323

2424
- name: Bootstrap
2525
run: ./scripts/bootstrap
@@ -40,13 +40,13 @@ jobs:
4040
- name: Set up Node
4141
uses: actions/setup-node@v4
4242
with:
43-
node-version: '18'
43+
node-version: '20'
4444

4545
- name: Bootstrap
4646
run: ./scripts/bootstrap
4747

4848
- name: Check build
49-
run: ./scripts/build-all
49+
run: ./scripts/build
5050

5151
- name: Get GitHub OIDC Token
5252
if: github.repository == 'stainless-sdks/isaacus-typescript'
@@ -72,7 +72,7 @@ jobs:
7272
- name: Set up Node
7373
uses: actions/setup-node@v4
7474
with:
75-
node-version: '18'
75+
node-version: '20'
7676

7777
- name: Bootstrap
7878
run: ./scripts/bootstrap

.github/workflows/publish-npm.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- name: Set up Node
2424
uses: actions/setup-node@v3
2525
with:
26-
node-version: '18'
26+
node-version: '20'
2727

2828
- name: Install dependencies
2929
run: |

.github/workflows/release-doctor.yml

-1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,3 @@ jobs:
1919
bash ./bin/check-release-environment
2020
env:
2121
NPM_TOKEN: ${{ secrets.ISAACUS_NPM_TOKEN || secrets.NPM_TOKEN }}
22-

.prettierignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ CHANGELOG.md
44
/deno
55

66
# don't format tsc output, will break source maps
7-
/dist
7+
dist

.release-please-manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.8.0"
2+
".": "0.9.0"
33
}

.stats.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 3
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/isaacus%2Fisaacus-bc0272bf0a53ec37ca25f4a8b76bca4b90cf33c5f41816edf460daa642a5a84a.yml
3-
openapi_spec_hash: 79f28fedf89e1b719f464c064847a630
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/isaacus%2Fisaacus-a0aa3bcfef3af964f7172cecc6e969193a4ca96b26f8c47e7f50d852b13ef356.yml
3+
openapi_spec_hash: e243aed52e8a3c6dad6254c57408fdc4
44
config_hash: bfe30148ec88e8bbbf4a348a9fdfc00a

CHANGELOG.md

+30
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,35 @@
11
# Changelog
22

3+
## 0.9.0 (2025-05-10)
4+
5+
Full Changelog: [v0.8.0...v0.9.0](https://github.com/isaacus-dev/isaacus-typescript/compare/v0.8.0...v0.9.0)
6+
7+
### Features
8+
9+
* **client:** add withOptions helper ([919b90f](https://github.com/isaacus-dev/isaacus-typescript/commit/919b90f26306e822205199eaa61be8e17d4a29d6))
10+
* **mcp:** support dynamically discovering and invoking tools for APIs with many endpoints ([db63f9c](https://github.com/isaacus-dev/isaacus-typescript/commit/db63f9cfe164f071f4e4e2acb505195759e7d843))
11+
12+
13+
### Bug Fixes
14+
15+
* **client:** always overwrite when merging headers ([ff81f8a](https://github.com/isaacus-dev/isaacus-typescript/commit/ff81f8af0867acacb1076017e6144da123c4d53c))
16+
* **mcp:** remove ajv dependency so MCP servers are more compatible with Cloudflare Workers ([e0eebca](https://github.com/isaacus-dev/isaacus-typescript/commit/e0eebcafa6eebe5ac19f69ed1e00e8b021fd7526))
17+
18+
19+
### Chores
20+
21+
* **build:** automatically build subpackages if present ([5068236](https://github.com/isaacus-dev/isaacus-typescript/commit/506823620cadfebe43735612bd75419dd112eaab))
22+
* **client:** drop support for EOL node versions ([127940d](https://github.com/isaacus-dev/isaacus-typescript/commit/127940d53826bc75c61718d18b5b97499dc5a3d0))
23+
* **internal:** codegen related update ([11b21d1](https://github.com/isaacus-dev/isaacus-typescript/commit/11b21d1d07582840d98683985bb7cbc13aef4cce))
24+
* **internal:** share typescript helpers ([20f0218](https://github.com/isaacus-dev/isaacus-typescript/commit/20f0218a0b9b6612a2e8e67a91e8ee3eacf8a985))
25+
26+
27+
### Documentation
28+
29+
* add examples to tsdocs ([f2f1be3](https://github.com/isaacus-dev/isaacus-typescript/commit/f2f1be3f21ef192e4a6701d6842a9174b60dc267))
30+
* **api:** fixed incorrect description of how extraction results are ordered ([06a702a](https://github.com/isaacus-dev/isaacus-typescript/commit/06a702afa25153578c20161112918930738a3713))
31+
* **readme:** fix typo ([d70d071](https://github.com/isaacus-dev/isaacus-typescript/commit/d70d0711bcccf134c3513ebf0a4c5d2e20c178ba))
32+
333
## 0.8.0 (2025-04-30)
434

535
Full Changelog: [v0.7.0...v0.8.0](https://github.com/isaacus-dev/isaacus-typescript/compare/v0.7.0...v0.8.0)

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ async function main() {
9595
main();
9696
```
9797

98-
Error codes are as followed:
98+
Error codes are as follows:
9999

100100
| Status Code | Error Type |
101101
| ----------- | -------------------------- |
@@ -382,7 +382,7 @@ TypeScript >= 4.9 is supported.
382382
The following runtimes are supported:
383383

384384
- Web browsers (Up-to-date Chrome, Firefox, Safari, Edge, and more)
385-
- Node.js 18 LTS or later ([non-EOL](https://endoflife.date/nodejs)) versions.
385+
- Node.js 20 LTS or later ([non-EOL](https://endoflife.date/nodejs)) versions.
386386
- Deno v1.28.0 or higher.
387387
- Bun 1.0 or later.
388388
- Cloudflare Workers.

package.json

+10-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "isaacus",
3-
"version": "0.8.0",
3+
"version": "0.9.0",
44
"description": "The official TypeScript library for the Isaacus API",
55
"author": "Isaacus <support@isaacus.com>",
66
"types": "dist/index.d.ts",
@@ -17,7 +17,7 @@
1717
"test": "./scripts/test",
1818
"build": "./scripts/build",
1919
"prepublishOnly": "echo 'to publish, run yarn build && (cd dist; yarn publish)' && exit 1",
20-
"format": "prettier --write --cache --cache-strategy metadata . !dist",
20+
"format": "./scripts/format",
2121
"prepare": "if ./scripts/utils/check-is-in-git-install.sh; then ./scripts/build && ./scripts/utils/git-swap.sh; fi",
2222
"tsn": "ts-node -r tsconfig-paths/register",
2323
"lint": "./scripts/lint",
@@ -30,9 +30,9 @@
3030
"@swc/jest": "^0.2.29",
3131
"@types/jest": "^29.4.0",
3232
"@types/node": "^20.17.6",
33-
"typescript-eslint": "^8.24.0",
34-
"@typescript-eslint/eslint-plugin": "^8.24.0",
35-
"@typescript-eslint/parser": "^8.24.0",
33+
"typescript-eslint": "8.31.1",
34+
"@typescript-eslint/eslint-plugin": "8.31.1",
35+
"@typescript-eslint/parser": "8.31.1",
3636
"eslint": "^9.20.1",
3737
"eslint-plugin-prettier": "^5.2.3",
3838
"eslint-plugin-unused-imports": "^4.1.4",
@@ -42,17 +42,13 @@
4242
"publint": "^0.2.12",
4343
"ts-jest": "^29.1.0",
4444
"ts-node": "^10.5.0",
45-
"tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.3/tsc-multi.tgz",
45+
"tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.4/tsc-multi-1.1.4.tgz",
4646
"tsconfig-paths": "^4.0.0",
47-
"typescript": "^4.8.2"
47+
"typescript": "5.8.3"
4848
},
4949
"resolutions": {
5050
"synckit": "0.8.8"
5151
},
52-
"browser": {
53-
"./internal/shims/getBuiltinModule.mjs": "./internal/shims/nullGetBuiltinModule.mjs",
54-
"./internal/shims/getBuiltinModule.js": "./internal/shims/nullGetBuiltinModule.js"
55-
},
5652
"imports": {
5753
"isaacus": ".",
5854
"isaacus/*": "./src/*"
@@ -72,5 +68,8 @@
7268
"import": "./dist/*.mjs",
7369
"require": "./dist/*.js"
7470
}
71+
},
72+
"engines": {
73+
"node": ">= 20"
7574
}
7675
}

packages/mcp-server/README.md

+25-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ You can run the MCP Server directly via `npx`:
1010

1111
```sh
1212
export ISAACUS_API_KEY="My API Key"
13-
npx -y isaacus-mcp
13+
npx -y isaacus-mcp@latest
1414
```
1515

1616
### Via MCP Client
@@ -25,7 +25,7 @@ For clients with a configuration JSON, it might look something like this:
2525
"mcpServers": {
2626
"isaacus_api": {
2727
"command": "npx",
28-
"args": ["-y", "isaacus-mcp", "--client=claude"],
28+
"args": ["-y", "isaacus-mcp", "--client=claude", "--tools=all"],
2929
"env": {
3030
"ISAACUS_API_KEY": "My API Key"
3131
}
@@ -34,7 +34,14 @@ For clients with a configuration JSON, it might look something like this:
3434
}
3535
```
3636

37-
## Filtering tools
37+
## Exposing endpoints to your MCP Client
38+
39+
There are two ways to expose endpoints as tools in the MCP server:
40+
41+
1. Exposing one tool per endpoint, and filtering as necessary
42+
2. Exposing a set of tools to dynamically discover and invoke endpoints from the API
43+
44+
### Filtering endpoints and tools
3845

3946
You can run the package on the command line to discover and filter the set of tools that are exposed by the
4047
MCP Server. This can be helpful for large APIs where including all endpoints at once is too much for your AI's
@@ -46,6 +53,21 @@ You can filter by multiple aspects:
4653
- `--resource` includes all tools under a specific resource, and can have wildcards, e.g. `my.resource*`
4754
- `--operation` includes just read (get/list) or just write operations
4855

56+
### Dynamic tools
57+
58+
If you specify `--tools=dynamic` to the MCP server, instead of exposing one tool per endpoint in the API, it will
59+
expose the following tools:
60+
61+
1. `list_api_endpoints` - Discovers available endpoints, with optional filtering by search query
62+
2. `get_api_endpoint_schema` - Gets detailed schema information for a specific endpoint
63+
3. `invoke_api_endpoint` - Executes any endpoint with the appropriate parameters
64+
65+
This allows you to have the full set of API endpoints available to your MCP Client, while not requiring that all
66+
of their schemas be loaded into context at once. Instead, the LLM will automatically use these tools together to
67+
search for, look up, and invoke endpoints dynamically. However, due to the indirect nature of the schemas, it
68+
can struggle to provide the correct properties a bit more than when tools are imported explicitly. Therefore,
69+
you can opt-in to explicit tools, the dynamic tools, or both.
70+
4971
See more information with `--help`.
5072

5173
All of these command-line options can be repeated, combined together, and have corresponding exclusion versions (e.g. `--no-tool`).

packages/mcp-server/package.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "isaacus-mcp",
3-
"version": "0.8.0",
3+
"version": "0.9.0",
44
"description": "The official MCP Server for the Isaacus API",
55
"author": "Isaacus <support@isaacus.com>",
66
"types": "dist/index.d.ts",
@@ -30,15 +30,15 @@
3030
"isaacus": "file:../../dist/",
3131
"@modelcontextprotocol/sdk": "^1.6.1",
3232
"yargs": "^17.7.2",
33-
"ajv": "^8.17.1"
33+
"@cloudflare/cabidela": "^0.2.4"
3434
},
3535
"bin": {
3636
"mcp-server": "dist/index.js"
3737
},
3838
"devDependencies": {
3939
"@types/jest": "^29.4.0",
40-
"@typescript-eslint/eslint-plugin": "^6.7.0",
41-
"@typescript-eslint/parser": "^6.7.0",
40+
"@typescript-eslint/eslint-plugin": "8.31.1",
41+
"@typescript-eslint/parser": "8.31.1",
4242
"eslint": "^8.49.0",
4343
"eslint-plugin-prettier": "^5.0.1",
4444
"eslint-plugin-unused-imports": "^3.0.0",
@@ -47,9 +47,9 @@
4747
"ts-jest": "^29.1.0",
4848
"ts-morph": "^19.0.0",
4949
"ts-node": "^10.5.0",
50-
"tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.3/tsc-multi.tgz",
50+
"tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.4/tsc-multi-1.1.4.tgz",
5151
"tsconfig-paths": "^4.0.0",
52-
"typescript": "^4.8.2"
52+
"typescript": "5.8.3"
5353
},
5454
"imports": {
5555
"isaacus-mcp": ".",

packages/mcp-server/src/compat.ts

+1-9
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
import { Tool } from '@modelcontextprotocol/sdk/types.js';
22
import { Endpoint } from './tools';
3-
import Ajv from 'ajv';
4-
5-
const ajv = new Ajv();
63

74
export interface ClientCapabilities {
85
topLevelUnions: boolean;
@@ -23,14 +20,9 @@ export const defaultClientCapabilities: ClientCapabilities = {
2320
};
2421

2522
/**
26-
* Attempts to parse strings into JSON objects if initial schema
27-
* validation fails.
23+
* Attempts to parse strings into JSON objects
2824
*/
2925
export function parseEmbeddedJSON(args: Record<string, unknown>, schema: Record<string, unknown>) {
30-
if (ajv.validate(schema, args)) {
31-
return args;
32-
}
33-
3426
let updated = false;
3527
const newArgs: Record<string, unknown> = Object.assign({}, args);
3628

0 commit comments

Comments
 (0)