Skip to content

Commit 94b5439

Browse files
feat: update
1 parent 94c2855 commit 94b5439

14 files changed

+236
-21
lines changed

Diff for: .speakeasy/gen.lock

+6-5
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ id: f42cb8e6-e2ce-4565-b975-5a9f38b94d5a
33
management:
44
docChecksum: 2e7f129641ad96d49fcda2ceb173d43c
55
docVersion: 1.0.81
6-
speakeasyVersion: 1.517.3
7-
generationVersion: 2.548.6
8-
releaseVersion: 0.22.0
9-
configChecksum: 0de256135a61cf1f1f4aa7e2b4cc8f93
6+
speakeasyVersion: 1.519.0
7+
generationVersion: 2.552.1
8+
releaseVersion: 0.23.0
9+
configChecksum: 86d5f752c6378b160f1e0a2fb1b0cea7
1010
repoURL: https://github.com/Unstructured-IO/unstructured-js-client.git
1111
repoSubDirectory: .
1212
installationURL: https://github.com/Unstructured-IO/unstructured-js-client
@@ -24,7 +24,7 @@ features:
2424
globalSecurity: 2.82.13
2525
globalSecurityCallbacks: 0.1.0
2626
globalServerURLs: 2.82.4
27-
mcpServer: 0.7.0
27+
mcpServer: 0.8.0
2828
nameOverrides: 2.81.2
2929
nullables: 0.1.1
3030
openEnums: 0.1.1
@@ -88,6 +88,7 @@ generatedFiles:
8888
- src/mcp-server/console-logger.ts
8989
- src/mcp-server/extensions.ts
9090
- src/mcp-server/mcp-server.ts
91+
- src/mcp-server/prompts.ts
9192
- src/mcp-server/resources.ts
9293
- src/mcp-server/scopes.ts
9394
- src/mcp-server/server.ts

Diff for: .speakeasy/workflow.lock

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
1-
speakeasyVersion: 1.517.3
1+
speakeasyVersion: 1.519.0
22
sources:
33
my-source:
44
sourceNamespace: my-source
5-
sourceRevisionDigest: sha256:7b3ee52d5e5acc9bc97268e7996c203d4bec0181379eb5c95868c982fb820726
5+
sourceRevisionDigest: sha256:acb76c58ac398f0d1ea1f9eef8df422c40d5a237c7cf020522258b327792a68d
66
sourceBlobDigest: sha256:822e38da0c61b9aeaa5446413a6cec058a464920a02d20d9ee7955c827446050
77
tags:
88
- latest
9-
- speakeasy-sdk-regen-1742057884
109
- 1.0.81
1110
targets:
1211
unstructed-typescript:
1312
source: my-source
1413
sourceNamespace: my-source
15-
sourceRevisionDigest: sha256:7b3ee52d5e5acc9bc97268e7996c203d4bec0181379eb5c95868c982fb820726
14+
sourceRevisionDigest: sha256:acb76c58ac398f0d1ea1f9eef8df422c40d5a237c7cf020522258b327792a68d
1615
sourceBlobDigest: sha256:822e38da0c61b9aeaa5446413a6cec058a464920a02d20d9ee7955c827446050
1716
codeSamplesNamespace: my-source-typescript-code-samples
18-
codeSamplesRevisionDigest: sha256:86e8bf47bf21198d030067fd18395449530c67061224d03d612d9f6de944baa4
17+
codeSamplesRevisionDigest: sha256:bc9b9485931a5f01bce3a872cdba2295e5aa3e155f52890568c3e8b18c9fd66d
1918
workflow:
2019
workflowVersion: 1.0.0
2120
speakeasyVersion: latest

Diff for: gen.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ generation:
1212
oAuth2ClientCredentialsEnabled: false
1313
oAuth2PasswordEnabled: false
1414
typescript:
15-
version: 0.22.0
15+
version: 0.23.0
1616
additionalDependencies:
1717
dependencies:
1818
async: ^3.2.5

Diff for: jsr.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
{
44
"name": "unstructured-client",
5-
"version": "0.22.0",
5+
"version": "0.23.0",
66
"exports": {
77
".": "./src/index.ts",
88
"./sdk/models/errors": "./src/sdk/models/errors/index.ts",

Diff for: package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "unstructured-client",
3-
"version": "0.22.0",
3+
"version": "0.23.0",
44
"author": "Unstructured",
55
"type": "module",
66
"bin": {

Diff for: src/lib/config.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
6969
export const SDK_METADATA = {
7070
language: "typescript",
7171
openapiDocVersion: "1.0.81",
72-
sdkVersion: "0.22.0",
73-
genVersion: "2.548.6",
72+
sdkVersion: "0.23.0",
73+
genVersion: "2.552.1",
7474
userAgent:
75-
"speakeasy-sdk/typescript 0.22.0 2.548.6 1.0.81 unstructured-client",
75+
"speakeasy-sdk/typescript 0.23.0 2.552.1 1.0.81 unstructured-client",
7676
} as const;

Diff for: src/mcp-server/extensions.ts

+4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33
*/
44

55
import { ZodRawShape } from "zod";
6+
import { PromptArgsRawShape, PromptDefinition } from "./prompts.js";
67
import { ResourceDefinition, ResourceTemplateDefinition } from "./resources.js";
78
import { ToolDefinition } from "./tools.js";
89

910
export type Register = {
1011
tool: <A extends ZodRawShape | undefined>(def: ToolDefinition<A>) => void;
1112
resource: (def: ResourceDefinition) => void;
1213
resourceTemplate: (def: ResourceTemplateDefinition) => void;
14+
prompt: <A extends PromptArgsRawShape | undefined>(
15+
prompt: PromptDefinition<A>,
16+
) => void;
1317
};

Diff for: src/mcp-server/mcp-server.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const routes = buildRouteMap({
1919
export const app = buildApplication(routes, {
2020
name: "mcp",
2121
versionInfo: {
22-
currentVersion: "0.22.0",
22+
currentVersion: "0.23.0",
2323
},
2424
});
2525

Diff for: src/mcp-server/prompts.ts

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
/*
2+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3+
*/
4+
5+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6+
import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
7+
import { GetPromptResult } from "@modelcontextprotocol/sdk/types.js";
8+
import {
9+
objectOutputType,
10+
ZodOptional,
11+
ZodType,
12+
ZodTypeAny,
13+
ZodTypeDef,
14+
} from "zod";
15+
import { UnstructuredClientCore } from "../core.js";
16+
import { ConsoleLogger } from "./console-logger.js";
17+
import { MCPScope } from "./scopes.js";
18+
19+
// '@modelcontextprotocol/sdk' currently does not export this type
20+
export type PromptArgsRawShape = {
21+
[k: string]:
22+
| ZodType<string, ZodTypeDef, string>
23+
| ZodOptional<ZodType<string, ZodTypeDef, string>>;
24+
};
25+
26+
export type PromptDefinition<
27+
Args extends undefined | PromptArgsRawShape = undefined,
28+
> = Args extends PromptArgsRawShape ? {
29+
name: string;
30+
description?: string;
31+
scopes?: MCPScope[];
32+
args: Args;
33+
prompt: (
34+
client: UnstructuredClientCore,
35+
args: objectOutputType<Args, ZodTypeAny>,
36+
extra: RequestHandlerExtra,
37+
) => GetPromptResult | Promise<GetPromptResult>;
38+
}
39+
: {
40+
name: string;
41+
description?: string;
42+
scopes?: MCPScope[];
43+
args?: undefined;
44+
prompt: (
45+
client: UnstructuredClientCore,
46+
extra: RequestHandlerExtra,
47+
) => GetPromptResult | Promise<GetPromptResult>;
48+
};
49+
50+
// Optional function to assist with formatting prompt results
51+
export async function formatResult(value: string): Promise<GetPromptResult> {
52+
return {
53+
messages: [
54+
{
55+
role: "user",
56+
content: {
57+
type: "text",
58+
text: value,
59+
},
60+
},
61+
],
62+
};
63+
}
64+
65+
export function createRegisterPrompt(
66+
logger: ConsoleLogger,
67+
server: McpServer,
68+
sdk: UnstructuredClientCore,
69+
allowedScopes: Set<MCPScope>,
70+
): <A extends PromptArgsRawShape | undefined>(
71+
prompt: PromptDefinition<A>,
72+
) => void {
73+
return <A extends PromptArgsRawShape | undefined>(
74+
prompt: PromptDefinition<A>,
75+
): void => {
76+
const scopes = prompt.scopes ?? [];
77+
if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
78+
return;
79+
}
80+
81+
if (prompt.args) {
82+
if (prompt.description) {
83+
server.prompt(
84+
prompt.name,
85+
prompt.description,
86+
prompt.args,
87+
async (args, ctx) => prompt.prompt(sdk, args, ctx),
88+
);
89+
} else {
90+
server.prompt(
91+
prompt.name,
92+
prompt.args,
93+
async (args, ctx) => prompt.prompt(sdk, args, ctx),
94+
);
95+
}
96+
} else {
97+
if (prompt.description) {
98+
server.prompt(
99+
prompt.name,
100+
prompt.description,
101+
async (ctx) => prompt.prompt(sdk, ctx),
102+
);
103+
} else {
104+
server.prompt(prompt.name, async (ctx) => prompt.prompt(sdk, ctx));
105+
}
106+
}
107+
108+
logger.debug("Registered prompt", { name: prompt.name });
109+
};
110+
}

Diff for: src/mcp-server/resources.ts

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export type ResourceTemplateDefinition = {
4646
read: ReadResourceTemplateCallback;
4747
};
4848

49+
// Optional function to assist with formatting resource results
4950
export async function formatResult(
5051
value: unknown,
5152
uri: URL,

Diff for: src/mcp-server/server.extensions.ts

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import { formatResult, ToolDefinition } from "./tools.js";
2+
import { Register } from "./extensions.js";
3+
import { generalPartition } from "../funcs/generalPartition.js";
4+
import fs from 'node:fs/promises';
5+
import { UnstructuredClientCore } from "../core.js";
6+
import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
7+
import { z } from "zod";
8+
import { Strategy, Strategy$inboundSchema, StrategyOpen } from "../sdk/models/shared/partitionparameters.js";
9+
10+
11+
type FileRequest = {
12+
strategy?: StrategyOpen | undefined;
13+
file_content?: string | undefined;
14+
file_path?: string | undefined;
15+
file_name: string;
16+
};
17+
18+
const FileRequest$inboundSchema: z.ZodType<
19+
FileRequest,
20+
z.ZodTypeDef,
21+
unknown
22+
> = z.object({
23+
file_content: z.string().optional(),
24+
file_path: z.string().optional(),
25+
file_name: z.string(),
26+
strategy: Strategy$inboundSchema.default(Strategy.HiRes),
27+
});
28+
29+
const customToolArg = {
30+
request: FileRequest$inboundSchema
31+
};
32+
33+
34+
35+
export const tool$generalPartitionCorrect: ToolDefinition<typeof customToolArg> = {
36+
name: "correct_general-partition",
37+
description: `use this tool to pass a file to unstructured. You must BASE64 ENCODE uploaded file content before passing to unstructured. Alternatively, if the user did not upload a file they can provide a full local file path. `,
38+
args: customToolArg,
39+
tool: async (client: UnstructuredClientCore, args, ctx: RequestHandlerExtra) => {
40+
let data: Uint8Array;
41+
if (args.request.file_content) {
42+
try {
43+
data = new Uint8Array(Buffer.from(args.request.file_content, 'base64'));
44+
} catch (e) {
45+
return {
46+
content: [{
47+
type: "text",
48+
text: `You must BASE64 encode this file content then pass it to the tool.`,
49+
}],
50+
isError: true,
51+
};
52+
}
53+
} else if (args.request.file_path) {
54+
data = new Uint8Array(await fs.readFile(args.request.file_path));
55+
} else {
56+
return {
57+
content: [{
58+
type: "text",
59+
text: `A full file path for file content must be provided`,
60+
}],
61+
isError: true,
62+
};
63+
}
64+
const [result, apiCall] = await generalPartition(
65+
client,
66+
{
67+
partitionParameters: {
68+
files: {
69+
content: data,
70+
fileName: args.request.file_name,
71+
},
72+
strategy: args.request.strategy,
73+
}
74+
},
75+
{ fetchOptions: { signal: ctx.signal } },
76+
).$inspect();
77+
78+
if (!result.ok) {
79+
return {
80+
content: [{ type: "text", text: result.error.message }],
81+
isError: true,
82+
};
83+
}
84+
85+
const value = result.value;
86+
87+
return formatResult(value, apiCall);
88+
},
89+
};
90+
91+
export function registerMCPExtensions(register: Register): void {
92+
register.tool(tool$generalPartitionCorrect);
93+
}

Diff for: src/mcp-server/server.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
66
import { UnstructuredClientCore } from "../core.js";
77
import { SDKOptions } from "../lib/config.js";
88
import type { ConsoleLogger } from "./console-logger.js";
9+
import { Register } from "./extensions.js";
10+
import { createRegisterPrompt } from "./prompts.js";
911
import {
1012
createRegisterResource,
1113
createRegisterResourceTemplate,
1214
} from "./resources.js";
1315
import { MCPScope, mcpScopes } from "./scopes.js";
16+
import { registerMCPExtensions } from "./server.extensions.js";
1417
import { createRegisterTool } from "./tools.js";
1518
import { tool$generalPartition } from "./tools/generalPartition.js";
1619

@@ -24,7 +27,7 @@ export function createMCPServer(deps: {
2427
}) {
2528
const server = new McpServer({
2629
name: "UnstructuredClient",
27-
version: "0.22.0",
30+
version: "0.23.0",
2831
});
2932

3033
const client = new UnstructuredClientCore({
@@ -50,10 +53,13 @@ export function createMCPServer(deps: {
5053
client,
5154
scopes,
5255
);
53-
const register = { tool, resource, resourceTemplate };
56+
const prompt = createRegisterPrompt(deps.logger, server, client, scopes);
57+
const register = { tool, resource, resourceTemplate, prompt };
5458
void register; // suppress unused warnings
5559

5660
tool(tool$generalPartition);
5761

62+
registerMCPExtensions(register satisfies Register);
63+
5864
return server;
5965
}

Diff for: src/mcp-server/tools.ts

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export type ToolDefinition<Args extends undefined | ZodRawShape = undefined> =
3434
) => CallToolResult | Promise<CallToolResult>;
3535
};
3636

37+
// Optional function to assist with formatting tool results
3738
export async function formatResult(
3839
value: unknown,
3940
init: { response?: Response | undefined },

0 commit comments

Comments
 (0)