Skip to content

Commit b9f29f5

Browse files
authored
Merge pull request #58 from isaacus-dev/release-please--branches--main--changes--next--components--isaacus
release: 0.19.0
2 parents 03c78e8 + 8825ae6 commit b9f29f5

17 files changed

Lines changed: 346 additions & 22 deletions

.dockerignore

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Dependencies
2+
node_modules/
3+
**/node_modules/
4+
5+
# Build outputs
6+
dist/
7+
**/dist/
8+
9+
# Git
10+
.git/
11+
.gitignore
12+
13+
# CI/CD
14+
.github/
15+
.gitlab-ci.yml
16+
.travis.yml
17+
18+
# IDE
19+
.vscode/
20+
.idea/
21+
*.swp
22+
*.swo
23+
*~
24+
25+
# OS
26+
.DS_Store
27+
Thumbs.db
28+
29+
# Testing
30+
test/
31+
tests/
32+
__tests__/
33+
*.test.js
34+
*.spec.js
35+
coverage/
36+
.nyc_output/
37+
38+
# Logs
39+
*.log
40+
npm-debug.log*
41+
yarn-debug.log*
42+
yarn-error.log*
43+
44+
# Environment
45+
.env
46+
.env.*
47+
48+
# Temporary files
49+
*.tmp
50+
*.temp
51+
.cache/
52+
53+
# Examples and scripts
54+
examples/
55+
bin/
56+
57+
# Other packages (we only need mcp-server)
58+
packages/*/
59+
!packages/mcp-server/

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.18.0"
2+
".": "0.19.0"
33
}

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 5
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/isaacus%2Fisaacus-fd2419c8cf8666e821f55c4cc5a5402900c443e2db59b3e53cfb46fd5bb52316.yml
3-
openapi_spec_hash: a92a4436234b019c9c23feb11b1f2f28
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/isaacus%2Fisaacus-46de7b353c33e2b6c139e564caeec9e0462ad714121690f65167a7943e325000.yml
3+
openapi_spec_hash: 6527287f9709a8741c9cc5b4181d7bb1
44
config_hash: 9040e7359f066240ad536041fb2c5185

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,25 @@
11
# Changelog
22

3+
## 0.19.0 (2026-02-11)
4+
5+
Full Changelog: [v0.18.0...v0.19.0](https://github.com/isaacus-dev/isaacus-typescript/compare/v0.18.0...v0.19.0)
6+
7+
### Features
8+
9+
* **api:** add chunking mode to enrichment ([c23e2b1](https://github.com/isaacus-dev/isaacus-typescript/commit/c23e2b1a8c7a68681eb98cabed366899a420478f))
10+
11+
12+
### Chores
13+
14+
* **internal:** add health check to MCP server when running in HTTP mode ([26203bf](https://github.com/isaacus-dev/isaacus-typescript/commit/26203bf5e75676b47a2b31665915b395d153ea4c))
15+
* **internal:** allow basic filtering of methods allowed for MCP code mode ([aca9764](https://github.com/isaacus-dev/isaacus-typescript/commit/aca976487e874fa1d932073ee7d1a9f1ec8117f4))
16+
* **internal:** always generate MCP server dockerfiles and upgrade associated dependencies ([3805d28](https://github.com/isaacus-dev/isaacus-typescript/commit/3805d28a02392d1024b27e654565094ec5cb90cf))
17+
18+
19+
### Documentation
20+
21+
* **api:** update `creation` date type definition ([9eca5b5](https://github.com/isaacus-dev/isaacus-typescript/commit/9eca5b5e307058ac5be6815b7d4d5836fba8a492))
22+
323
## 0.18.0 (2026-02-07)
424

525
Full Changelog: [v0.17.0...v0.18.0](https://github.com/isaacus-dev/isaacus-typescript/compare/v0.17.0...v0.18.0)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "isaacus",
3-
"version": "0.18.0",
3+
"version": "0.19.0",
44
"description": "The official TypeScript library for the Isaacus API",
55
"author": "Isaacus <support@isaacus.com>",
66
"types": "dist/index.d.ts",

packages/mcp-server/Dockerfile

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Dockerfile for Isaacus MCP Server
2+
#
3+
# This Dockerfile builds a Docker image for the MCP Server.
4+
#
5+
# To build the image locally:
6+
# docker build -f packages/mcp-server/Dockerfile -t isaacus-mcp:local .
7+
#
8+
# To run the image:
9+
# docker run -i isaacus-mcp:local [OPTIONS]
10+
#
11+
# Common options:
12+
# --tool=<name> Include specific tools
13+
# --resource=<name> Include tools for specific resources
14+
# --operation=read|write Filter by operation type
15+
# --client=<type> Set client compatibility (e.g., claude, cursor)
16+
# --transport=<type> Set transport type (stdio or http)
17+
#
18+
# For a full list of options:
19+
# docker run -i isaacus-mcp:local --help
20+
#
21+
# Note: The MCP server uses stdio transport by default. Docker's -i flag
22+
# enables interactive mode, allowing the container to communicate over stdin/stdout.
23+
24+
# Build stage
25+
FROM node:24-alpine AS builder
26+
27+
# Install bash for build script
28+
RUN apk add --no-cache bash openssl
29+
30+
# Set working directory
31+
WORKDIR /build
32+
33+
# Copy entire repository
34+
COPY . .
35+
36+
# Install all dependencies and build everything
37+
RUN yarn install --frozen-lockfile && \
38+
yarn build
39+
40+
# Production stage
41+
FROM node:24-alpine
42+
43+
# Add non-root user
44+
RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001
45+
46+
# Set working directory
47+
WORKDIR /app
48+
49+
# Copy the built mcp-server dist directory
50+
COPY --from=builder /build/packages/mcp-server/dist ./
51+
52+
# Copy node_modules from mcp-server (includes all production deps)
53+
COPY --from=builder /build/packages/mcp-server/node_modules ./node_modules
54+
55+
# Copy the built isaacus into node_modules
56+
COPY --from=builder /build/dist ./node_modules/isaacus
57+
58+
# Change ownership to nodejs user
59+
RUN chown -R nodejs:nodejs /app
60+
61+
# Switch to non-root user
62+
USER nodejs
63+
64+
# The MCP server uses stdio transport by default
65+
# No exposed ports needed for stdio communication
66+
67+
# Set the entrypoint to the MCP server
68+
ENTRYPOINT ["node", "index.js"]
69+
70+
# Allow passing arguments to the MCP server
71+
CMD []

packages/mcp-server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "isaacus-mcp",
3-
"version": "0.18.0",
3+
"version": "0.19.0",
44
"description": "The official MCP Server for the Isaacus API",
55
"author": "Isaacus <support@isaacus.com>",
66
"types": "dist/index.d.ts",

packages/mcp-server/src/code-tool.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { McpTool, Metadata, ToolCallResult, asErrorResult, asTextContentResult }
44
import { Tool } from '@modelcontextprotocol/sdk/types.js';
55
import { readEnv, requireValue } from './server';
66
import { WorkerInput, WorkerOutput } from './code-tool-types';
7+
import { SdkMethod } from './methods';
78
import { Isaacus } from 'isaacus';
89

910
const prompt = `Runs JavaScript code to interact with the Isaacus API.
@@ -39,7 +40,7 @@ Variables will not persist between calls, so make sure to return or log any data
3940
*
4041
* @param endpoints - The endpoints to include in the list.
4142
*/
42-
export function codeTool(): McpTool {
43+
export function codeTool(params: { blockedMethods: SdkMethod[] | undefined }): McpTool {
4344
const metadata: Metadata = { resource: 'all', operation: 'write', tags: [] };
4445
const tool: Tool = {
4546
name: 'execute',
@@ -63,6 +64,24 @@ export function codeTool(): McpTool {
6364
const code = args.code as string;
6465
const intent = args.intent as string | undefined;
6566

67+
// Do very basic blocking of code that includes forbidden method names.
68+
//
69+
// WARNING: This is not secure against obfuscation and other evasion methods. If
70+
// stronger security blocks are required, then these should be enforced in the downstream
71+
// API (e.g., by having users call the MCP server with API keys with limited permissions).
72+
if (params.blockedMethods) {
73+
const blockedMatches = params.blockedMethods.filter((method) =>
74+
code.includes(method.fullyQualifiedName),
75+
);
76+
if (blockedMatches.length > 0) {
77+
return asErrorResult(
78+
`The following methods have been blocked by the MCP server and cannot be used in code execution: ${blockedMatches
79+
.map((m) => m.fullyQualifiedName)
80+
.join(', ')}`,
81+
);
82+
}
83+
}
84+
6685
// this is not required, but passing a Stainless API key for the matching project_name
6786
// will allow you to run code-mode queries against non-published versions of your SDK.
6887
const stainlessAPIKey = readEnv('STAINLESS_API_KEY');

packages/mcp-server/src/http.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ import { parseAuthHeaders } from './headers';
1111

1212
const newServer = async ({
1313
clientOptions,
14+
mcpOptions,
1415
req,
1516
res,
1617
}: {
1718
clientOptions: ClientOptions;
19+
mcpOptions: McpOptions;
1820
req: express.Request;
1921
res: express.Response;
2022
}): Promise<McpServer | null> => {
@@ -24,6 +26,7 @@ const newServer = async ({
2426
const authOptions = parseAuthHeaders(req, false);
2527
await initMcpServer({
2628
server: server,
29+
mcpOptions: mcpOptions,
2730
clientOptions: {
2831
...clientOptions,
2932
...authOptions,
@@ -98,6 +101,9 @@ export const streamableHTTPApp = ({
98101
app.use(morgan('combined'));
99102
}
100103

104+
app.get('/health', async (req: express.Request, res: express.Response) => {
105+
res.status(200).send('OK');
106+
});
101107
app.get('/', get);
102108
app.post('/', post({ clientOptions, mcpOptions }));
103109
app.delete('/', del);

packages/mcp-server/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ async function main() {
1818

1919
switch (options.transport) {
2020
case 'stdio':
21-
await launchStdioServer();
21+
await launchStdioServer(options);
2222
break;
2323
case 'http':
2424
await launchStreamableHTTPServer({

0 commit comments

Comments
 (0)