From 09d2e939a8c42d495d9207ad2d73841f6e9e8732 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 21 Aug 2025 19:12:00 +0000 Subject: [PATCH 01/47] feat(api): api update --- .stats.yml | 4 ++-- .../mcp-server/src/tools/account/introspect-account.ts | 2 +- src/resources/account.ts | 10 ++++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.stats.yml b/.stats.yml index 9d73576a..ff867f70 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-6d0c6a1feba5ccb895a6779cd98c2a0ae87d6394f5e98a9da51f17258c4eb297.yml -openapi_spec_hash: ac3be0c8a992103e5f467fe1bcb20a81 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf86910e96e83e583689cf5d1a5c583268754026ec68288994fa6a969dc248f2.yml +openapi_spec_hash: 195038e056891afec204c49dadce3b95 config_hash: 5146b12344dae76238940989dac1e8a0 diff --git a/packages/mcp-server/src/tools/account/introspect-account.ts b/packages/mcp-server/src/tools/account/introspect-account.ts index bdc030fb..943b330a 100644 --- a/packages/mcp-server/src/tools/account/introspect-account.ts +++ b/packages/mcp-server/src/tools/account/introspect-account.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'introspect_account', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n entity_ids: {\n type: 'array',\n description: 'Array of entity IDs associated with this connection.',\n items: {\n type: 'string'\n }\n },\n entity_mode: {\n type: 'string',\n description: 'Indicates whether this connection manages a single entity or multiple entities.',\n enum: [ 'single',\n 'multi'\n ]\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/src/resources/account.ts b/src/resources/account.ts index 2df6c8d5..3e9f48b3 100644 --- a/src/resources/account.ts +++ b/src/resources/account.ts @@ -100,6 +100,16 @@ export interface Introspection { */ customer_name?: string | null; + /** + * Array of entity IDs associated with this connection. + */ + entity_ids?: Array; + + /** + * Indicates whether this connection manages a single entity or multiple entities. + */ + entity_mode?: 'single' | 'multi'; + /** * Whether the connection associated with the `access_token` uses the Assisted * Connect Flow. (`true` if using Assisted Connect, `false` if connection is From 47843c85864215c19edd9826952bd625e79ca78c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 17:02:27 +0000 Subject: [PATCH 02/47] chore: update CI script --- .github/workflows/ci.yml | 9 +++++++++ scripts/utils/upload-artifact.sh | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9a2fdde4..8baf2b90 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,6 +68,15 @@ jobs: AUTH: ${{ steps.github-oidc.outputs.github_token }} SHA: ${{ github.sha }} run: ./scripts/utils/upload-artifact.sh + + - name: Upload MCP Server tarball + if: github.repository == 'stainless-sdks/finch-node' + env: + URL: https://pkg.stainless.com/s?subpackage=mcp-server + AUTH: ${{ steps.github-oidc.outputs.github_token }} + SHA: ${{ github.sha }} + BUILD_PATH: packages/mcp-server/dist + run: ./scripts/utils/upload-artifact.sh test: timeout-minutes: 10 name: test diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh index 73865a38..86592f94 100755 --- a/scripts/utils/upload-artifact.sh +++ b/scripts/utils/upload-artifact.sh @@ -12,7 +12,7 @@ if [[ "$SIGNED_URL" == "null" ]]; then exit 1 fi -UPLOAD_RESPONSE=$(tar -cz dist | curl -v -X PUT \ +UPLOAD_RESPONSE=$(tar -cz "${BUILD_PATH:-dist}" | curl -v -X PUT \ -H "Content-Type: application/gzip" \ --data-binary @- "$SIGNED_URL" 2>&1) From 13ef1bd4400e1ae2b2197a35f33e79703af34e08 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 21:08:19 +0000 Subject: [PATCH 03/47] feat(mcp): change remote server query option parsing logic --- packages/mcp-server/src/options.ts | 20 ++++++++++++-------- packages/mcp-server/tests/options.test.ts | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/mcp-server/src/options.ts b/packages/mcp-server/src/options.ts index 9eb00b48..2100cf58 100644 --- a/packages/mcp-server/src/options.ts +++ b/packages/mcp-server/src/options.ts @@ -366,16 +366,20 @@ export function parseQueryOptions(defaultOptions: McpOptions, query: unknown): M } } + let dynamicTools: boolean | undefined = + queryOptions.no_tools && !queryOptions.no_tools?.includes('dynamic') ? false + : queryOptions.tools?.includes('dynamic') ? true + : defaultOptions.includeDynamicTools; + + let allTools: boolean | undefined = + queryOptions.no_tools && !queryOptions.no_tools?.includes('all') ? false + : queryOptions.tools?.includes('all') ? true + : defaultOptions.includeAllTools; + return { client: queryOptions.client ?? defaultOptions.client, - includeDynamicTools: - defaultOptions.includeDynamicTools === false ? - false - : queryOptions.tools?.includes('dynamic') && !queryOptions.no_tools?.includes('dynamic'), - includeAllTools: - defaultOptions.includeAllTools === false ? - false - : queryOptions.tools?.includes('all') && !queryOptions.no_tools?.includes('all'), + includeDynamicTools: dynamicTools, + includeAllTools: allTools, includeCodeTools: undefined, filters, capabilities: clientCapabilities, diff --git a/packages/mcp-server/tests/options.test.ts b/packages/mcp-server/tests/options.test.ts index 24604b84..a8a5b81a 100644 --- a/packages/mcp-server/tests/options.test.ts +++ b/packages/mcp-server/tests/options.test.ts @@ -297,7 +297,7 @@ describe('parseQueryOptions', () => { ]); expect(result.client).toBe('cursor'); - expect(result.includeDynamicTools).toBe(undefined); + expect(result.includeDynamicTools).toBe(true); }); it('should override client from default options', () => { From ac835bf6af93d53e551d73001d048baa95e1c334 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 28 Aug 2025 15:50:47 +0000 Subject: [PATCH 04/47] chore(internal): codegen related update --- packages/mcp-server/README.md | 1 - .../list-individuals-hris-directory.ts | 53 ------------------- packages/mcp-server/src/tools/index.ts | 2 - 3 files changed, 56 deletions(-) delete mode 100644 packages/mcp-server/src/tools/hris/directory/list-individuals-hris-directory.ts diff --git a/packages/mcp-server/README.md b/packages/mcp-server/README.md index e8a5ab16..647e03e8 100644 --- a/packages/mcp-server/README.md +++ b/packages/mcp-server/README.md @@ -238,7 +238,6 @@ The following tools are available in this MCP server. ### Resource `hris.directory`: - `list_hris_directory` (`read`): Read company directory and organization structure -- `list_individuals_hris_directory` (`read`): Read company directory and organization structure ### Resource `hris.individuals`: diff --git a/packages/mcp-server/src/tools/hris/directory/list-individuals-hris-directory.ts b/packages/mcp-server/src/tools/hris/directory/list-individuals-hris-directory.ts deleted file mode 100644 index 56e8cc37..00000000 --- a/packages/mcp-server/src/tools/hris/directory/list-individuals-hris-directory.ts +++ /dev/null @@ -1,53 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { maybeFilter } from '@tryfinch/finch-api-mcp/filtering'; -import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types'; - -import { Tool } from '@modelcontextprotocol/sdk/types.js'; -import Finch from '@tryfinch/finch-api'; - -export const metadata: Metadata = { - resource: 'hris.directory', - operation: 'read', - tags: [], - httpMethod: 'get', - httpPath: '/employer/directory', - operationId: 'get-directory', -}; - -export const tool: Tool = { - name: 'list_individuals_hris_directory', - description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead company directory and organization structure\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n individuals: {\n type: 'array',\n description: 'The array of employees.',\n items: {\n $ref: '#/$defs/individual_in_directory'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'individuals',\n 'paging'\n ],\n $defs: {\n individual_in_directory: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n },\n department: {\n type: 'object',\n description: 'The department object.',\n properties: {\n name: {\n type: 'string',\n description: 'The name of the department.'\n }\n }\n },\n first_name: {\n type: 'string',\n description: 'The legal first name of the individual.'\n },\n is_active: {\n type: 'boolean',\n description: '`true` if the individual is an active employee or contractor at the company.'\n },\n last_name: {\n type: 'string',\n description: 'The legal last name of the individual.'\n },\n manager: {\n type: 'object',\n description: 'The manager object.',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n }\n },\n required: [ 'id'\n ]\n },\n middle_name: {\n type: 'string',\n description: 'The legal middle name of the individual.'\n }\n },\n required: [ 'id',\n 'department',\n 'first_name',\n 'is_active',\n 'last_name',\n 'manager',\n 'middle_name'\n ]\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", - inputSchema: { - type: 'object', - properties: { - limit: { - type: 'integer', - description: 'Number of employees to return (defaults to all)', - }, - offset: { - type: 'integer', - description: 'Index to start from (defaults to 0)', - }, - jq_filter: { - type: 'string', - title: 'jq Filter', - description: - 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', - }, - }, - required: [], - }, - annotations: { - readOnlyHint: true, - }, -}; - -export const handler = async (client: Finch, args: Record | undefined) => { - const { jq_filter, ...body } = args as any; - const response = await client.hris.directory.listIndividuals(body).asResponse(); - return asTextContentResult(await maybeFilter(jq_filter, await response.json())); -}; - -export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/tools/index.ts b/packages/mcp-server/src/tools/index.ts index 80324ba0..43876395 100644 --- a/packages/mcp-server/src/tools/index.ts +++ b/packages/mcp-server/src/tools/index.ts @@ -12,7 +12,6 @@ import update_pay_statement_item_company_hris_rules from './hris/company/pay-sta import list_pay_statement_item_company_hris_rules from './hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules'; import delete_pay_statement_item_company_hris_rules from './hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules'; import list_hris_directory from './hris/directory/list-hris-directory'; -import list_individuals_hris_directory from './hris/directory/list-individuals-hris-directory'; import retrieve_many_hris_individuals from './hris/individuals/retrieve-many-hris-individuals'; import retrieve_many_hris_employments from './hris/employments/retrieve-many-hris-employments'; import list_hris_payments from './hris/payments/list-hris-payments'; @@ -66,7 +65,6 @@ addEndpoint(update_pay_statement_item_company_hris_rules); addEndpoint(list_pay_statement_item_company_hris_rules); addEndpoint(delete_pay_statement_item_company_hris_rules); addEndpoint(list_hris_directory); -addEndpoint(list_individuals_hris_directory); addEndpoint(retrieve_many_hris_individuals); addEndpoint(retrieve_many_hris_employments); addEndpoint(list_hris_payments); From 39cdb7601c55b6d723132edeb320c3898e697fa2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 17:51:13 +0000 Subject: [PATCH 05/47] feat(mcp): expose client options in `streamableHTTPApp` --- packages/mcp-server/src/http.ts | 58 ++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/packages/mcp-server/src/http.ts b/packages/mcp-server/src/http.ts index c11185b7..ec34ab47 100644 --- a/packages/mcp-server/src/http.ts +++ b/packages/mcp-server/src/http.ts @@ -6,14 +6,20 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/ import express from 'express'; import { fromError } from 'zod-validation-error/v3'; import { McpOptions, parseQueryOptions } from './options'; -import { initMcpServer, newMcpServer } from './server'; +import { ClientOptions, initMcpServer, newMcpServer } from './server'; import { parseAuthHeaders } from './headers'; -const newServer = ( - defaultMcpOptions: McpOptions, - req: express.Request, - res: express.Response, -): McpServer | null => { +const newServer = ({ + clientOptions, + mcpOptions: defaultMcpOptions, + req, + res, +}: { + clientOptions: ClientOptions; + mcpOptions: McpOptions; + req: express.Request; + res: express.Response; +}): McpServer | null => { const server = newMcpServer(); let mcpOptions: McpOptions; @@ -35,10 +41,8 @@ const newServer = ( initMcpServer({ server: server, clientOptions: { + ...clientOptions, ...authOptions, - defaultHeaders: { - 'X-Stainless-MCP': 'true', - }, }, mcpOptions, }); @@ -56,17 +60,19 @@ const newServer = ( return server; }; -const post = (defaultOptions: McpOptions) => async (req: express.Request, res: express.Response) => { - const server = newServer(defaultOptions, req, res); - // If we return null, we already set the authorization error. - if (server === null) return; - const transport = new StreamableHTTPServerTransport({ - // Stateless server - sessionIdGenerator: undefined, - }); - await server.connect(transport); - await transport.handleRequest(req, res, req.body); -}; +const post = + (options: { clientOptions: ClientOptions; mcpOptions: McpOptions }) => + async (req: express.Request, res: express.Response) => { + const server = newServer({ ...options, req, res }); + // If we return null, we already set the authorization error. + if (server === null) return; + const transport = new StreamableHTTPServerTransport({ + // Stateless server + sessionIdGenerator: undefined, + }); + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + }; const get = async (req: express.Request, res: express.Response) => { res.status(405).json({ @@ -88,20 +94,26 @@ const del = async (req: express.Request, res: express.Response) => { }); }; -export const streamableHTTPApp = (options: McpOptions): express.Express => { +export const streamableHTTPApp = ({ + clientOptions = {}, + mcpOptions = {}, +}: { + clientOptions?: ClientOptions; + mcpOptions?: McpOptions; +}): express.Express => { const app = express(); app.set('query parser', 'extended'); app.use(express.json()); app.get('/', get); - app.post('/', post(options)); + app.post('/', post({ clientOptions, mcpOptions })); app.delete('/', del); return app; }; export const launchStreamableHTTPServer = async (options: McpOptions, port: number | string | undefined) => { - const app = streamableHTTPApp(options); + const app = streamableHTTPApp({ mcpOptions: options }); const server = app.listen(port); const address = server.address(); From 8c380a8499435e8a92155664943e6fc631f7ba1a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:42:57 +0000 Subject: [PATCH 06/47] fix(mcp): avoid importing unsupported libraries on non-node environments --- packages/mcp-server/src/code-tool.ts | 8 +++++--- packages/mcp-server/src/index.ts | 6 +++--- packages/mcp-server/src/server.ts | 14 +++++++------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/mcp-server/src/code-tool.ts b/packages/mcp-server/src/code-tool.ts index 29def9de..8e5e5e2f 100644 --- a/packages/mcp-server/src/code-tool.ts +++ b/packages/mcp-server/src/code-tool.ts @@ -7,9 +7,7 @@ import { Endpoint, ContentBlock, Metadata } from './tools/types'; import { Tool } from '@modelcontextprotocol/sdk/types.js'; -import { newDenoHTTPWorker } from '@valtown/deno-http-worker'; import { WorkerInput, WorkerError, WorkerSuccess } from './code-tool-types'; -import { workerPath } from './code-tool-paths.cjs'; /** * A tool that runs code against a copy of the SDK. @@ -20,7 +18,7 @@ import { workerPath } from './code-tool-paths.cjs'; * * @param endpoints - The endpoints to include in the list. */ -export function codeTool(): Endpoint { +export async function codeTool(): Promise { const metadata: Metadata = { resource: 'all', operation: 'write', tags: [] }; const tool: Tool = { name: 'execute', @@ -29,6 +27,10 @@ export function codeTool(): Endpoint { inputSchema: { type: 'object', properties: { code: { type: 'string' } } }, }; + // Import dynamically to avoid failing at import time in cases where the environment is not well-supported. + const { newDenoHTTPWorker } = await import('@valtown/deno-http-worker'); + const { workerPath } = await import('./code-tool-paths.cjs'); + const handler = async (client: Finch, args: unknown) => { const baseURLHostname = new URL(client.baseURL).hostname; const { code } = args as { code: string }; diff --git a/packages/mcp-server/src/index.ts b/packages/mcp-server/src/index.ts index c450e4bb..4850a0e2 100644 --- a/packages/mcp-server/src/index.ts +++ b/packages/mcp-server/src/index.ts @@ -14,7 +14,7 @@ async function main() { return; } - const selectedTools = selectToolsOrError(endpoints, options); + const selectedTools = await selectToolsOrError(endpoints, options); console.error( `MCP Server starting with ${selectedTools.length} tools:`, @@ -47,9 +47,9 @@ function parseOptionsOrError() { } } -function selectToolsOrError(endpoints: Endpoint[], options: McpOptions): Endpoint[] { +async function selectToolsOrError(endpoints: Endpoint[], options: McpOptions): Promise { try { - const includedTools = selectTools(endpoints, options); + const includedTools = await selectTools(endpoints, options); if (includedTools.length === 0) { console.error('No tools match the provided filters.'); process.exit(1); diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 79913bb3..1077e6b4 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -55,7 +55,7 @@ export function initMcpServer(params: { let providedEndpoints: Endpoint[] | null = null; let endpointMap: Record | null = null; - const initTools = (implementation?: Implementation) => { + const initTools = async (implementation?: Implementation) => { if (implementation && (!mcpOptions.client || mcpOptions.client === 'infer')) { mcpOptions.client = implementation.name.toLowerCase().includes('claude') ? 'claude' @@ -66,8 +66,8 @@ export function initMcpServer(params: { ...mcpOptions.capabilities, }; } - providedEndpoints = selectTools(endpoints, mcpOptions); - endpointMap = Object.fromEntries(providedEndpoints.map((endpoint) => [endpoint.tool.name, endpoint])); + providedEndpoints ??= await selectTools(endpoints, mcpOptions); + endpointMap ??= Object.fromEntries(providedEndpoints.map((endpoint) => [endpoint.tool.name, endpoint])); }; const client = new Finch({ @@ -82,7 +82,7 @@ export function initMcpServer(params: { server.setRequestHandler(ListToolsRequestSchema, async () => { if (providedEndpoints === null) { - initTools(server.getClientVersion()); + await initTools(server.getClientVersion()); } return { tools: providedEndpoints!.map((endpoint) => endpoint.tool), @@ -91,7 +91,7 @@ export function initMcpServer(params: { server.setRequestHandler(CallToolRequestSchema, async (request) => { if (endpointMap === null) { - initTools(server.getClientVersion()); + await initTools(server.getClientVersion()); } const { name, arguments: args } = request.params; const endpoint = endpointMap![name]; @@ -106,7 +106,7 @@ export function initMcpServer(params: { /** * Selects the tools to include in the MCP Server based on the provided options. */ -export function selectTools(endpoints: Endpoint[], options?: McpOptions): Endpoint[] { +export async function selectTools(endpoints: Endpoint[], options?: McpOptions): Promise { const filteredEndpoints = query(options?.filters ?? [], endpoints); let includedTools = filteredEndpoints; @@ -121,7 +121,7 @@ export function selectTools(endpoints: Endpoint[], options?: McpOptions): Endpoi } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [codeTool()]; + includedTools = [await codeTool()]; } else { includedTools = endpoints; } From 4634f9a04f0fd3a7daa781876a1d93e170f1941d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 01:02:29 +0000 Subject: [PATCH 07/47] feat(mcp): allow setting logging level --- packages/mcp-server/src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 1077e6b4..067fcda0 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -5,8 +5,8 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { Endpoint, endpoints, HandlerFunction, query } from './tools'; import { CallToolRequestSchema, - Implementation, ListToolsRequestSchema, + Implementation, Tool, } from '@modelcontextprotocol/sdk/types.js'; import { ClientOptions } from '@tryfinch/finch-api'; From 45794fe7a8d09dd0160ac3d2a64941fff12837d5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 15:16:12 +0000 Subject: [PATCH 08/47] feat(mcp): add mcp bundles to build script --- .gitignore | 3 +- packages/mcp-server/build | 24 ++ packages/mcp-server/manifest.json | 67 ++++ packages/mcp-server/package.json | 1 + .../mcp-server/scripts/copy-bundle-files.cjs | 36 ++ packages/mcp-server/yarn.lock | 326 +++++++++++++++++- 6 files changed, 448 insertions(+), 9 deletions(-) create mode 100644 packages/mcp-server/manifest.json create mode 100644 packages/mcp-server/scripts/copy-bundle-files.cjs diff --git a/.gitignore b/.gitignore index d98d51a8..4b27d0fc 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ dist dist-deno /*.tgz .idea/ - +dist-bundle +*.dxt diff --git a/packages/mcp-server/build b/packages/mcp-server/build index 7430081b..915e86e7 100644 --- a/packages/mcp-server/build +++ b/packages/mcp-server/build @@ -30,3 +30,27 @@ cp tsconfig.dist-src.json dist/src/tsconfig.json chmod +x dist/index.js DIST_PATH=./dist PKG_IMPORT_PATH=@tryfinch/finch-api-mcp/ node ../../scripts/utils/postprocess-files.cjs + +# mcp bundle +rm -rf dist-bundle tryfinch_finch_api_api.dxt; mkdir dist-bundle + +# copy package.json +PKG_JSON_PATH=../../packages/mcp-server/package.json node ../../scripts/utils/make-dist-package-json.cjs > dist-bundle/package.json + +# copy files +node scripts/copy-bundle-files.cjs + +# install runtime deps +cd dist-bundle +npm install +cd .. + +# pack bundle +cp manifest.json dist-bundle + +npx dxt pack dist-bundle tryfinch_finch_api_api.dxt + +npx dxt sign tryfinch_finch_api_api.dxt --self-signed + +# clean up +rm -rf dist-bundle diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json new file mode 100644 index 00000000..bab14a3d --- /dev/null +++ b/packages/mcp-server/manifest.json @@ -0,0 +1,67 @@ +{ + "dxt_version": "0.1", + "name": "@tryfinch/finch-api-mcp", + "version": "6.37.0", + "description": "The official MCP Server for the Finch API", + "author": { + "name": "Finch", + "email": "founders@tryfinch.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Finch-API/finch-api-node.git" + }, + "homepage": "https://github.com/Finch-API/finch-api-node/tree/main/packages/mcp-server#readme", + "documentation": "https://developer.tryfinch.com/", + "server": { + "type": "node", + "entry_point": "${"templates/TypeScriptSDK/mcp"}/index.js", + "mcp_config": { + "command": "node", + "args": [ + "${"templates/TypeScriptSDK/mcp"}/index.js" + ], + "env": { + "FINCH_ACCESS_TOKEN": "${user_config.FINCH_ACCESS_TOKEN}", + "FINCH_CLIENT_ID": "${user_config.FINCH_CLIENT_ID}", + "FINCH_CLIENT_SECRET": "${user_config.FINCH_CLIENT_SECRET}", + "FINCH_WEBHOOK_SECRET": "${user_config.FINCH_WEBHOOK_SECRET}" + } + } + }, + "user_config": { + "FINCH_ACCESS_TOKEN": { + "title": "access_token", + "description": "", + "required": false, + "type": "string" + }, + "FINCH_CLIENT_ID": { + "title": "client_id", + "description": "", + "required": false, + "type": "string" + }, + "FINCH_CLIENT_SECRET": { + "title": "client_secret", + "description": "", + "required": false, + "type": "string" + }, + "FINCH_WEBHOOK_SECRET": { + "title": "webhook_secret", + "description": "", + "required": false, + "type": "string" + } + }, + "tools_generated": true, + "compatibility": { + "runtimes": { + "node": ">=18.0.0" + } + }, + "keywords": [ + "api" + ] +} diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index 64744cdb..4444cbf7 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -47,6 +47,7 @@ "mcp-server": "dist/index.js" }, "devDependencies": { + "@anthropic-ai/dxt": "^0.2.6", "@types/cors": "^2.8.19", "@types/express": "^5.0.3", "@types/jest": "^29.4.0", diff --git a/packages/mcp-server/scripts/copy-bundle-files.cjs b/packages/mcp-server/scripts/copy-bundle-files.cjs new file mode 100644 index 00000000..08ba1812 --- /dev/null +++ b/packages/mcp-server/scripts/copy-bundle-files.cjs @@ -0,0 +1,36 @@ +const fs = require('fs'); +const path = require('path'); +const pkgJson = require('../dist-bundle/package.json'); + +const distDir = path.resolve(__dirname, '..', 'dist'); +const distBundleDir = path.resolve(__dirname, '..', 'dist-bundle'); +const distBundlePkgJson = path.join(distBundleDir, 'package.json'); + +async function* walk(dir) { + for await (const d of await fs.promises.opendir(dir)) { + const entry = path.join(dir, d.name); + if (d.isDirectory()) yield* walk(entry); + else if (d.isFile()) yield entry; + } +} + +async function copyFiles() { + // copy runtime files + for await (const file of walk(distDir)) { + if (!/[cm]?js$/.test(file)) continue; + const dest = path.join(distBundleDir, path.relative(distDir, file)); + await fs.promises.mkdir(path.dirname(dest), { recursive: true }); + await fs.promises.copyFile(file, dest); + } + + // replace package.json reference with local reference + for (const dep in pkgJson.dependencies) { + if (dep === '@tryfinch/finch-api') { + pkgJson.dependencies[dep] = 'file:../../../dist/'; + } + } + + await fs.promises.writeFile(distBundlePkgJson, JSON.stringify(pkgJson, null, 2)); +} + +copyFiles(); diff --git a/packages/mcp-server/yarn.lock b/packages/mcp-server/yarn.lock index 707a2de8..ad819835 100644 --- a/packages/mcp-server/yarn.lock +++ b/packages/mcp-server/yarn.lock @@ -10,6 +10,20 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" +"@anthropic-ai/dxt@^0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@anthropic-ai/dxt/-/dxt-0.2.6.tgz#636197c3d083c9136ac3b5a11d2ba82477fdc2c6" + integrity sha512-5VSqKRpkytTYh5UJz9jOaI8zLXNCe4Gc+ArKGFV6IeWnEPP0Qnd0k+V3pO8cYzp92Puf/+Cgo0xc4haE0azTXg== + dependencies: + "@inquirer/prompts" "^6.0.1" + commander "^13.1.0" + fflate "^0.8.2" + galactus "^1.0.0" + ignore "^7.0.5" + node-forge "^1.3.1" + pretty-bytes "^5.6.0" + zod "^3.25.67" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" @@ -336,6 +350,144 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@inquirer/checkbox@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-3.0.1.tgz#0a57f704265f78c36e17f07e421b98efb4b9867b" + integrity sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-4.0.1.tgz#9106d6bffa0b2fdd0e4f60319b6f04f2e06e6e25" + integrity sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + +"@inquirer/core@^9.2.1": + version "9.2.1" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" + integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== + dependencies: + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + "@types/mute-stream" "^0.0.4" + "@types/node" "^22.5.5" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^1.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/editor@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-3.0.1.tgz#d109f21e050af6b960725388cb1c04214ed7c7bc" + integrity sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + external-editor "^3.1.0" + +"@inquirer/expand@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-3.0.1.tgz#aed9183cac4d12811be47a4a895ea8e82a17e22c" + integrity sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.6": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" + integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== + +"@inquirer/input@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-3.0.1.tgz#de63d49e516487388508d42049deb70f2cb5f28e" + integrity sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + +"@inquirer/number@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-2.0.1.tgz#b9863080d02ab7dc2e56e16433d83abea0f2a980" + integrity sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + +"@inquirer/password@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-3.0.1.tgz#2a9a9143591088336bbd573bcb05d5bf080dbf87" + integrity sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-6.0.1.tgz#43f5c0ed35c5ebfe52f1d43d46da2d363d950071" + integrity sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A== + dependencies: + "@inquirer/checkbox" "^3.0.1" + "@inquirer/confirm" "^4.0.1" + "@inquirer/editor" "^3.0.1" + "@inquirer/expand" "^3.0.1" + "@inquirer/input" "^3.0.1" + "@inquirer/number" "^2.0.1" + "@inquirer/password" "^3.0.1" + "@inquirer/rawlist" "^3.0.1" + "@inquirer/search" "^2.0.1" + "@inquirer/select" "^3.0.1" + +"@inquirer/rawlist@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-3.0.1.tgz#729def358419cc929045f264131878ed379e0af3" + integrity sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-2.0.1.tgz#69b774a0a826de2e27b48981d01bc5ad81e73721" + integrity sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-3.0.1.tgz#1df9ed27fb85a5f526d559ac5ce7cc4e9dc4e7ec" + integrity sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" + integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== + dependencies: + mute-stream "^1.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -725,6 +877,13 @@ dependencies: "@types/node" "*" +"@types/cors@^2.8.19": + version "2.8.19" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== + dependencies: + "@types/node" "*" + "@types/express-serve-static-core@^5.0.0": version "5.0.7" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz#2fa94879c9d46b11a5df4c74ac75befd6b283de6" @@ -788,6 +947,13 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" + "@types/node@*": version "22.15.17" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.17.tgz#355ccec95f705b664e4332bb64a7f07db30b7055" @@ -795,7 +961,14 @@ dependencies: undici-types "~6.21.0" -"@types/qs@*": +"@types/node@^22.5.5": + version "22.18.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.0.tgz#9e4709be4f104e3568f7dd1c71e2949bf147a47b" + integrity sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ== + dependencies: + undici-types "~6.21.0" + +"@types/qs@*", "@types/qs@^6.14.0": version "6.14.0" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== @@ -827,6 +1000,11 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== + "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" @@ -925,6 +1103,11 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== +"@valtown/deno-http-worker@^0.0.21": + version "0.0.21" + resolved "https://registry.yarnpkg.com/@valtown/deno-http-worker/-/deno-http-worker-0.0.21.tgz#9ce3b5c1d0db211fe7ea8297881fe551838474ad" + integrity sha512-16kFuUykann75lNytnXXIQlmpzreZjzdyT27ebT3yNGCS3kKaS1iZYWHc3Si9An54Cphwr4qEcviChQkEeJBlA== + accepts@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" @@ -968,7 +1151,7 @@ ajv@^6.12.4, ajv@^6.12.6: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -1210,6 +1393,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + ci-info@^3.2.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -1225,6 +1413,11 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -1261,6 +1454,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1673,6 +1871,15 @@ express@^5.0.1, express@^5.1.0: type-is "^2.0.1" vary "^1.1.2" +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1718,6 +1925,11 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fflate@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1781,6 +1993,14 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== +flora-colossus@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-2.0.0.tgz#af1e85db0a8256ef05f3fb531c1235236c97220a" + integrity sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA== + dependencies: + debug "^4.3.4" + fs-extra "^10.1.0" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -1791,6 +2011,15 @@ fresh@^2.0.0: resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1806,6 +2035,15 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +galactus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/galactus/-/galactus-1.0.0.tgz#c2615182afa0c6d0859b92e56ae36d052827db7e" + integrity sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ== + dependencies: + debug "^4.3.4" + flora-colossus "^2.0.0" + fs-extra "^10.1.0" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -1898,7 +2136,7 @@ gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.2.9: +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -1953,11 +2191,23 @@ iconv-lite@0.6.3, iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +ignore@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + import-fresh@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" @@ -2536,6 +2786,15 @@ json5@^2.2.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonfile@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -2709,6 +2968,11 @@ ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2719,6 +2983,11 @@ negotiator@^1.0.0: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -2784,6 +3053,11 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + p-all@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-all/-/p-all-3.0.0.tgz#077c023c37e75e760193badab2bad3ccd5782bfb" @@ -2927,6 +3201,11 @@ prettier@^3.0.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== +pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -3074,7 +3353,7 @@ safe-buffer@5.2.1, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3178,6 +3457,11 @@ signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -3322,6 +3606,13 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -3387,9 +3678,9 @@ ts-node@^10.5.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -"tsc-multi@https://github.com/stainless-api/tsc-multi/releases/download/v1.1.8/tsc-multi.tgz": - version "1.1.8" - resolved "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.8/tsc-multi.tgz#f544b359b8f05e607771ffacc280e58201476b04" +"tsc-multi@https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz": + version "1.1.9" + resolved "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz#777f6f5d9e26bf0e94e5170990dd3a841d6707cd" dependencies: debug "^4.3.7" fast-glob "^3.3.2" @@ -3462,6 +3753,11 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -3525,6 +3821,15 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -3585,6 +3890,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors-cjs@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" + integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== + zod-to-json-schema@^3.24.1, zod-to-json-schema@^3.24.5: version "3.24.5" resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz#d1095440b147fb7c2093812a53c54df8d5df50a3" @@ -3600,7 +3910,7 @@ zod@^3.23.8: resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.4.tgz#e2e2cca5faaa012d76e527d0d36622e0a90c315f" integrity sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg== -zod@^3.25.20: +zod@^3.25.20, zod@^3.25.67: version "3.25.76" resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== From 697d211b9600d388aa101879ac6c400e4eb4ac53 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 22:00:54 +0000 Subject: [PATCH 09/47] chore(internal): codegen related update --- packages/mcp-server/manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json index bab14a3d..602ece98 100644 --- a/packages/mcp-server/manifest.json +++ b/packages/mcp-server/manifest.json @@ -15,11 +15,11 @@ "documentation": "https://developer.tryfinch.com/", "server": { "type": "node", - "entry_point": "${"templates/TypeScriptSDK/mcp"}/index.js", + "entry_point": "${__dirname}/index.js", "mcp_config": { "command": "node", "args": [ - "${"templates/TypeScriptSDK/mcp"}/index.js" + "${__dirname}/index.js" ], "env": { "FINCH_ACCESS_TOKEN": "${user_config.FINCH_ACCESS_TOKEN}", From f0c3633571f7eea46803cb75ba244c41cac5a7b4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 5 Sep 2025 17:55:40 +0000 Subject: [PATCH 10/47] chore: ci build action --- .github/workflows/ci.yml | 2 +- scripts/utils/upload-artifact.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8baf2b90..f1ca7188 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,7 +75,7 @@ jobs: URL: https://pkg.stainless.com/s?subpackage=mcp-server AUTH: ${{ steps.github-oidc.outputs.github_token }} SHA: ${{ github.sha }} - BUILD_PATH: packages/mcp-server/dist + BASE_PATH: packages/mcp-server run: ./scripts/utils/upload-artifact.sh test: timeout-minutes: 10 diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh index 86592f94..7e2b4502 100755 --- a/scripts/utils/upload-artifact.sh +++ b/scripts/utils/upload-artifact.sh @@ -12,7 +12,7 @@ if [[ "$SIGNED_URL" == "null" ]]; then exit 1 fi -UPLOAD_RESPONSE=$(tar -cz "${BUILD_PATH:-dist}" | curl -v -X PUT \ +UPLOAD_RESPONSE=$(tar "${BASE_PATH:+-C$BASE_PATH}" -cz "${ARTIFACT_PATH:-dist}" | curl -v -X PUT \ -H "Content-Type: application/gzip" \ --data-binary @- "$SIGNED_URL" 2>&1) From 90877607933fa892f5d05c8931fa2de9d139e769 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 5 Sep 2025 20:03:56 +0000 Subject: [PATCH 11/47] fix(mcp): fix query options parsing --- packages/mcp-server/src/options.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mcp-server/src/options.ts b/packages/mcp-server/src/options.ts index 2100cf58..ecc9f10e 100644 --- a/packages/mcp-server/src/options.ts +++ b/packages/mcp-server/src/options.ts @@ -367,12 +367,12 @@ export function parseQueryOptions(defaultOptions: McpOptions, query: unknown): M } let dynamicTools: boolean | undefined = - queryOptions.no_tools && !queryOptions.no_tools?.includes('dynamic') ? false + queryOptions.no_tools && queryOptions.no_tools?.includes('dynamic') ? false : queryOptions.tools?.includes('dynamic') ? true : defaultOptions.includeDynamicTools; let allTools: boolean | undefined = - queryOptions.no_tools && !queryOptions.no_tools?.includes('all') ? false + queryOptions.no_tools && queryOptions.no_tools?.includes('all') ? false : queryOptions.tools?.includes('all') ? true : defaultOptions.includeAllTools; From aa135f5fdfe89359b6ad8c49b1908e7faee4ebaa Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 18:40:38 +0000 Subject: [PATCH 12/47] fix: coerce nullable values to undefined --- src/core.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core.ts b/src/core.ts index bae4c206..4eebc18a 100644 --- a/src/core.ts +++ b/src/core.ts @@ -1087,21 +1087,21 @@ export const coerceBoolean = (value: unknown): boolean => { }; export const maybeCoerceInteger = (value: unknown): number | undefined => { - if (value === undefined) { + if (value == null) { return undefined; } return coerceInteger(value); }; export const maybeCoerceFloat = (value: unknown): number | undefined => { - if (value === undefined) { + if (value == null) { return undefined; } return coerceFloat(value); }; export const maybeCoerceBoolean = (value: unknown): boolean | undefined => { - if (value === undefined) { + if (value == null) { return undefined; } return coerceBoolean(value); From 9bc9a38df44189e734248cf7ad06259f93e25b82 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 18:58:12 +0000 Subject: [PATCH 13/47] feat(api): api update --- .stats.yml | 4 +- src/resources/hris/pay-statements.ts | 72 ++++++++++------------------ 2 files changed, 26 insertions(+), 50 deletions(-) diff --git a/.stats.yml b/.stats.yml index ff867f70..781f7a67 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf86910e96e83e583689cf5d1a5c583268754026ec68288994fa6a969dc248f2.yml -openapi_spec_hash: 195038e056891afec204c49dadce3b95 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-edbdcdf654a3ab8c23745e1d115fc8b54908eb913571d70f1145a0b6a45cc811.yml +openapi_spec_hash: 1b21e4bfc46daeef1613e410e5aa8f28 config_hash: 5146b12344dae76238940989dac1e8a0 diff --git a/src/resources/hris/pay-statements.ts b/src/resources/hris/pay-statements.ts index 2a7af53e..f9eb2090 100644 --- a/src/resources/hris/pay-statements.ts +++ b/src/resources/hris/pay-statements.ts @@ -133,18 +133,12 @@ export namespace PayStatement { export namespace Earning { export interface Attributes { - metadata: Attributes.Metadata; - } - - export namespace Attributes { - export interface Metadata { - /** - * The metadata to be attached to the entity by existing rules. It is a key-value - * pairs where the values can be of any type (string, number, boolean, object, - * array, etc.). - */ - metadata: { [key: string]: unknown }; - } + /** + * The metadata to be attached to the entity by existing rules. It is a key-value + * pairs where the values can be of any type (string, number, boolean, object, + * array, etc.). + */ + metadata: { [key: string]: unknown }; } } @@ -179,18 +173,12 @@ export namespace PayStatement { export namespace EmployeeDeduction { export interface Attributes { - metadata: Attributes.Metadata; - } - - export namespace Attributes { - export interface Metadata { - /** - * The metadata to be attached to the entity by existing rules. It is a key-value - * pairs where the values can be of any type (string, number, boolean, object, - * array, etc.). - */ - metadata: { [key: string]: unknown }; - } + /** + * The metadata to be attached to the entity by existing rules. It is a key-value + * pairs where the values can be of any type (string, number, boolean, object, + * array, etc.). + */ + metadata: { [key: string]: unknown }; } } @@ -220,18 +208,12 @@ export namespace PayStatement { export namespace EmployerContribution { export interface Attributes { - metadata: Attributes.Metadata; - } - - export namespace Attributes { - export interface Metadata { - /** - * The metadata to be attached to the entity by existing rules. It is a key-value - * pairs where the values can be of any type (string, number, boolean, object, - * array, etc.). - */ - metadata: { [key: string]: unknown }; - } + /** + * The metadata to be attached to the entity by existing rules. It is a key-value + * pairs where the values can be of any type (string, number, boolean, object, + * array, etc.). + */ + metadata: { [key: string]: unknown }; } } @@ -266,18 +248,12 @@ export namespace PayStatement { export namespace Tax { export interface Attributes { - metadata: Attributes.Metadata; - } - - export namespace Attributes { - export interface Metadata { - /** - * The metadata to be attached to the entity by existing rules. It is a key-value - * pairs where the values can be of any type (string, number, boolean, object, - * array, etc.). - */ - metadata: { [key: string]: unknown }; - } + /** + * The metadata to be attached to the entity by existing rules. It is a key-value + * pairs where the values can be of any type (string, number, boolean, object, + * array, etc.). + */ + metadata: { [key: string]: unknown }; } } } From d67f867f1b3c9e4886d21da21a1cccab5760aa9d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 20:59:10 +0000 Subject: [PATCH 14/47] feat(api): make client id, client secret optional again --- .stats.yml | 4 ++-- .../src/tools/access-tokens/create-access-tokens.ts | 10 +++++----- src/resources/access-tokens.ts | 12 ++++++------ tests/api-resources/access-tokens.test.ts | 8 ++------ 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/.stats.yml b/.stats.yml index 781f7a67..496cf9a0 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-edbdcdf654a3ab8c23745e1d115fc8b54908eb913571d70f1145a0b6a45cc811.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bb50c0ae41ff5036adf72344d33057941f6de67c5fae811eba2e758bfa4ffd31.yml openapi_spec_hash: 1b21e4bfc46daeef1613e410e5aa8f28 -config_hash: 5146b12344dae76238940989dac1e8a0 +config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts b/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts index ab965037..3dd1cd4a 100644 --- a/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts +++ b/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts @@ -22,6 +22,10 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + code: { + type: 'string', + description: 'The authorization code received from the authorization server', + }, client_id: { type: 'string', description: 'The client ID for your application', @@ -30,10 +34,6 @@ export const tool: Tool = { type: 'string', description: 'The client secret for your application', }, - code: { - type: 'string', - description: 'The authorization code received from the authorization server', - }, redirect_uri: { type: 'string', description: 'The redirect URI used in the authorization request (optional)', @@ -45,7 +45,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['client_id', 'client_secret', 'code'], + required: ['code'], }, annotations: {}, }; diff --git a/src/resources/access-tokens.ts b/src/resources/access-tokens.ts index e6daab6a..770a0c3d 100644 --- a/src/resources/access-tokens.ts +++ b/src/resources/access-tokens.ts @@ -98,19 +98,19 @@ export interface CreateAccessTokenResponse { export interface AccessTokenCreateParams { /** - * The client ID for your application + * The authorization code received from the authorization server */ - client_id: string; + code: string; /** - * The client secret for your application + * The client ID for your application */ - client_secret: string; + client_id?: string; /** - * The authorization code received from the authorization server + * The client secret for your application */ - code: string; + client_secret?: string; /** * The redirect URI used in the authorization request (optional) diff --git a/tests/api-resources/access-tokens.test.ts b/tests/api-resources/access-tokens.test.ts index b268d554..fe0433de 100644 --- a/tests/api-resources/access-tokens.test.ts +++ b/tests/api-resources/access-tokens.test.ts @@ -12,11 +12,7 @@ const client = new Finch({ describe('resource accessTokens', () => { test('create: only required params', async () => { - const responsePromise = client.accessTokens.create({ - client_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', - client_secret: 'client_secret', - code: 'code', - }); + const responsePromise = client.accessTokens.create({ code: 'code' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -28,9 +24,9 @@ describe('resource accessTokens', () => { test('create: required and optional params', async () => { const response = await client.accessTokens.create({ + code: 'code', client_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', client_secret: 'client_secret', - code: 'code', redirect_uri: 'redirect_uri', }); }); From 256c717c7eb0bd947322b14d85fc15cd7f919724 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 19:30:16 +0000 Subject: [PATCH 15/47] chore(mcp): upload dxt as release asset --- .github/workflows/publish-npm.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 63f1d2ed..52e9dc3e 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -39,3 +39,6 @@ jobs: yarn tsn scripts/publish-packages.ts "{ \"paths_released\": \"$PATHS_RELEASED\" }" env: NPM_TOKEN: ${{ secrets.FINCH_NPM_TOKEN || secrets.NPM_TOKEN }} + + - name: Upload MCP Server DXT GitHub release asset + run: gh release upload packages/mcp-server/tryfinch_finch_api_api.dxt From 70f9a36f47190f4b78de043e63d65e21df6ce116 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 11 Sep 2025 17:45:53 +0000 Subject: [PATCH 16/47] fix(mcp): fix uploading dxt release assets --- .github/workflows/publish-npm.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 52e9dc3e..62228ae2 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -41,4 +41,6 @@ jobs: NPM_TOKEN: ${{ secrets.FINCH_NPM_TOKEN || secrets.NPM_TOKEN }} - name: Upload MCP Server DXT GitHub release asset - run: gh release upload packages/mcp-server/tryfinch_finch_api_api.dxt + run: | + gh release upload ${{ github.event.release.tag_name }} \ + packages/mcp-server/tryfinch_finch_api_api.dxt From 6a6dd0af7e290990c7773447615e3e5d99ff217b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 16 Sep 2025 15:37:12 +0000 Subject: [PATCH 17/47] fix(ci): set permissions for DXT publish action --- .github/workflows/publish-npm.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 62228ae2..243689e0 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -16,6 +16,8 @@ jobs: publish: name: publish runs-on: ubuntu-latest + permissions: + contents: write steps: - uses: actions/checkout@v4 @@ -44,3 +46,5 @@ jobs: run: | gh release upload ${{ github.event.release.tag_name }} \ packages/mcp-server/tryfinch_finch_api_api.dxt + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 68a9c079dfb35ab661f58780405036399fbaf31e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 01:17:33 +0000 Subject: [PATCH 18/47] chore(mcp): rename dxt to mcpb --- .github/workflows/publish-npm.yml | 2 +- packages/mcp-server/build | 6 +++--- packages/mcp-server/manifest.json | 5 +++-- packages/mcp-server/package.json | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 243689e0..459a6859 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -45,6 +45,6 @@ jobs: - name: Upload MCP Server DXT GitHub release asset run: | gh release upload ${{ github.event.release.tag_name }} \ - packages/mcp-server/tryfinch_finch_api_api.dxt + packages/mcp-server/tryfinch_finch_api_api.mcpb env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/packages/mcp-server/build b/packages/mcp-server/build index 915e86e7..0bc3f358 100644 --- a/packages/mcp-server/build +++ b/packages/mcp-server/build @@ -32,7 +32,7 @@ chmod +x dist/index.js DIST_PATH=./dist PKG_IMPORT_PATH=@tryfinch/finch-api-mcp/ node ../../scripts/utils/postprocess-files.cjs # mcp bundle -rm -rf dist-bundle tryfinch_finch_api_api.dxt; mkdir dist-bundle +rm -rf dist-bundle tryfinch_finch_api_api.mcpb; mkdir dist-bundle # copy package.json PKG_JSON_PATH=../../packages/mcp-server/package.json node ../../scripts/utils/make-dist-package-json.cjs > dist-bundle/package.json @@ -48,9 +48,9 @@ cd .. # pack bundle cp manifest.json dist-bundle -npx dxt pack dist-bundle tryfinch_finch_api_api.dxt +npx mcpb pack dist-bundle tryfinch_finch_api_api.mcpb -npx dxt sign tryfinch_finch_api_api.dxt --self-signed +npx mcpb sign tryfinch_finch_api_api.mcpb --self-signed # clean up rm -rf dist-bundle diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json index 602ece98..04fd27e3 100644 --- a/packages/mcp-server/manifest.json +++ b/packages/mcp-server/manifest.json @@ -1,5 +1,5 @@ { - "dxt_version": "0.1", + "dxt_version": "0.2", "name": "@tryfinch/finch-api-mcp", "version": "6.37.0", "description": "The official MCP Server for the Finch API", @@ -15,7 +15,7 @@ "documentation": "https://developer.tryfinch.com/", "server": { "type": "node", - "entry_point": "${__dirname}/index.js", + "entry_point": "index.js", "mcp_config": { "command": "node", "args": [ @@ -55,6 +55,7 @@ "type": "string" } }, + "tools": [], "tools_generated": true, "compatibility": { "runtimes": { diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index 4444cbf7..a09f0a7b 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -47,7 +47,7 @@ "mcp-server": "dist/index.js" }, "devDependencies": { - "@anthropic-ai/dxt": "^0.2.6", + "@anthropic-ai/mcpb": "^1.1.0", "@types/cors": "^2.8.19", "@types/express": "^5.0.3", "@types/jest": "^29.4.0", From 73c778e3b9d157f8296c43131cd0db764d5086bc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 03:09:46 +0000 Subject: [PATCH 19/47] chore(internal): gitignore .mcpb files --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4b27d0fc..74cba895 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ dist-deno /*.tgz .idea/ dist-bundle -*.dxt +*.mcpb From a9e866662d47e0f39a1988339101d46ba149fb9d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 21:20:20 +0000 Subject: [PATCH 20/47] feat(mcp): add docs search tool --- packages/mcp-server/src/docs-search-tool.ts | 45 +++++++++++++++++++++ packages/mcp-server/src/server.ts | 3 +- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 packages/mcp-server/src/docs-search-tool.ts diff --git a/packages/mcp-server/src/docs-search-tool.ts b/packages/mcp-server/src/docs-search-tool.ts new file mode 100644 index 00000000..23bbe109 --- /dev/null +++ b/packages/mcp-server/src/docs-search-tool.ts @@ -0,0 +1,45 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { Metadata, asTextContentResult } from './tools/types'; + +import { Tool } from '@modelcontextprotocol/sdk/types.js'; + +export const metadata: Metadata = { + resource: 'all', + operation: 'read', + tags: [], + httpMethod: 'get', +}; + +export const tool: Tool = { + name: 'search_docs', + description: + 'Search for documentation for how to use the client to interact with the API.\nThe tool will return an array of Markdown-formatted documentation pages.', + inputSchema: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'The query to search for.', + }, + language: { + type: 'string', + description: 'The language for the SDK to search for.', + enum: ['http', 'python', 'go', 'typescript', 'terraform', 'ruby', 'java', 'kotlin'], + }, + }, + required: ['query', 'language'], + }, + annotations: { + readOnlyHint: true, + }, +}; + +export const handler = async (_: unknown, args: Record | undefined) => { + const body = args as any; + const query = new URLSearchParams(body).toString(); + const result = await fetch('https://api.stainless.com/api/projects/finch/finch/docs/search?' + query); + return asTextContentResult(await result.json()); +}; + +export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 067fcda0..1263b340 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -20,6 +20,7 @@ import { } from './compat'; import { dynamicTools } from './dynamic-tools'; import { codeTool } from './code-tool'; +import docsSearchTool from './docs-search-tool'; import { McpOptions } from './options'; export { McpOptions } from './options'; @@ -121,7 +122,7 @@ export async function selectTools(endpoints: Endpoint[], options?: McpOptions): } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [await codeTool()]; + includedTools = [await codeTool(), docsSearchTool]; } else { includedTools = endpoints; } From 27ec1f5a8d71f31a327021745f7dab0aeebc4b7b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 22:45:52 +0000 Subject: [PATCH 21/47] chore(codegen): internal codegen update --- packages/mcp-server/src/docs-search-tool.ts | 45 --------------------- packages/mcp-server/src/server.ts | 3 +- 2 files changed, 1 insertion(+), 47 deletions(-) delete mode 100644 packages/mcp-server/src/docs-search-tool.ts diff --git a/packages/mcp-server/src/docs-search-tool.ts b/packages/mcp-server/src/docs-search-tool.ts deleted file mode 100644 index 23bbe109..00000000 --- a/packages/mcp-server/src/docs-search-tool.ts +++ /dev/null @@ -1,45 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { Metadata, asTextContentResult } from './tools/types'; - -import { Tool } from '@modelcontextprotocol/sdk/types.js'; - -export const metadata: Metadata = { - resource: 'all', - operation: 'read', - tags: [], - httpMethod: 'get', -}; - -export const tool: Tool = { - name: 'search_docs', - description: - 'Search for documentation for how to use the client to interact with the API.\nThe tool will return an array of Markdown-formatted documentation pages.', - inputSchema: { - type: 'object', - properties: { - query: { - type: 'string', - description: 'The query to search for.', - }, - language: { - type: 'string', - description: 'The language for the SDK to search for.', - enum: ['http', 'python', 'go', 'typescript', 'terraform', 'ruby', 'java', 'kotlin'], - }, - }, - required: ['query', 'language'], - }, - annotations: { - readOnlyHint: true, - }, -}; - -export const handler = async (_: unknown, args: Record | undefined) => { - const body = args as any; - const query = new URLSearchParams(body).toString(); - const result = await fetch('https://api.stainless.com/api/projects/finch/finch/docs/search?' + query); - return asTextContentResult(await result.json()); -}; - -export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 1263b340..067fcda0 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -20,7 +20,6 @@ import { } from './compat'; import { dynamicTools } from './dynamic-tools'; import { codeTool } from './code-tool'; -import docsSearchTool from './docs-search-tool'; import { McpOptions } from './options'; export { McpOptions } from './options'; @@ -122,7 +121,7 @@ export async function selectTools(endpoints: Endpoint[], options?: McpOptions): } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [await codeTool(), docsSearchTool]; + includedTools = [await codeTool()]; } else { includedTools = endpoints; } From 1758c0de64e97975332bb8a0c6b55a23ed82a036 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 19 Sep 2025 17:44:38 +0000 Subject: [PATCH 22/47] chore: do not install brew dependencies in ./scripts/bootstrap by default --- scripts/bootstrap | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/bootstrap b/scripts/bootstrap index 0af58e25..f68bedac 100755 --- a/scripts/bootstrap +++ b/scripts/bootstrap @@ -4,10 +4,18 @@ set -e cd "$(dirname "$0")/.." -if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ]; then +if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then brew bundle check >/dev/null 2>&1 || { - echo "==> Installing Homebrew dependencies…" - brew bundle + echo -n "==> Install Homebrew dependencies? (y/N): " + read -r response + case "$response" in + [yY][eE][sS]|[yY]) + brew bundle + ;; + *) + ;; + esac + echo } fi From 8ec38f6536ca6a6e7324dd827db0dc9ee9234f61 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 21:20:09 +0000 Subject: [PATCH 23/47] feat(mcp): enable experimental docs search tool --- packages/mcp-server/src/docs-search-tool.ts | 45 +++++++++++++++++++++ packages/mcp-server/src/server.ts | 3 +- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 packages/mcp-server/src/docs-search-tool.ts diff --git a/packages/mcp-server/src/docs-search-tool.ts b/packages/mcp-server/src/docs-search-tool.ts new file mode 100644 index 00000000..42eeb44f --- /dev/null +++ b/packages/mcp-server/src/docs-search-tool.ts @@ -0,0 +1,45 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { Metadata, asTextContentResult } from './tools/types'; + +import { Tool } from '@modelcontextprotocol/sdk/types.js'; + +export const metadata: Metadata = { + resource: 'all', + operation: 'read', + tags: [], + httpMethod: 'get', +}; + +export const tool: Tool = { + name: 'search_docs', + description: + 'Search for documentation for how to use the client to interact with the API.\nThe tool will return an array of Markdown-formatted documentation pages.', + inputSchema: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'The query to search for.', + }, + language: { + type: 'string', + description: 'The language for the SDK to search for.', + enum: ['http', 'python', 'go', 'typescript', 'terraform', 'ruby', 'java', 'kotlin'], + }, + }, + required: ['query', 'language'], + }, + annotations: { + readOnlyHint: true, + }, +}; + +export const handler = async (_: unknown, args: Record | undefined) => { + const body = args as any; + const query = new URLSearchParams(body).toString(); + const result = await fetch('https://api.stainless.com/api/projects/finch/docs/search?' + query); + return asTextContentResult(await result.json()); +}; + +export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 067fcda0..1263b340 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -20,6 +20,7 @@ import { } from './compat'; import { dynamicTools } from './dynamic-tools'; import { codeTool } from './code-tool'; +import docsSearchTool from './docs-search-tool'; import { McpOptions } from './options'; export { McpOptions } from './options'; @@ -121,7 +122,7 @@ export async function selectTools(endpoints: Endpoint[], options?: McpOptions): } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [await codeTool()]; + includedTools = [await codeTool(), docsSearchTool]; } else { includedTools = endpoints; } From fef1f5b0cc05c737db89097378c88a38e8973089 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 23 Sep 2025 14:43:40 +0000 Subject: [PATCH 24/47] feat(mcp): add option for including docs tools --- packages/mcp-server/src/options.ts | 19 ++++++++++++++----- packages/mcp-server/src/server.ts | 12 +++++++----- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/mcp-server/src/options.ts b/packages/mcp-server/src/options.ts index ecc9f10e..348a33d0 100644 --- a/packages/mcp-server/src/options.ts +++ b/packages/mcp-server/src/options.ts @@ -17,6 +17,7 @@ export type McpOptions = { includeDynamicTools?: boolean | undefined; includeAllTools?: boolean | undefined; includeCodeTools?: boolean | undefined; + includeDocsTools?: boolean | undefined; filters?: Filter[] | undefined; capabilities?: Partial | undefined; }; @@ -55,13 +56,13 @@ export function parseCLIOptions(): CLIOptions { .option('tools', { type: 'string', array: true, - choices: ['dynamic', 'all', 'code'], + choices: ['dynamic', 'all', 'code', 'docs'], description: 'Use dynamic tools or all tools', }) .option('no-tools', { type: 'string', array: true, - choices: ['dynamic', 'all', 'code'], + choices: ['dynamic', 'all', 'code', 'docs'], description: 'Do not use any dynamic or all tools', }) .option('tool', { @@ -245,13 +246,14 @@ export function parseCLIOptions(): CLIOptions { } } - const shouldIncludeToolType = (toolType: 'dynamic' | 'all' | 'code') => + const shouldIncludeToolType = (toolType: 'dynamic' | 'all' | 'code' | 'docs') => explicitTools ? argv.tools?.includes(toolType) && !argv.noTools?.includes(toolType) : undefined; const explicitTools = Boolean(argv.tools || argv.noTools); const includeDynamicTools = shouldIncludeToolType('dynamic'); const includeAllTools = shouldIncludeToolType('all'); const includeCodeTools = shouldIncludeToolType('code'); + const includeDocsTools = shouldIncludeToolType('docs'); const transport = argv.transport as 'stdio' | 'http'; @@ -261,6 +263,7 @@ export function parseCLIOptions(): CLIOptions { includeDynamicTools, includeAllTools, includeCodeTools, + includeDocsTools, filters, capabilities: clientCapabilities, list: argv.list || false, @@ -280,8 +283,8 @@ const coerceArray = (zodType: T) => ); const QueryOptions = z.object({ - tools: coerceArray(z.enum(['dynamic', 'all'])).describe('Use dynamic tools or all tools'), - no_tools: coerceArray(z.enum(['dynamic', 'all'])).describe('Do not use dynamic tools or all tools'), + tools: coerceArray(z.enum(['dynamic', 'all', 'docs'])).describe('Use dynamic tools or all tools'), + no_tools: coerceArray(z.enum(['dynamic', 'all', 'docs'])).describe('Do not use dynamic tools or all tools'), tool: coerceArray(z.string()).describe('Include tools matching the specified names'), resource: coerceArray(z.string()).describe('Include tools matching the specified resources'), operation: coerceArray(z.enum(['read', 'write'])).describe( @@ -376,11 +379,17 @@ export function parseQueryOptions(defaultOptions: McpOptions, query: unknown): M : queryOptions.tools?.includes('all') ? true : defaultOptions.includeAllTools; + let docsTools: boolean | undefined = + queryOptions.no_tools && queryOptions.no_tools?.includes('docs') ? false + : queryOptions.tools?.includes('docs') ? true + : defaultOptions.includeDocsTools; + return { client: queryOptions.client ?? defaultOptions.client, includeDynamicTools: dynamicTools, includeAllTools: allTools, includeCodeTools: undefined, + includeDocsTools: docsTools, filters, capabilities: clientCapabilities, }; diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 1263b340..8e579cb0 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -110,7 +110,7 @@ export function initMcpServer(params: { export async function selectTools(endpoints: Endpoint[], options?: McpOptions): Promise { const filteredEndpoints = query(options?.filters ?? [], endpoints); - let includedTools = filteredEndpoints; + let includedTools = filteredEndpoints.slice(); if (includedTools.length > 0) { if (options?.includeDynamicTools) { @@ -118,16 +118,18 @@ export async function selectTools(endpoints: Endpoint[], options?: McpOptions): } } else { if (options?.includeAllTools) { - includedTools = endpoints; + includedTools = endpoints.slice(); } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [await codeTool(), docsSearchTool]; + includedTools = [await codeTool()]; } else { - includedTools = endpoints; + includedTools = endpoints.slice(); } } - + if (options?.includeDocsTools ?? true) { + includedTools.push(docsSearchTool); + } const capabilities = { ...defaultClientCapabilities, ...options?.capabilities }; return applyCompatibilityTransformations(includedTools, capabilities); } From c1de3c258e8b7dcb15903b6811138a27a741255b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 23 Sep 2025 17:34:29 +0000 Subject: [PATCH 25/47] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 496cf9a0..f6fac549 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bb50c0ae41ff5036adf72344d33057941f6de67c5fae811eba2e758bfa4ffd31.yml -openapi_spec_hash: 1b21e4bfc46daeef1613e410e5aa8f28 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-4e3b71a8de554d0df7c2f1dd986d49bc16f3462f50df16986a810d3691a8f734.yml +openapi_spec_hash: fb3607635c664f6319b4a9cf2ea4a2b5 config_hash: 6d3585c0032e08d723d077d660fc8448 From 163982a884bcf10684b5b3e242b0d52d547fc62b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 25 Sep 2025 19:29:05 +0000 Subject: [PATCH 26/47] perf: faster formatting --- scripts/fast-format | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 scripts/fast-format diff --git a/scripts/fast-format b/scripts/fast-format new file mode 100755 index 00000000..03fb1a3a --- /dev/null +++ b/scripts/fast-format @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -euo pipefail + +echo "Script started with $# arguments" +echo "Arguments: $*" +echo "Script location: $(dirname "$0")" + +cd "$(dirname "$0")/.." +echo "Changed to directory: $(pwd)" + +if [ $# -eq 0 ]; then + echo "Usage: $0 [additional-formatter-args...]" + echo "The file should contain one file path per line" + exit 1 +fi + +FILE_LIST="$1" + +echo "Looking for file: $FILE_LIST" + +if [ ! -f "$FILE_LIST" ]; then + echo "Error: File '$FILE_LIST' not found" + exit 1 +fi + +echo "==> Running eslint --fix" +ESLINT_FILES="$(grep '\.ts$' "$FILE_LIST" || true)" +if ! [ -z "$ESLINT_FILES" ]; then + echo "$ESLINT_FILES" | ESLINT_USE_FLAT_CONFIG="false" xargs ./node_modules/.bin/eslint --cache --fix +fi + +echo "==> Running prettier --write" +# format things eslint didn't +PRETTIER_FILES="$(grep '\.\(js\|json\)$' "$FILE_LIST" || true)" +if ! [ -z "$PRETTIER_FILES" ]; then + echo "$PRETTIER_FILES" | xargs ./node_modules/.bin/prettier \ + --write --cache --cache-strategy metadata \ + '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' +fi From 5955e291311d6d8192a3e8c3eb87f4eac9bdbdbc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 25 Sep 2025 22:55:19 +0000 Subject: [PATCH 27/47] chore(internal): remove deprecated `compilerOptions.baseUrl` from tsconfig.json This allows sdks to be built using tsgo - see https://github.com/microsoft/typescript-go/issues/474 --- packages/mcp-server/tsconfig.build.json | 4 ++-- packages/mcp-server/tsconfig.json | 5 ++--- tsconfig.build.json | 4 ++-- tsconfig.json | 9 ++++----- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/packages/mcp-server/tsconfig.build.json b/packages/mcp-server/tsconfig.build.json index 13cb54cb..df6c2b0a 100644 --- a/packages/mcp-server/tsconfig.build.json +++ b/packages/mcp-server/tsconfig.build.json @@ -5,8 +5,8 @@ "compilerOptions": { "rootDir": "./dist/src", "paths": { - "@tryfinch/finch-api-mcp/*": ["dist/src/*"], - "@tryfinch/finch-api-mcp": ["dist/src/index.ts"] + "@tryfinch/finch-api-mcp/*": ["./dist/src/*"], + "@tryfinch/finch-api-mcp": ["./dist/src/index.ts"] }, "noEmit": false, "declaration": true, diff --git a/packages/mcp-server/tsconfig.json b/packages/mcp-server/tsconfig.json index a2bbc9f3..cded90d2 100644 --- a/packages/mcp-server/tsconfig.json +++ b/packages/mcp-server/tsconfig.json @@ -7,10 +7,9 @@ "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, - "baseUrl": "./", "paths": { - "@tryfinch/finch-api-mcp/*": ["src/*"], - "@tryfinch/finch-api-mcp": ["src/index.ts"] + "@tryfinch/finch-api-mcp/*": ["./src/*"], + "@tryfinch/finch-api-mcp": ["./src/index.ts"] }, "noEmit": true, diff --git a/tsconfig.build.json b/tsconfig.build.json index 4549f6d2..b5b9724d 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -5,8 +5,8 @@ "compilerOptions": { "rootDir": "./dist/src", "paths": { - "@tryfinch/finch-api/*": ["dist/src/*"], - "@tryfinch/finch-api": ["dist/src/index.ts"], + "@tryfinch/finch-api/*": ["./dist/src/*"], + "@tryfinch/finch-api": ["./dist/src/index.ts"] }, "noEmit": false, "declaration": true, diff --git a/tsconfig.json b/tsconfig.json index 14709780..6f28db23 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,11 +7,10 @@ "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, - "baseUrl": "./", "paths": { - "@tryfinch/finch-api/_shims/auto/*": ["src/_shims/auto/*-node"], - "@tryfinch/finch-api/*": ["src/*"], - "@tryfinch/finch-api": ["src/index.ts"] + "@tryfinch/finch-api/_shims/auto/*": ["./src/_shims/auto/*-node"], + "@tryfinch/finch-api/*": ["./src/*"], + "@tryfinch/finch-api": ["./src/index.ts"] }, "noEmit": true, @@ -32,7 +31,7 @@ "noUncheckedIndexedAccess": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, - "isolatedModules": false, + "isolatedModules": false, "skipLibCheck": true } From 40ecf6a887ea44d156672f155abf70ab2d146921 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 14:09:22 +0000 Subject: [PATCH 28/47] chore(internal): fix incremental formatting in some cases --- scripts/fast-format | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/fast-format b/scripts/fast-format index 03fb1a3a..8a8e9d59 100755 --- a/scripts/fast-format +++ b/scripts/fast-format @@ -35,6 +35,6 @@ echo "==> Running prettier --write" PRETTIER_FILES="$(grep '\.\(js\|json\)$' "$FILE_LIST" || true)" if ! [ -z "$PRETTIER_FILES" ]; then echo "$PRETTIER_FILES" | xargs ./node_modules/.bin/prettier \ - --write --cache --cache-strategy metadata \ + --write --cache --cache-strategy metadata --no-error-on-unmatched-pattern \ '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' fi From bb7f182ef3959a99a7728cdab685d972e4110756 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:19:54 +0000 Subject: [PATCH 29/47] chore(mcp): allow pointing `docs_search` tool at other URLs --- .eslintcache | 1 + packages/mcp-server/src/docs-search-tool.ts | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .eslintcache diff --git a/.eslintcache b/.eslintcache new file mode 100644 index 00000000..92a452a9 --- /dev/null +++ b/.eslintcache @@ -0,0 +1 @@ +[{"/home/tempuser-3kscop/run/codegen-output/finch/finch-node/packages/mcp-server/src/docs-search-tool.ts":"1"},{"size":1459,"mtime":1758899992092}] \ No newline at end of file diff --git a/packages/mcp-server/src/docs-search-tool.ts b/packages/mcp-server/src/docs-search-tool.ts index 42eeb44f..0ef8ccb9 100644 --- a/packages/mcp-server/src/docs-search-tool.ts +++ b/packages/mcp-server/src/docs-search-tool.ts @@ -35,10 +35,13 @@ export const tool: Tool = { }, }; +const docsSearchURL = + process.env['DOCS_SEARCH_URL'] || 'https://api.stainless.com/api/projects/finch/docs/search'; + export const handler = async (_: unknown, args: Record | undefined) => { const body = args as any; const query = new URLSearchParams(body).toString(); - const result = await fetch('https://api.stainless.com/api/projects/finch/docs/search?' + query); + const result = await fetch(`${docsSearchURL}?${query}`); return asTextContentResult(await result.json()); }; From 9545088c46a29bbe18de88f1d218783ca0303e7b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:29:36 +0000 Subject: [PATCH 30/47] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index f6fac549..8ccb9245 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-4e3b71a8de554d0df7c2f1dd986d49bc16f3462f50df16986a810d3691a8f734.yml -openapi_spec_hash: fb3607635c664f6319b4a9cf2ea4a2b5 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-1066fa342808844922c79f57fea5676ba822a7ff57f2143efa70bbadf5ed6428.yml +openapi_spec_hash: 794703adc5978c044203ee5b1a9eb4f0 config_hash: 6d3585c0032e08d723d077d660fc8448 From d0200501b52ae4ac9e7c8de91d2f883e27db34c5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 19:08:39 +0000 Subject: [PATCH 31/47] chore(internal): codegen related update --- .devcontainer/devcontainer.json | 4 +--- .eslintcache | 2 +- packages/mcp-server/manifest.json | 8 ++------ release-please-config.json | 5 +---- 4 files changed, 5 insertions(+), 14 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 763462fa..43fd5a73 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -9,9 +9,7 @@ "postCreateCommand": "yarn install", "customizations": { "vscode": { - "extensions": [ - "esbenp.prettier-vscode" - ] + "extensions": ["esbenp.prettier-vscode"] } } } diff --git a/.eslintcache b/.eslintcache index 92a452a9..2222fc60 100644 --- a/.eslintcache +++ b/.eslintcache @@ -1 +1 @@ -[{"/home/tempuser-3kscop/run/codegen-output/finch/finch-node/packages/mcp-server/src/docs-search-tool.ts":"1"},{"size":1459,"mtime":1758899992092}] \ No newline at end of file +[{"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/jest.config.ts":"1","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/jest.config.ts":"2","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-types.ts":"3","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-worker.ts":"4","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool.ts":"5","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/compat.ts":"6","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/docs-search-tool.ts":"7","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/filtering.ts":"8","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/dynamic-tools.ts":"9","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/http.ts":"10","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/headers.ts":"11","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts":"12","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/index.ts":"13","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/server.ts":"14","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/stdio.ts":"15","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/account/disconnect-account.ts":"16","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts":"17","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts":"18","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/account/introspect-account.ts":"19","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts":"20","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts":"21","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts":"22","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts":"23","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts":"24","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts":"25","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts":"26","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts":"27","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts":"28","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts":"29","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts":"30","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts":"31","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts":"32","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts":"33","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts":"34","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts":"35","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts":"36","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts":"37","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts":"38","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts":"39","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts":"40","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts":"41","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts":"42","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/index.ts":"43","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts":"44","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts":"45","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts":"46","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts":"47","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts":"48","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts":"49","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/providers/list-providers.ts":"50","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts":"51","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts":"52","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts":"53","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts":"54","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts":"55","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts":"56","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/employment/update-sandbox-employment.ts":"57","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts":"58","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts":"59","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/configuration/update-jobs-sandbox-configuration.ts":"60","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts":"61","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts":"62","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/types.ts":"63","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools.ts":"64","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/dynamic-tools.test.ts":"65","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/compat.test.ts":"66","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/options.test.ts":"67","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/tools.test.ts":"68","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/scripts/publish-packages.ts":"69","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/MultipartBody.ts":"70","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-bun.ts":"71","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-deno.ts":"72","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-node.ts":"73","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime.ts":"74","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-deno.ts":"75","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-node.ts":"76","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types.d.ts":"77","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/bun-runtime.ts":"78","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index-deno.ts":"79","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index.d.ts":"80","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/manual-types.d.ts":"81","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-runtime.ts":"82","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-types.d.ts":"83","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/registry.ts":"84","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-runtime.ts":"85","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-types.d.ts":"86","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/error.ts":"87","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/index.ts":"88","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/core.ts":"89","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/formats.ts":"90","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/index.ts":"91","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/stringify.ts":"92","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/types.ts":"93","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/utils.ts":"94","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/pagination.ts":"95","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resource.ts":"96","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/access-tokens.ts":"97","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/account.ts":"98","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/connect.ts":"99","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/index.ts":"100","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/sessions.ts":"101","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect.ts":"102","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/benefits.ts":"103","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/index.ts":"104","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/individuals.ts":"105","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits.ts":"106","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/company.ts":"107","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/index.ts":"108","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/index.ts":"109","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/pay-statement-item.ts":"110","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/rules.ts":"111","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item.ts":"112","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company.ts":"113","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/directory.ts":"114","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/documents.ts":"115","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/employments.ts":"116","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/hris.ts":"117","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/index.ts":"118","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/individuals.ts":"119","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/pay-statements.ts":"120","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/payments.ts":"121","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris.ts":"122","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/index.ts":"123","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/automated.ts":"124","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/index.ts":"125","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/manual.ts":"126","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/jobs.ts":"127","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs.ts":"128","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/index.ts":"129","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/pay-groups.ts":"130","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/payroll.ts":"131","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll.ts":"132","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/providers.ts":"133","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/request-forwarding.ts":"134","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/company.ts":"135","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/accounts.ts":"136","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/connections.ts":"137","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/index.ts":"138","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections.ts":"139","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/directory.ts":"140","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/employment.ts":"141","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/index.ts":"142","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/individual.ts":"143","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/configuration.ts":"144","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/index.ts":"145","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/jobs.ts":"146","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs.ts":"147","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/payment.ts":"148","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/sandbox.ts":"149","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox.ts":"150","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/shared.ts":"151","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources.ts":"152","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/webhooks.ts":"153","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/node.ts":"154","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/web.ts":"155","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/uploads.ts":"156","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/version.ts":"157","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/access-tokens.test.ts":"158","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/account.test.ts":"159","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/connect/sessions.test.ts":"160","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/benefits/benefits.test.ts":"161","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/benefits/individuals.test.ts":"162","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/company.test.ts":"163","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts":"164","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/pay-statement-item/rules.test.ts":"165","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/directory.test.ts":"166","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/documents.test.ts":"167","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/employments.test.ts":"168","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/individuals.test.ts":"169","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/pay-statements.test.ts":"170","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/payments.test.ts":"171","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/jobs/automated.test.ts":"172","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/jobs/manual.test.ts":"173","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/payroll/pay-groups.test.ts":"174","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/providers.test.ts":"175","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/request-forwarding.test.ts":"176","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/company.test.ts":"177","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/connections/accounts.test.ts":"178","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/connections/connections.test.ts":"179","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/directory.test.ts":"180","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/employment.test.ts":"181","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/individual.test.ts":"182","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/jobs/configuration.test.ts":"183","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/jobs/jobs.test.ts":"184","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/payment.test.ts":"185","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/form.test.ts":"186","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/index.test.ts":"187","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/empty-keys-cases.ts":"188","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/stringify.test.ts":"189","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/utils.test.ts":"190","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/responses.test.ts":"191","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/stringifyQuery.test.ts":"192","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/uploads.test.ts":"193"},{"size":674,"mtime":1758913698745,"results":"194","hashOfConfig":"195"},{"size":513,"mtime":1758913712297},{"size":373,"mtime":1758913712297},{"size":1179,"mtime":1758913699005,"results":"196","hashOfConfig":"195"},{"size":5907,"mtime":1758913712297},{"size":12713,"mtime":1758913698925,"results":"197","hashOfConfig":"195"},{"size":1459,"mtime":1758913712297},{"size":368,"mtime":1758913698925,"results":"198","hashOfConfig":"195"},{"size":5554,"mtime":1758913712297},{"size":3400,"mtime":1758913712297},{"size":1157,"mtime":1758913712297},{"size":17071,"mtime":1758913699005,"results":"199","hashOfConfig":"195"},{"size":2884,"mtime":1758913698925,"results":"200","hashOfConfig":"195"},{"size":5447,"mtime":1758913712297},{"size":465,"mtime":1758913712297},{"size":2040,"mtime":1758913712297},{"size":4568,"mtime":1758913712297},{"size":3373,"mtime":1758913712297},{"size":8286,"mtime":1758913712297},{"size":3107,"mtime":1758913712297},{"size":4792,"mtime":1758913712297},{"size":4142,"mtime":1758913712297},{"size":2296,"mtime":1758913712297},{"size":5030,"mtime":1758913712297},{"size":2350,"mtime":1758913712297},{"size":4289,"mtime":1758913712297},{"size":4203,"mtime":1758913712297},{"size":4274,"mtime":1758913712297},{"size":2333,"mtime":1758913712297},{"size":4855,"mtime":1758913712297},{"size":5765,"mtime":1758913712297},{"size":4274,"mtime":1758913712297},{"size":4665,"mtime":1758913712297},{"size":4217,"mtime":1758913712297},{"size":7311,"mtime":1758913712301},{"size":4439,"mtime":1758913712301},{"size":4121,"mtime":1758913712301},{"size":6427,"mtime":1758913712301},{"size":1576,"mtime":1758913712301},{"size":8409,"mtime":1758913712301},{"size":1750,"mtime":1758913712301},{"size":5070,"mtime":1758913712301},{"size":8380,"mtime":1758913712301},{"size":4038,"mtime":1758913712301},{"size":5679,"mtime":1758913712301},{"size":4492,"mtime":1758913712301},{"size":2910,"mtime":1758913712301},{"size":2781,"mtime":1758913712301},{"size":2805,"mtime":1758913712301},{"size":952,"mtime":1758913712301},{"size":5432,"mtime":1758913712301},{"size":10272,"mtime":1758913712301},{"size":3535,"mtime":1758913712301},{"size":3206,"mtime":1758913712301},{"size":3647,"mtime":1758913712301},{"size":11131,"mtime":1758913712301},{"size":6814,"mtime":1758913712301},{"size":9072,"mtime":1758913712301},{"size":2415,"mtime":1758913712301},{"size":2679,"mtime":1758913712301},{"size":2563,"mtime":1758913712301},{"size":6831,"mtime":1758913712301},{"size":2189,"mtime":1758913712301},{"size":31,"mtime":1758913698929,"results":"201","hashOfConfig":"195"},{"size":6851,"mtime":1758913698929,"results":"202","hashOfConfig":"195"},{"size":29411,"mtime":1758913698929,"results":"203","hashOfConfig":"195"},{"size":16226,"mtime":1758913698929,"results":"204","hashOfConfig":"195"},{"size":6594,"mtime":1758913698929,"results":"205","hashOfConfig":"195"},{"size":3689,"mtime":1758913698749,"results":"206","hashOfConfig":"195"},{"size":223,"mtime":1758913698753,"results":"207","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"208","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"209","hashOfConfig":"195"},{"size":119,"mtime":1758913698773,"results":"210","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"211","hashOfConfig":"195"},{"size":116,"mtime":1758913698773,"results":"212","hashOfConfig":"195"},{"size":117,"mtime":1758913698773,"results":"213","hashOfConfig":"195"},{"size":3001,"mtime":1758913698773,"results":"214","hashOfConfig":"195"},{"size":468,"mtime":1758913698773,"results":"215","hashOfConfig":"195"},{"size":2746,"mtime":1758913698773,"results":"216","hashOfConfig":"195"},{"size":3169,"mtime":1758913698777,"results":"217","hashOfConfig":"195"},{"size":359,"mtime":1758913698777,"results":"218","hashOfConfig":"195"},{"size":3133,"mtime":1758913698777,"results":"219","hashOfConfig":"195"},{"size":1238,"mtime":1758913698777,"results":"220","hashOfConfig":"195"},{"size":2490,"mtime":1758913698777,"results":"221","hashOfConfig":"195"},{"size":3086,"mtime":1758913698777,"results":"222","hashOfConfig":"195"},{"size":2073,"mtime":1758913698781,"results":"223","hashOfConfig":"195"},{"size":3970,"mtime":1758913712301},{"size":13176,"mtime":1758913712301},{"size":39741,"mtime":1758913712301},{"size":339,"mtime":1758913698797,"results":"224","hashOfConfig":"195"},{"size":325,"mtime":1758913698797,"results":"225","hashOfConfig":"195"},{"size":11751,"mtime":1758913698797,"results":"226","hashOfConfig":"195"},{"size":2183,"mtime":1758913698801,"results":"227","hashOfConfig":"195"},{"size":6607,"mtime":1758913698801,"results":"228","hashOfConfig":"195"},{"size":5035,"mtime":1758913712301},{"size":256,"mtime":1758913698997,"results":"229","hashOfConfig":"195"},{"size":2519,"mtime":1758913712301},{"size":4602,"mtime":1758913712301},{"size":908,"mtime":1758913712301},{"size":284,"mtime":1758913712301},{"size":3088,"mtime":1758913712301},{"size":121,"mtime":1758913699985,"results":"230","hashOfConfig":"195"},{"size":10773,"mtime":1758913712301},{"size":857,"mtime":1758913712301},{"size":8010,"mtime":1758913712301},{"size":122,"mtime":1758913699549,"results":"231","hashOfConfig":"195"},{"size":3909,"mtime":1758913712301},{"size":315,"mtime":1758913712301},{"size":450,"mtime":1758913712301},{"size":4682,"mtime":1758913712301},{"size":11551,"mtime":1758913712301},{"size":132,"mtime":1758913699217,"results":"232","hashOfConfig":"195"},{"size":121,"mtime":1758913699165,"results":"233","hashOfConfig":"195"},{"size":2794,"mtime":1758913712301},{"size":6154,"mtime":1758913712301},{"size":6069,"mtime":1758913712301},{"size":7418,"mtime":1758913712301},{"size":1614,"mtime":1758913712301},{"size":4396,"mtime":1758913712301},{"size":8126,"mtime":1758913712301},{"size":2612,"mtime":1758913712301},{"size":118,"mtime":1758913699133,"results":"234","hashOfConfig":"195"},{"size":1033,"mtime":1758913712305},{"size":7317,"mtime":1758913712305},{"size":412,"mtime":1758913712305},{"size":1681,"mtime":1758913712305},{"size":1383,"mtime":1758913712305},{"size":118,"mtime":1758913699789,"results":"235","hashOfConfig":"195"},{"size":285,"mtime":1758913712305},{"size":2687,"mtime":1758913712305},{"size":1002,"mtime":1758913712305},{"size":121,"mtime":1758913699969,"results":"236","hashOfConfig":"195"},{"size":9611,"mtime":1758913712305},{"size":4346,"mtime":1758913712305},{"size":6062,"mtime":1758913712305},{"size":3651,"mtime":1758913712305},{"size":2675,"mtime":1758913712305},{"size":342,"mtime":1758913712305},{"size":125,"mtime":1758913699857,"results":"237","hashOfConfig":"195"},{"size":6191,"mtime":1758913712305},{"size":7765,"mtime":1758913712305},{"size":814,"mtime":1758913712305},{"size":5031,"mtime":1758913712305},{"size":1848,"mtime":1758913712305},{"size":314,"mtime":1758913712305},{"size":2008,"mtime":1758913712305},{"size":118,"mtime":1758913699949,"results":"238","hashOfConfig":"195"},{"size":3319,"mtime":1758913712305},{"size":3118,"mtime":1758913712305},{"size":121,"mtime":1758913699849,"results":"239","hashOfConfig":"195"},{"size":3033,"mtime":1758913712305},{"size":35,"mtime":1758913698801,"results":"240","hashOfConfig":"195"},{"size":12550,"mtime":1758913712305},{"size":1564,"mtime":1758913698801,"results":"241","hashOfConfig":"195"},{"size":1588,"mtime":1758913698801,"results":"242","hashOfConfig":"195"},{"size":9029,"mtime":1758913712305},{"size":60,"mtime":1758913712305},{"size":1123,"mtime":1758913712305},{"size":2012,"mtime":1758913712305},{"size":2222,"mtime":1758913712305},{"size":5480,"mtime":1758913712305},{"size":5559,"mtime":1758913712305},{"size":1185,"mtime":1758913712305},{"size":1690,"mtime":1758913712305},{"size":4870,"mtime":1758913712305},{"size":2794,"mtime":1758913712305},{"size":2453,"mtime":1758913712305},{"size":1109,"mtime":1758913712305},{"size":1659,"mtime":1758913712305},{"size":1177,"mtime":1758913712305},{"size":1072,"mtime":1758913712305},{"size":3534,"mtime":1758913712305},{"size":1612,"mtime":1758913712305},{"size":2485,"mtime":1758913712305},{"size":1165,"mtime":1758913712305},{"size":1197,"mtime":1758913712305},{"size":1850,"mtime":1758913712305},{"size":2541,"mtime":1758913712305},{"size":1192,"mtime":1758913712305},{"size":2749,"mtime":1758913712305},{"size":2418,"mtime":1758913712305},{"size":2055,"mtime":1758913712305},{"size":1978,"mtime":1758913712305},{"size":1020,"mtime":1758913712305},{"size":2043,"mtime":1758913712305},{"size":1698,"mtime":1758913698801,"results":"243","hashOfConfig":"195"},{"size":14827,"mtime":1758913712305},{"size":5918,"mtime":1758913698801,"results":"244","hashOfConfig":"195"},{"size":81651,"mtime":1758913698809,"results":"245","hashOfConfig":"195"},{"size":6180,"mtime":1758913698809,"results":"246","hashOfConfig":"195"},{"size":974,"mtime":1758913698809,"results":"247","hashOfConfig":"195"},{"size":727,"mtime":1758913712305},{"size":2144,"mtime":1758913698809,"results":"248","hashOfConfig":"195"},{"filePath":"249","messages":"250","suppressedMessages":"251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"qspnjg",{"filePath":"252","messages":"253","suppressedMessages":"254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"255","messages":"256","suppressedMessages":"257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"258","messages":"259","suppressedMessages":"260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"261","messages":"262","suppressedMessages":"263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"264","messages":"265","suppressedMessages":"266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"267","messages":"268","suppressedMessages":"269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"270","messages":"271","suppressedMessages":"272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"273","messages":"274","suppressedMessages":"275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"276","messages":"277","suppressedMessages":"278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"279","messages":"280","suppressedMessages":"281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"282","messages":"283","suppressedMessages":"284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"285","messages":"286","suppressedMessages":"287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"288","messages":"289","suppressedMessages":"290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"291","messages":"292","suppressedMessages":"293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"294","messages":"295","suppressedMessages":"296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"297","messages":"298","suppressedMessages":"299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"300","messages":"301","suppressedMessages":"302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"303","messages":"304","suppressedMessages":"305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"306","messages":"307","suppressedMessages":"308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"309","messages":"310","suppressedMessages":"311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"312","messages":"313","suppressedMessages":"314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"315","messages":"316","suppressedMessages":"317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"318","messages":"319","suppressedMessages":"320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"321","messages":"322","suppressedMessages":"323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"324","messages":"325","suppressedMessages":"326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"327","messages":"328","suppressedMessages":"329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"330","messages":"331","suppressedMessages":"332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"333","messages":"334","suppressedMessages":"335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"336","messages":"337","suppressedMessages":"338","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"339","messages":"340","suppressedMessages":"341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"342","messages":"343","suppressedMessages":"344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"345","messages":"346","suppressedMessages":"347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"348","messages":"349","suppressedMessages":"350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"351","messages":"352","suppressedMessages":"353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"354","messages":"355","suppressedMessages":"356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"357","messages":"358","suppressedMessages":"359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"360","messages":"361","suppressedMessages":"362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"363","messages":"364","suppressedMessages":"365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"366","messages":"367","suppressedMessages":"368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"369","messages":"370","suppressedMessages":"371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"372","messages":"373","suppressedMessages":"374","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"375","messages":"376","suppressedMessages":"377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"378","messages":"379","suppressedMessages":"380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"381","messages":"382","suppressedMessages":"383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"384","messages":"385","suppressedMessages":"386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"387","messages":"388","suppressedMessages":"389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"390","messages":"391","suppressedMessages":"392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"393","messages":"394","suppressedMessages":"395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"396","messages":"397","suppressedMessages":"398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"399","messages":"400","suppressedMessages":"401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"402","messages":"403","suppressedMessages":"404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"405","messages":"406","suppressedMessages":"407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"408","messages":"409","suppressedMessages":"410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/jest.config.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-worker.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/compat.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/filtering.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/index.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/dynamic-tools.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/compat.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/options.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/tools.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/scripts/publish-packages.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/MultipartBody.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-bun.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/bun-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/manual-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/registry.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/formats.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/index.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/stringify.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/types.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/utils.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resource.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/web.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/form.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/empty-keys-cases.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/stringify.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/utils.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/responses.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/uploads.test.ts",[],[]] \ No newline at end of file diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json index 04fd27e3..2901767d 100644 --- a/packages/mcp-server/manifest.json +++ b/packages/mcp-server/manifest.json @@ -18,9 +18,7 @@ "entry_point": "index.js", "mcp_config": { "command": "node", - "args": [ - "${__dirname}/index.js" - ], + "args": ["${__dirname}/index.js"], "env": { "FINCH_ACCESS_TOKEN": "${user_config.FINCH_ACCESS_TOKEN}", "FINCH_CLIENT_ID": "${user_config.FINCH_CLIENT_ID}", @@ -62,7 +60,5 @@ "node": ">=18.0.0" } }, - "keywords": [ - "api" - ] + "keywords": ["api"] } diff --git a/release-please-config.json b/release-please-config.json index 63eb38a8..8204c04c 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -59,10 +59,7 @@ "hidden": true } ], - "reviewers": [ - "jordanbrauer", - "minupalaniappan" - ], + "reviewers": ["jordanbrauer", "minupalaniappan"], "release-type": "node", "extra-files": [ "src/version.ts", From 843b525f6a3f07edda04ca213a35dd3d2d37fdb3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 20:47:24 +0000 Subject: [PATCH 32/47] feat(api): api update --- .eslintcache | 2 +- .stats.yml | 4 +- api.md | 3 +- .../src/tools/providers/list-providers.ts | 16 +- .../forward-request-forwarding.ts | 2 +- src/index.ts | 16 +- src/resources/index.ts | 7 +- src/resources/providers.ts | 484 ++++-------------- src/resources/request-forwarding.ts | 66 +-- .../api-resources/request-forwarding.test.ts | 12 +- 10 files changed, 161 insertions(+), 451 deletions(-) diff --git a/.eslintcache b/.eslintcache index 2222fc60..9ecd9531 100644 --- a/.eslintcache +++ b/.eslintcache @@ -1 +1 @@ -[{"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/jest.config.ts":"1","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/jest.config.ts":"2","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-types.ts":"3","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-worker.ts":"4","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool.ts":"5","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/compat.ts":"6","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/docs-search-tool.ts":"7","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/filtering.ts":"8","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/dynamic-tools.ts":"9","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/http.ts":"10","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/headers.ts":"11","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts":"12","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/index.ts":"13","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/server.ts":"14","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/stdio.ts":"15","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/account/disconnect-account.ts":"16","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts":"17","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts":"18","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/account/introspect-account.ts":"19","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts":"20","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts":"21","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts":"22","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts":"23","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts":"24","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts":"25","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts":"26","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts":"27","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts":"28","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts":"29","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts":"30","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts":"31","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts":"32","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts":"33","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts":"34","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts":"35","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts":"36","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts":"37","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts":"38","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts":"39","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts":"40","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts":"41","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts":"42","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/index.ts":"43","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts":"44","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts":"45","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts":"46","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts":"47","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts":"48","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts":"49","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/providers/list-providers.ts":"50","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts":"51","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts":"52","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts":"53","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts":"54","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts":"55","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts":"56","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/employment/update-sandbox-employment.ts":"57","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts":"58","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts":"59","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/configuration/update-jobs-sandbox-configuration.ts":"60","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts":"61","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts":"62","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/types.ts":"63","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools.ts":"64","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/dynamic-tools.test.ts":"65","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/compat.test.ts":"66","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/options.test.ts":"67","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/tools.test.ts":"68","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/scripts/publish-packages.ts":"69","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/MultipartBody.ts":"70","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-bun.ts":"71","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-deno.ts":"72","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-node.ts":"73","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime.ts":"74","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-deno.ts":"75","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-node.ts":"76","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types.d.ts":"77","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/bun-runtime.ts":"78","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index-deno.ts":"79","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index.d.ts":"80","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/manual-types.d.ts":"81","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-runtime.ts":"82","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-types.d.ts":"83","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/registry.ts":"84","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-runtime.ts":"85","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-types.d.ts":"86","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/error.ts":"87","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/index.ts":"88","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/core.ts":"89","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/formats.ts":"90","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/index.ts":"91","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/stringify.ts":"92","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/types.ts":"93","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/utils.ts":"94","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/pagination.ts":"95","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resource.ts":"96","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/access-tokens.ts":"97","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/account.ts":"98","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/connect.ts":"99","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/index.ts":"100","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/sessions.ts":"101","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect.ts":"102","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/benefits.ts":"103","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/index.ts":"104","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/individuals.ts":"105","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits.ts":"106","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/company.ts":"107","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/index.ts":"108","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/index.ts":"109","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/pay-statement-item.ts":"110","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/rules.ts":"111","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item.ts":"112","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company.ts":"113","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/directory.ts":"114","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/documents.ts":"115","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/employments.ts":"116","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/hris.ts":"117","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/index.ts":"118","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/individuals.ts":"119","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/pay-statements.ts":"120","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/payments.ts":"121","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris.ts":"122","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/index.ts":"123","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/automated.ts":"124","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/index.ts":"125","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/manual.ts":"126","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/jobs.ts":"127","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs.ts":"128","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/index.ts":"129","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/pay-groups.ts":"130","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/payroll.ts":"131","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll.ts":"132","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/providers.ts":"133","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/request-forwarding.ts":"134","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/company.ts":"135","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/accounts.ts":"136","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/connections.ts":"137","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/index.ts":"138","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections.ts":"139","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/directory.ts":"140","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/employment.ts":"141","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/index.ts":"142","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/individual.ts":"143","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/configuration.ts":"144","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/index.ts":"145","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/jobs.ts":"146","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs.ts":"147","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/payment.ts":"148","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/sandbox.ts":"149","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox.ts":"150","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/shared.ts":"151","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources.ts":"152","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/webhooks.ts":"153","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/node.ts":"154","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/web.ts":"155","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/uploads.ts":"156","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/version.ts":"157","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/access-tokens.test.ts":"158","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/account.test.ts":"159","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/connect/sessions.test.ts":"160","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/benefits/benefits.test.ts":"161","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/benefits/individuals.test.ts":"162","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/company.test.ts":"163","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts":"164","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/pay-statement-item/rules.test.ts":"165","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/directory.test.ts":"166","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/documents.test.ts":"167","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/employments.test.ts":"168","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/individuals.test.ts":"169","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/pay-statements.test.ts":"170","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/payments.test.ts":"171","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/jobs/automated.test.ts":"172","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/jobs/manual.test.ts":"173","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/payroll/pay-groups.test.ts":"174","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/providers.test.ts":"175","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/request-forwarding.test.ts":"176","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/company.test.ts":"177","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/connections/accounts.test.ts":"178","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/connections/connections.test.ts":"179","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/directory.test.ts":"180","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/employment.test.ts":"181","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/individual.test.ts":"182","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/jobs/configuration.test.ts":"183","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/jobs/jobs.test.ts":"184","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/payment.test.ts":"185","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/form.test.ts":"186","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/index.test.ts":"187","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/empty-keys-cases.ts":"188","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/stringify.test.ts":"189","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/utils.test.ts":"190","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/responses.test.ts":"191","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/stringifyQuery.test.ts":"192","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/uploads.test.ts":"193"},{"size":674,"mtime":1758913698745,"results":"194","hashOfConfig":"195"},{"size":513,"mtime":1758913712297},{"size":373,"mtime":1758913712297},{"size":1179,"mtime":1758913699005,"results":"196","hashOfConfig":"195"},{"size":5907,"mtime":1758913712297},{"size":12713,"mtime":1758913698925,"results":"197","hashOfConfig":"195"},{"size":1459,"mtime":1758913712297},{"size":368,"mtime":1758913698925,"results":"198","hashOfConfig":"195"},{"size":5554,"mtime":1758913712297},{"size":3400,"mtime":1758913712297},{"size":1157,"mtime":1758913712297},{"size":17071,"mtime":1758913699005,"results":"199","hashOfConfig":"195"},{"size":2884,"mtime":1758913698925,"results":"200","hashOfConfig":"195"},{"size":5447,"mtime":1758913712297},{"size":465,"mtime":1758913712297},{"size":2040,"mtime":1758913712297},{"size":4568,"mtime":1758913712297},{"size":3373,"mtime":1758913712297},{"size":8286,"mtime":1758913712297},{"size":3107,"mtime":1758913712297},{"size":4792,"mtime":1758913712297},{"size":4142,"mtime":1758913712297},{"size":2296,"mtime":1758913712297},{"size":5030,"mtime":1758913712297},{"size":2350,"mtime":1758913712297},{"size":4289,"mtime":1758913712297},{"size":4203,"mtime":1758913712297},{"size":4274,"mtime":1758913712297},{"size":2333,"mtime":1758913712297},{"size":4855,"mtime":1758913712297},{"size":5765,"mtime":1758913712297},{"size":4274,"mtime":1758913712297},{"size":4665,"mtime":1758913712297},{"size":4217,"mtime":1758913712297},{"size":7311,"mtime":1758913712301},{"size":4439,"mtime":1758913712301},{"size":4121,"mtime":1758913712301},{"size":6427,"mtime":1758913712301},{"size":1576,"mtime":1758913712301},{"size":8409,"mtime":1758913712301},{"size":1750,"mtime":1758913712301},{"size":5070,"mtime":1758913712301},{"size":8380,"mtime":1758913712301},{"size":4038,"mtime":1758913712301},{"size":5679,"mtime":1758913712301},{"size":4492,"mtime":1758913712301},{"size":2910,"mtime":1758913712301},{"size":2781,"mtime":1758913712301},{"size":2805,"mtime":1758913712301},{"size":952,"mtime":1758913712301},{"size":5432,"mtime":1758913712301},{"size":10272,"mtime":1758913712301},{"size":3535,"mtime":1758913712301},{"size":3206,"mtime":1758913712301},{"size":3647,"mtime":1758913712301},{"size":11131,"mtime":1758913712301},{"size":6814,"mtime":1758913712301},{"size":9072,"mtime":1758913712301},{"size":2415,"mtime":1758913712301},{"size":2679,"mtime":1758913712301},{"size":2563,"mtime":1758913712301},{"size":6831,"mtime":1758913712301},{"size":2189,"mtime":1758913712301},{"size":31,"mtime":1758913698929,"results":"201","hashOfConfig":"195"},{"size":6851,"mtime":1758913698929,"results":"202","hashOfConfig":"195"},{"size":29411,"mtime":1758913698929,"results":"203","hashOfConfig":"195"},{"size":16226,"mtime":1758913698929,"results":"204","hashOfConfig":"195"},{"size":6594,"mtime":1758913698929,"results":"205","hashOfConfig":"195"},{"size":3689,"mtime":1758913698749,"results":"206","hashOfConfig":"195"},{"size":223,"mtime":1758913698753,"results":"207","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"208","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"209","hashOfConfig":"195"},{"size":119,"mtime":1758913698773,"results":"210","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"211","hashOfConfig":"195"},{"size":116,"mtime":1758913698773,"results":"212","hashOfConfig":"195"},{"size":117,"mtime":1758913698773,"results":"213","hashOfConfig":"195"},{"size":3001,"mtime":1758913698773,"results":"214","hashOfConfig":"195"},{"size":468,"mtime":1758913698773,"results":"215","hashOfConfig":"195"},{"size":2746,"mtime":1758913698773,"results":"216","hashOfConfig":"195"},{"size":3169,"mtime":1758913698777,"results":"217","hashOfConfig":"195"},{"size":359,"mtime":1758913698777,"results":"218","hashOfConfig":"195"},{"size":3133,"mtime":1758913698777,"results":"219","hashOfConfig":"195"},{"size":1238,"mtime":1758913698777,"results":"220","hashOfConfig":"195"},{"size":2490,"mtime":1758913698777,"results":"221","hashOfConfig":"195"},{"size":3086,"mtime":1758913698777,"results":"222","hashOfConfig":"195"},{"size":2073,"mtime":1758913698781,"results":"223","hashOfConfig":"195"},{"size":3970,"mtime":1758913712301},{"size":13176,"mtime":1758913712301},{"size":39741,"mtime":1758913712301},{"size":339,"mtime":1758913698797,"results":"224","hashOfConfig":"195"},{"size":325,"mtime":1758913698797,"results":"225","hashOfConfig":"195"},{"size":11751,"mtime":1758913698797,"results":"226","hashOfConfig":"195"},{"size":2183,"mtime":1758913698801,"results":"227","hashOfConfig":"195"},{"size":6607,"mtime":1758913698801,"results":"228","hashOfConfig":"195"},{"size":5035,"mtime":1758913712301},{"size":256,"mtime":1758913698997,"results":"229","hashOfConfig":"195"},{"size":2519,"mtime":1758913712301},{"size":4602,"mtime":1758913712301},{"size":908,"mtime":1758913712301},{"size":284,"mtime":1758913712301},{"size":3088,"mtime":1758913712301},{"size":121,"mtime":1758913699985,"results":"230","hashOfConfig":"195"},{"size":10773,"mtime":1758913712301},{"size":857,"mtime":1758913712301},{"size":8010,"mtime":1758913712301},{"size":122,"mtime":1758913699549,"results":"231","hashOfConfig":"195"},{"size":3909,"mtime":1758913712301},{"size":315,"mtime":1758913712301},{"size":450,"mtime":1758913712301},{"size":4682,"mtime":1758913712301},{"size":11551,"mtime":1758913712301},{"size":132,"mtime":1758913699217,"results":"232","hashOfConfig":"195"},{"size":121,"mtime":1758913699165,"results":"233","hashOfConfig":"195"},{"size":2794,"mtime":1758913712301},{"size":6154,"mtime":1758913712301},{"size":6069,"mtime":1758913712301},{"size":7418,"mtime":1758913712301},{"size":1614,"mtime":1758913712301},{"size":4396,"mtime":1758913712301},{"size":8126,"mtime":1758913712301},{"size":2612,"mtime":1758913712301},{"size":118,"mtime":1758913699133,"results":"234","hashOfConfig":"195"},{"size":1033,"mtime":1758913712305},{"size":7317,"mtime":1758913712305},{"size":412,"mtime":1758913712305},{"size":1681,"mtime":1758913712305},{"size":1383,"mtime":1758913712305},{"size":118,"mtime":1758913699789,"results":"235","hashOfConfig":"195"},{"size":285,"mtime":1758913712305},{"size":2687,"mtime":1758913712305},{"size":1002,"mtime":1758913712305},{"size":121,"mtime":1758913699969,"results":"236","hashOfConfig":"195"},{"size":9611,"mtime":1758913712305},{"size":4346,"mtime":1758913712305},{"size":6062,"mtime":1758913712305},{"size":3651,"mtime":1758913712305},{"size":2675,"mtime":1758913712305},{"size":342,"mtime":1758913712305},{"size":125,"mtime":1758913699857,"results":"237","hashOfConfig":"195"},{"size":6191,"mtime":1758913712305},{"size":7765,"mtime":1758913712305},{"size":814,"mtime":1758913712305},{"size":5031,"mtime":1758913712305},{"size":1848,"mtime":1758913712305},{"size":314,"mtime":1758913712305},{"size":2008,"mtime":1758913712305},{"size":118,"mtime":1758913699949,"results":"238","hashOfConfig":"195"},{"size":3319,"mtime":1758913712305},{"size":3118,"mtime":1758913712305},{"size":121,"mtime":1758913699849,"results":"239","hashOfConfig":"195"},{"size":3033,"mtime":1758913712305},{"size":35,"mtime":1758913698801,"results":"240","hashOfConfig":"195"},{"size":12550,"mtime":1758913712305},{"size":1564,"mtime":1758913698801,"results":"241","hashOfConfig":"195"},{"size":1588,"mtime":1758913698801,"results":"242","hashOfConfig":"195"},{"size":9029,"mtime":1758913712305},{"size":60,"mtime":1758913712305},{"size":1123,"mtime":1758913712305},{"size":2012,"mtime":1758913712305},{"size":2222,"mtime":1758913712305},{"size":5480,"mtime":1758913712305},{"size":5559,"mtime":1758913712305},{"size":1185,"mtime":1758913712305},{"size":1690,"mtime":1758913712305},{"size":4870,"mtime":1758913712305},{"size":2794,"mtime":1758913712305},{"size":2453,"mtime":1758913712305},{"size":1109,"mtime":1758913712305},{"size":1659,"mtime":1758913712305},{"size":1177,"mtime":1758913712305},{"size":1072,"mtime":1758913712305},{"size":3534,"mtime":1758913712305},{"size":1612,"mtime":1758913712305},{"size":2485,"mtime":1758913712305},{"size":1165,"mtime":1758913712305},{"size":1197,"mtime":1758913712305},{"size":1850,"mtime":1758913712305},{"size":2541,"mtime":1758913712305},{"size":1192,"mtime":1758913712305},{"size":2749,"mtime":1758913712305},{"size":2418,"mtime":1758913712305},{"size":2055,"mtime":1758913712305},{"size":1978,"mtime":1758913712305},{"size":1020,"mtime":1758913712305},{"size":2043,"mtime":1758913712305},{"size":1698,"mtime":1758913698801,"results":"243","hashOfConfig":"195"},{"size":14827,"mtime":1758913712305},{"size":5918,"mtime":1758913698801,"results":"244","hashOfConfig":"195"},{"size":81651,"mtime":1758913698809,"results":"245","hashOfConfig":"195"},{"size":6180,"mtime":1758913698809,"results":"246","hashOfConfig":"195"},{"size":974,"mtime":1758913698809,"results":"247","hashOfConfig":"195"},{"size":727,"mtime":1758913712305},{"size":2144,"mtime":1758913698809,"results":"248","hashOfConfig":"195"},{"filePath":"249","messages":"250","suppressedMessages":"251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"qspnjg",{"filePath":"252","messages":"253","suppressedMessages":"254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"255","messages":"256","suppressedMessages":"257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"258","messages":"259","suppressedMessages":"260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"261","messages":"262","suppressedMessages":"263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"264","messages":"265","suppressedMessages":"266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"267","messages":"268","suppressedMessages":"269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"270","messages":"271","suppressedMessages":"272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"273","messages":"274","suppressedMessages":"275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"276","messages":"277","suppressedMessages":"278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"279","messages":"280","suppressedMessages":"281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"282","messages":"283","suppressedMessages":"284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"285","messages":"286","suppressedMessages":"287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"288","messages":"289","suppressedMessages":"290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"291","messages":"292","suppressedMessages":"293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"294","messages":"295","suppressedMessages":"296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"297","messages":"298","suppressedMessages":"299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"300","messages":"301","suppressedMessages":"302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"303","messages":"304","suppressedMessages":"305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"306","messages":"307","suppressedMessages":"308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"309","messages":"310","suppressedMessages":"311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"312","messages":"313","suppressedMessages":"314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"315","messages":"316","suppressedMessages":"317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"318","messages":"319","suppressedMessages":"320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"321","messages":"322","suppressedMessages":"323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"324","messages":"325","suppressedMessages":"326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"327","messages":"328","suppressedMessages":"329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"330","messages":"331","suppressedMessages":"332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"333","messages":"334","suppressedMessages":"335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"336","messages":"337","suppressedMessages":"338","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"339","messages":"340","suppressedMessages":"341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"342","messages":"343","suppressedMessages":"344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"345","messages":"346","suppressedMessages":"347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"348","messages":"349","suppressedMessages":"350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"351","messages":"352","suppressedMessages":"353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"354","messages":"355","suppressedMessages":"356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"357","messages":"358","suppressedMessages":"359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"360","messages":"361","suppressedMessages":"362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"363","messages":"364","suppressedMessages":"365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"366","messages":"367","suppressedMessages":"368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"369","messages":"370","suppressedMessages":"371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"372","messages":"373","suppressedMessages":"374","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"375","messages":"376","suppressedMessages":"377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"378","messages":"379","suppressedMessages":"380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"381","messages":"382","suppressedMessages":"383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"384","messages":"385","suppressedMessages":"386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"387","messages":"388","suppressedMessages":"389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"390","messages":"391","suppressedMessages":"392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"393","messages":"394","suppressedMessages":"395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"396","messages":"397","suppressedMessages":"398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"399","messages":"400","suppressedMessages":"401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"402","messages":"403","suppressedMessages":"404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"405","messages":"406","suppressedMessages":"407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"408","messages":"409","suppressedMessages":"410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/jest.config.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-worker.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/compat.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/filtering.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/index.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/dynamic-tools.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/compat.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/options.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/tools.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/scripts/publish-packages.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/MultipartBody.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-bun.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/bun-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/manual-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/registry.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/formats.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/index.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/stringify.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/types.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/utils.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resource.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/web.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/form.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/empty-keys-cases.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/stringify.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/utils.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/responses.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/uploads.test.ts",[],[]] \ No newline at end of file +[{"/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/providers/list-providers.ts":"1","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts":"2","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/index.ts":"3","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/index.ts":"4","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/providers.ts":"5","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/request-forwarding.ts":"6","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/tests/api-resources/request-forwarding.test.ts":"7"},{"size":4424,"mtime":1758919641943},{"size":5216,"mtime":1758919641943},{"size":13311,"mtime":1758919641943},{"size":1072,"mtime":1758919641943},{"size":4399,"mtime":1758919641943},{"size":3873,"mtime":1758919641943},{"size":1132,"mtime":1758919641943}] \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 8ccb9245..40205901 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-1066fa342808844922c79f57fea5676ba822a7ff57f2143efa70bbadf5ed6428.yml -openapi_spec_hash: 794703adc5978c044203ee5b1a9eb4f0 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-fd18483a409117a70113398a50c7ff8bde92455d830e8027f2c2e3cc7a9c67ac.yml +openapi_spec_hash: cb88f02495e1cfd2d73d2f9e3728205d config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/api.md b/api.md index 9558c4af..f945660a 100644 --- a/api.md +++ b/api.md @@ -183,10 +183,11 @@ Methods: Types: - Provider +- ProviderListResponse Methods: -- client.providers.list() -> ProvidersSinglePage +- client.providers.list() -> ProviderListResponsesSinglePage # Account diff --git a/packages/mcp-server/src/tools/providers/list-providers.ts b/packages/mcp-server/src/tools/providers/list-providers.ts index c1c5a8a6..9be1cb45 100644 --- a/packages/mcp-server/src/tools/providers/list-providers.ts +++ b/packages/mcp-server/src/tools/providers/list-providers.ts @@ -1,5 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { maybeFilter } from '@tryfinch/finch-api-mcp/filtering'; import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types'; import { Tool } from '@modelcontextprotocol/sdk/types.js'; @@ -16,10 +17,18 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_providers', - description: 'Return details on all available payroll and HR systems.', + description: + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nReturn details on all available payroll and HR systems.\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The id of the payroll provider used in Connect.'\n },\n display_name: {\n type: 'string',\n description: 'The display name of the payroll provider.'\n },\n products: {\n type: 'array',\n description: 'The list of Finch products supported on this payroll provider.',\n items: {\n type: 'string'\n }\n },\n authentication_methods: {\n type: 'array',\n description: 'The authentication methods supported by the provider.',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth',\n 'api'\n ]\n },\n benefits_support: {\n type: 'object',\n description: 'The supported benefit types and their configurations',\n additionalProperties: true\n },\n supported_fields: {\n type: 'object',\n description: 'The supported fields for each Finch product',\n additionalProperties: true\n }\n },\n required: [ 'type'\n ]\n }\n },\n beta: {\n type: 'boolean',\n description: '`true` if the integration is in a beta state, `false` otherwise'\n },\n icon: {\n type: 'string',\n description: 'The url to the official icon of the payroll provider.'\n },\n logo: {\n type: 'string',\n description: 'The url to the official logo of the payroll provider.'\n },\n manual: {\n type: 'boolean',\n description: '[DEPRECATED] Whether the Finch integration with this provider uses the Assisted Connect Flow by default. This field is now deprecated. Please check for a `type` of `assisted` in the `authentication_methods` field instead.'\n },\n mfa_required: {\n type: 'boolean',\n description: 'whether MFA is required for the provider.'\n },\n primary_color: {\n type: 'string',\n description: 'The hex code for the primary color of the payroll provider.'\n }\n },\n required: [ 'id',\n 'display_name',\n 'products'\n ]\n }\n}\n```", inputSchema: { type: 'object', - properties: {}, + properties: { + jq_filter: { + type: 'string', + title: 'jq Filter', + description: + 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', + }, + }, required: [], }, annotations: { @@ -28,8 +37,9 @@ export const tool: Tool = { }; export const handler = async (client: Finch, args: Record | undefined) => { + const { jq_filter } = args as any; const response = await client.providers.list().asResponse(); - return asTextContentResult(await response.json()); + return asTextContentResult(await maybeFilter(jq_filter, await response.json())); }; export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts b/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts index 56d2a390..a104c4d3 100644 --- a/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts +++ b/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'forward_request_forwarding', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nThe Forward API allows you to make direct requests to an employment system. If Finch's unified API\ndoesn't have a data model that cleanly fits your needs, then Forward allows you to push or pull\ndata models directly against an integration's API.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n data: {\n type: 'string',\n description: 'A string representation of the HTTP response body of the forwarded request\\'s response received from the underlying integration\\'s API. This field may be null in the case where the upstream system\\'s response is empty.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers of the forwarded request\\'s response, exactly as received from the underlying integration\\'s API.',\n additionalProperties: true\n },\n request: {\n type: 'object',\n description: 'An object containing details of your original forwarded request, for your ease of reference.',\n properties: {\n data: {\n type: 'string',\n description: 'The body that was specified for the forwarded request. If a value was not specified in the original request, this value will be returned as null ; otherwise, this value will always be returned as a string.'\n },\n headers: {\n type: 'object',\n description: 'The specified HTTP headers that were included in the forwarded request. If no headers were specified, this will be returned as `null`.',\n additionalProperties: true\n },\n method: {\n type: 'string',\n description: 'The HTTP method that was specified for the forwarded request. Valid values include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`.'\n },\n params: {\n type: 'object',\n description: 'The query parameters that were included in the forwarded request. If no query parameters were specified, this will be returned as `null`.',\n additionalProperties: true\n },\n route: {\n type: 'string',\n description: 'The URL route path that was specified for the forwarded request.'\n }\n },\n required: [ 'data',\n 'headers',\n 'method',\n 'params',\n 'route'\n ]\n },\n statusCode: {\n type: 'integer',\n description: 'The HTTP status code of the forwarded request\\'s response, exactly received from the underlying integration\\'s API. This value will be returned as an integer.'\n }\n },\n required: [ 'data',\n 'headers',\n 'request',\n 'statusCode'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nThe Forward API allows you to make direct requests to an employment system. If Finch's unified API\ndoesn't have a data model that cleanly fits your needs, then Forward allows you to push or pull\ndata models directly against an integration's API.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n request: {\n type: 'object',\n description: 'An object containing details of your original forwarded request, for your ease of reference.',\n properties: {\n method: {\n type: 'string',\n description: 'The HTTP method that was specified for the forwarded request. Valid values include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`.'\n },\n route: {\n type: 'string',\n description: 'The URL route path that was specified for the forwarded request.'\n },\n data: {\n anyOf: [ {\n type: 'string'\n },\n {\n type: 'object',\n additionalProperties: true\n }\n ],\n description: 'The body that was specified for the forwarded request.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers that were specified for the forwarded request.',\n additionalProperties: true\n },\n params: {\n type: 'object',\n description: 'The query parameters that were specified for the forwarded request.',\n additionalProperties: true\n }\n },\n required: [ 'method',\n 'route'\n ]\n },\n statusCode: {\n type: 'integer',\n description: 'The HTTP status code of the forwarded request\\'s response, exactly received from the underlying integration\\'s API. This value will be returned as an integer.'\n },\n data: {\n type: 'string',\n description: 'A string representation of the HTTP response body of the forwarded request\\'s response received from the underlying integration\\'s API. This field may be null in the case where the upstream system\\'s response is empty.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers of the forwarded request\\'s response, exactly as received from the underlying integration\\'s API.',\n additionalProperties: true\n }\n },\n required: [ 'request',\n 'statusCode'\n ]\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/src/index.ts b/src/index.ts index bc0bdd40..000fafb6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,7 +17,12 @@ import * as Uploads from './uploads'; import * as API from './resources/index'; import { AccessTokenCreateParams, AccessTokens, CreateAccessTokenResponse } from './resources/access-tokens'; import { Account, DisconnectResponse, Introspection } from './resources/account'; -import { Provider, Providers, ProvidersSinglePage } from './resources/providers'; +import { + Provider, + ProviderListResponse, + ProviderListResponsesSinglePage, + Providers, +} from './resources/providers'; import { RequestForwarding, RequestForwardingForwardParams, @@ -360,7 +365,7 @@ export class Finch extends Core.APIClient { Finch.AccessTokens = AccessTokens; Finch.HRIS = HRIS; Finch.Providers = Providers; -Finch.ProvidersSinglePage = ProvidersSinglePage; +Finch.ProviderListResponsesSinglePage = ProviderListResponsesSinglePage; Finch.Account = Account; Finch.Webhooks = Webhooks; Finch.RequestForwarding = RequestForwarding; @@ -395,7 +400,12 @@ export declare namespace Finch { export { HRIS as HRIS, type Income as Income, type Location as Location, type Money as Money }; - export { Providers as Providers, type Provider as Provider, ProvidersSinglePage as ProvidersSinglePage }; + export { + Providers as Providers, + type Provider as Provider, + type ProviderListResponse as ProviderListResponse, + ProviderListResponsesSinglePage as ProviderListResponsesSinglePage, + }; export { Account as Account, diff --git a/src/resources/index.ts b/src/resources/index.ts index 4e468947..85c4c42d 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -7,7 +7,12 @@ export { Connect } from './connect/connect'; export { HRIS, type Income, type Location, type Money } from './hris/hris'; export { Jobs } from './jobs/jobs'; export { Payroll } from './payroll/payroll'; -export { ProvidersSinglePage, Providers, type Provider } from './providers'; +export { + ProviderListResponsesSinglePage, + Providers, + type Provider, + type ProviderListResponse, +} from './providers'; export { RequestForwarding, type RequestForwardingForwardResponse, diff --git a/src/resources/providers.ts b/src/resources/providers.ts index 4a515708..175f23aa 100644 --- a/src/resources/providers.ts +++ b/src/resources/providers.ts @@ -2,40 +2,46 @@ import { APIResource } from '../resource'; import * as Core from '../core'; -import * as BenefitsAPI from './hris/benefits/benefits'; import { SinglePage } from '../pagination'; export class Providers extends APIResource { /** * Return details on all available payroll and HR systems. */ - list(options?: Core.RequestOptions): Core.PagePromise { - return this._client.getAPIList('/providers', ProvidersSinglePage, options); + list( + options?: Core.RequestOptions, + ): Core.PagePromise { + return this._client.getAPIList('/providers', ProviderListResponsesSinglePage, options); } } -export class ProvidersSinglePage extends SinglePage {} +export class ProviderListResponsesSinglePage extends SinglePage {} export interface Provider { /** * The id of the payroll provider used in Connect. */ - id?: string; + id: string; /** - * The list of authentication methods supported by the provider. + * The display name of the payroll provider. */ - authentication_methods?: Array; + display_name: string; /** - * `true` if the integration is in a beta state, `false` otherwise + * The list of Finch products supported on this payroll provider. */ - beta?: boolean; + products: Array; /** - * The display name of the payroll provider. + * The authentication methods supported by the provider. */ - display_name?: string; + authentication_methods?: Array; + + /** + * `true` if the integration is in a beta state, `false` otherwise + */ + beta?: boolean; /** * The url to the official icon of the payroll provider. @@ -48,9 +54,9 @@ export interface Provider { logo?: string; /** - * [DEPRECATED] Whether the Finch integration with this provider uses the Assisted - * Connect Flow by default. This field is now deprecated. Please check for a `type` - * of `assisted` in the `authentication_methods` field instead. + * @deprecated [DEPRECATED] Whether the Finch integration with this provider uses + * the Assisted Connect Flow by default. This field is now deprecated. Please check + * for a `type` of `assisted` in the `authentication_methods` field instead. */ manual?: boolean; @@ -63,414 +69,106 @@ export interface Provider { * The hex code for the primary color of the payroll provider. */ primary_color?: string; - - /** - * The list of Finch products supported on this payroll provider. - */ - products?: Array; } export namespace Provider { export interface AuthenticationMethod { /** - * Each benefit type and their supported features. If the benefit type is not - * supported, the property will be null + * The type of authentication method */ - benefits_support?: BenefitsAPI.BenefitsSupport | null; + type: 'assisted' | 'credential' | 'api_token' | 'api_credential' | 'oauth' | 'api'; /** - * The supported data fields returned by our HR and payroll endpoints + * The supported benefit types and their configurations */ - supported_fields?: AuthenticationMethod.SupportedFields | null; + benefits_support?: { [key: string]: unknown }; /** - * The type of authentication method. + * The supported fields for each Finch product */ - type?: 'assisted' | 'credential' | 'api_token' | 'api_credential' | 'oauth'; + supported_fields?: { [key: string]: unknown }; } +} - export namespace AuthenticationMethod { - /** - * The supported data fields returned by our HR and payroll endpoints - */ - export interface SupportedFields { - company?: SupportedFields.Company; - - directory?: SupportedFields.Directory; - - employment?: SupportedFields.Employment; - - individual?: SupportedFields.Individual; - - pay_group?: SupportedFields.PayGroup; - - pay_statement?: SupportedFields.PayStatement; - - payment?: SupportedFields.Payment; - } - - export namespace SupportedFields { - export interface Company { - id?: boolean; - - accounts?: Company.Accounts; - - departments?: Company.Departments; - - ein?: boolean; - - entity?: Company.Entity; - - legal_name?: boolean; - - locations?: Company.Locations; - - primary_email?: boolean; - - primary_phone_number?: boolean; - } - - export namespace Company { - export interface Accounts { - account_name?: boolean; - - account_number?: boolean; - - account_type?: boolean; - - institution_name?: boolean; - - routing_number?: boolean; - } - - export interface Departments { - name?: boolean; - - parent?: Departments.Parent; - } - - export namespace Departments { - export interface Parent { - name?: boolean; - } - } - - export interface Entity { - subtype?: boolean; - - type?: boolean; - } - - export interface Locations { - city?: boolean; - - country?: boolean; - - line1?: boolean; - - line2?: boolean; - - postal_code?: boolean; - - state?: boolean; - } - } - - export interface Directory { - individuals?: Directory.Individuals; - - paging?: Directory.Paging; - } - - export namespace Directory { - export interface Individuals { - id?: boolean; - - department?: boolean; - - first_name?: boolean; - - is_active?: boolean; - - last_name?: boolean; - - manager?: Individuals.Manager; - - middle_name?: boolean; - } - - export namespace Individuals { - export interface Manager { - id?: boolean; - } - } - - export interface Paging { - count?: boolean; - - offset?: boolean; - } - } - - export interface Employment { - id?: boolean; - - class_code?: boolean; - - custom_fields?: boolean; - - department?: Employment.Department; - - employment?: Employment.Employment; - - employment_status?: boolean; - - end_date?: boolean; - - first_name?: boolean; - - income?: Employment.Income; - - income_history?: boolean; - - is_active?: boolean; - - last_name?: boolean; - - location?: Employment.Location; - - manager?: Employment.Manager; - - middle_name?: boolean; - - start_date?: boolean; - - title?: boolean; - } - - export namespace Employment { - export interface Department { - name?: boolean; - } - - export interface Employment { - subtype?: boolean; - - type?: boolean; - } - - export interface Income { - amount?: boolean; - - currency?: boolean; - - unit?: boolean; - } - - export interface Location { - city?: boolean; - - country?: boolean; - - line1?: boolean; - - line2?: boolean; - - postal_code?: boolean; - - state?: boolean; - } - - export interface Manager { - id?: boolean; - } - } - - export interface Individual { - id?: boolean; - - dob?: boolean; - - emails?: Individual.Emails; - - encrypted_ssn?: boolean; - - ethnicity?: boolean; - - first_name?: boolean; - - gender?: boolean; - - last_name?: boolean; - - middle_name?: boolean; - - phone_numbers?: Individual.PhoneNumbers; - - preferred_name?: boolean; - - residence?: Individual.Residence; - - ssn?: boolean; - } - - export namespace Individual { - export interface Emails { - data?: boolean; - - type?: boolean; - } - - export interface PhoneNumbers { - data?: boolean; - - type?: boolean; - } - - export interface Residence { - city?: boolean; - - country?: boolean; - - line1?: boolean; - - line2?: boolean; - - postal_code?: boolean; - - state?: boolean; - } - } - - export interface PayGroup { - id?: boolean; - - individual_ids?: boolean; - - name?: boolean; - - pay_frequencies?: boolean; - } - - export interface PayStatement { - paging?: PayStatement.Paging; - - pay_statements?: PayStatement.PayStatements; - } - - export namespace PayStatement { - export interface Paging { - count: boolean; - - offset: boolean; - } - - export interface PayStatements { - earnings?: PayStatements.Earnings; - - employee_deductions?: PayStatements.EmployeeDeductions; - - employer_contributions?: PayStatements.EmployerContributions; - - gross_pay?: boolean; - - individual_id?: boolean; - - net_pay?: boolean; - - payment_method?: boolean; - - taxes?: PayStatements.Taxes; - - total_hours?: boolean; - - type?: boolean; - } - - export namespace PayStatements { - export interface Earnings { - amount?: boolean; - - currency?: boolean; - - name?: boolean; - - type?: boolean; - } - - export interface EmployeeDeductions { - amount?: boolean; - - currency?: boolean; - - name?: boolean; - - pre_tax?: boolean; - - type?: boolean; - } - - export interface EmployerContributions { - amount?: boolean; - - currency?: boolean; - - name?: boolean; - } - - export interface Taxes { - amount?: boolean; - - currency?: boolean; - - employer?: boolean; - - name?: boolean; - - type?: boolean; - } - } - } - - export interface Payment { - id?: boolean; - - company_debit?: boolean; +export interface ProviderListResponse { + /** + * The id of the payroll provider used in Connect. + */ + id: string; - debit_date?: boolean; + /** + * The display name of the payroll provider. + */ + display_name: string; - employee_taxes?: boolean; + /** + * The list of Finch products supported on this payroll provider. + */ + products: Array; - employer_taxes?: boolean; + /** + * The authentication methods supported by the provider. + */ + authentication_methods?: Array; - gross_pay?: boolean; + /** + * `true` if the integration is in a beta state, `false` otherwise + */ + beta?: boolean; - individual_ids?: boolean; + /** + * The url to the official icon of the payroll provider. + */ + icon?: string; - net_pay?: boolean; + /** + * The url to the official logo of the payroll provider. + */ + logo?: string; - pay_date?: boolean; + /** + * @deprecated [DEPRECATED] Whether the Finch integration with this provider uses + * the Assisted Connect Flow by default. This field is now deprecated. Please check + * for a `type` of `assisted` in the `authentication_methods` field instead. + */ + manual?: boolean; - pay_frequencies?: boolean; + /** + * whether MFA is required for the provider. + */ + mfa_required?: boolean; - pay_group_ids?: boolean; + /** + * The hex code for the primary color of the payroll provider. + */ + primary_color?: string; +} - pay_period?: Payment.PayPeriod; - } +export namespace ProviderListResponse { + export interface AuthenticationMethod { + /** + * The type of authentication method + */ + type: 'assisted' | 'credential' | 'api_token' | 'api_credential' | 'oauth' | 'api'; - export namespace Payment { - export interface PayPeriod { - end_date?: boolean; + /** + * The supported benefit types and their configurations + */ + benefits_support?: { [key: string]: unknown }; - start_date?: boolean; - } - } - } + /** + * The supported fields for each Finch product + */ + supported_fields?: { [key: string]: unknown }; } } -Providers.ProvidersSinglePage = ProvidersSinglePage; +Providers.ProviderListResponsesSinglePage = ProviderListResponsesSinglePage; export declare namespace Providers { - export { type Provider as Provider, ProvidersSinglePage as ProvidersSinglePage }; + export { + type Provider as Provider, + type ProviderListResponse as ProviderListResponse, + ProviderListResponsesSinglePage as ProviderListResponsesSinglePage, + }; } diff --git a/src/resources/request-forwarding.ts b/src/resources/request-forwarding.ts index 32dcb5a0..6bc5fcbf 100644 --- a/src/resources/request-forwarding.ts +++ b/src/resources/request-forwarding.ts @@ -9,16 +9,6 @@ export class RequestForwarding extends APIResource { * Finch's unified API doesn't have a data model that cleanly fits your needs, then * Forward allows you to push or pull data models directly against an integration's * API. - * - * @example - * ```ts - * const response = await client.requestForwarding.forward({ - * method: 'POST', - * route: '/people/search', - * headers: { 'content-type': 'application/json' }, - * params: { showInactive: true, humanReadable: true }, - * }); - * ``` */ forward( body: RequestForwardingForwardParams, @@ -29,19 +19,6 @@ export class RequestForwarding extends APIResource { } export interface RequestForwardingForwardResponse { - /** - * A string representation of the HTTP response body of the forwarded request's - * response received from the underlying integration's API. This field may be null - * in the case where the upstream system's response is empty. - */ - data: string | null; - - /** - * The HTTP headers of the forwarded request's response, exactly as received from - * the underlying integration's API. - */ - headers: unknown | null; - /** * An object containing details of your original forwarded request, for your ease * of reference. @@ -53,6 +30,19 @@ export interface RequestForwardingForwardResponse { * the underlying integration's API. This value will be returned as an integer. */ statusCode: number; + + /** + * A string representation of the HTTP response body of the forwarded request's + * response received from the underlying integration's API. This field may be null + * in the case where the upstream system's response is empty. + */ + data?: string | null; + + /** + * The HTTP headers of the forwarded request's response, exactly as received from + * the underlying integration's API. + */ + headers?: { [key: string]: unknown } | null; } export namespace RequestForwardingForwardResponse { @@ -62,34 +52,30 @@ export namespace RequestForwardingForwardResponse { */ export interface Request { /** - * The body that was specified for the forwarded request. If a value was not - * specified in the original request, this value will be returned as null ; - * otherwise, this value will always be returned as a string. + * The HTTP method that was specified for the forwarded request. Valid values + * include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`. */ - data: string | null; + method: string; /** - * The specified HTTP headers that were included in the forwarded request. If no - * headers were specified, this will be returned as `null`. + * The URL route path that was specified for the forwarded request. */ - headers: unknown | null; + route: string; /** - * The HTTP method that was specified for the forwarded request. Valid values - * include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`. + * The body that was specified for the forwarded request. */ - method: string; + data?: string | { [key: string]: unknown } | null; /** - * The query parameters that were included in the forwarded request. If no query - * parameters were specified, this will be returned as `null`. + * The HTTP headers that were specified for the forwarded request. */ - params: unknown | null; + headers?: { [key: string]: unknown } | null; /** - * The URL route path that was specified for the forwarded request. + * The query parameters that were specified for the forwarded request. */ - route: string; + params?: { [key: string]: unknown } | null; } } @@ -118,13 +104,13 @@ export interface RequestForwardingForwardParams { * specified as an object of key-value pairs. Example: * `{"Content-Type": "application/xml", "X-API-Version": "v1" }` */ - headers?: unknown | null; + headers?: { [key: string]: unknown } | null; /** * The query parameters for the forwarded request. This value must be specified as * a valid JSON object rather than a query string. */ - params?: unknown | null; + params?: { [key: string]: unknown } | null; } export declare namespace RequestForwarding { diff --git a/tests/api-resources/request-forwarding.test.ts b/tests/api-resources/request-forwarding.test.ts index 69f7077f..cdc8b714 100644 --- a/tests/api-resources/request-forwarding.test.ts +++ b/tests/api-resources/request-forwarding.test.ts @@ -10,7 +10,7 @@ const client = new Finch({ describe('resource requestForwarding', () => { test('forward: only required params', async () => { - const responsePromise = client.requestForwarding.forward({ method: 'POST', route: '/people/search' }); + const responsePromise = client.requestForwarding.forward({ method: 'method', route: 'route' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,11 +22,11 @@ describe('resource requestForwarding', () => { test('forward: required and optional params', async () => { const response = await client.requestForwarding.forward({ - method: 'POST', - route: '/people/search', - data: null, - headers: { 'content-type': 'application/json' }, - params: { showInactive: true, humanReadable: true }, + method: 'method', + route: 'route', + data: 'data', + headers: { foo: 'bar' }, + params: { foo: 'bar' }, }); }); }); From 4d901569e987fa9c93c12ae77844972b4655fa8f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 23:01:14 +0000 Subject: [PATCH 33/47] chore(internal): ignore .eslintcache --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 74cba895..d62bea50 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,6 @@ dist dist-deno /*.tgz .idea/ +.eslintcache dist-bundle *.mcpb From 277ba31b242825bd569a6566a8f2a136ec0b595d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 16:53:47 +0000 Subject: [PATCH 34/47] fix(mcp): fix cli argument parsing logic --- .eslintcache | 2 +- packages/mcp-server/src/options.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.eslintcache b/.eslintcache index 9ecd9531..0b562d68 100644 --- a/.eslintcache +++ b/.eslintcache @@ -1 +1 @@ -[{"/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/providers/list-providers.ts":"1","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts":"2","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/index.ts":"3","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/index.ts":"4","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/providers.ts":"5","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/request-forwarding.ts":"6","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/tests/api-resources/request-forwarding.test.ts":"7"},{"size":4424,"mtime":1758919641943},{"size":5216,"mtime":1758919641943},{"size":13311,"mtime":1758919641943},{"size":1072,"mtime":1758919641943},{"size":4399,"mtime":1758919641943},{"size":3873,"mtime":1758919641943},{"size":1132,"mtime":1758919641943}] \ No newline at end of file +[{"/home/tempuser-y52ps0/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts":"1"},{"size":17015,"mtime":1759164825169,"results":"2","hashOfConfig":"3"},{"filePath":"4","messages":"5","suppressedMessages":"6","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"br52zc","/home/tempuser-y52ps0/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts",[],[]] \ No newline at end of file diff --git a/packages/mcp-server/src/options.ts b/packages/mcp-server/src/options.ts index 348a33d0..4fe3b987 100644 --- a/packages/mcp-server/src/options.ts +++ b/packages/mcp-server/src/options.ts @@ -247,9 +247,10 @@ export function parseCLIOptions(): CLIOptions { } const shouldIncludeToolType = (toolType: 'dynamic' | 'all' | 'code' | 'docs') => - explicitTools ? argv.tools?.includes(toolType) && !argv.noTools?.includes(toolType) : undefined; + argv.noTools?.includes(toolType) ? false + : argv.tools?.includes(toolType) ? true + : undefined; - const explicitTools = Boolean(argv.tools || argv.noTools); const includeDynamicTools = shouldIncludeToolType('dynamic'); const includeAllTools = shouldIncludeToolType('all'); const includeCodeTools = shouldIncludeToolType('code'); From 90b7ae260d427cebb7bcd7f2d3e854a0efaccd19 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 21:27:01 +0000 Subject: [PATCH 35/47] fix(mcp): resolve a linting issue in server code --- packages/mcp-server/src/code-tool-paths.cts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mcp-server/src/code-tool-paths.cts b/packages/mcp-server/src/code-tool-paths.cts index 3d6655af..15ce7f55 100644 --- a/packages/mcp-server/src/code-tool-paths.cts +++ b/packages/mcp-server/src/code-tool-paths.cts @@ -1,3 +1,3 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -export const workerPath = require.resolve('./code-tool-worker.mjs') +export const workerPath = require.resolve('./code-tool-worker.mjs'); From 0601d2aca7eeb80b8967d3bc89dea5b5ab527565 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 22:31:37 +0000 Subject: [PATCH 36/47] chore: update lockfile --- packages/mcp-server/yarn.lock | 306 +--------------------------------- 1 file changed, 4 insertions(+), 302 deletions(-) diff --git a/packages/mcp-server/yarn.lock b/packages/mcp-server/yarn.lock index ad819835..966d0575 100644 --- a/packages/mcp-server/yarn.lock +++ b/packages/mcp-server/yarn.lock @@ -10,20 +10,6 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@anthropic-ai/dxt@^0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@anthropic-ai/dxt/-/dxt-0.2.6.tgz#636197c3d083c9136ac3b5a11d2ba82477fdc2c6" - integrity sha512-5VSqKRpkytTYh5UJz9jOaI8zLXNCe4Gc+ArKGFV6IeWnEPP0Qnd0k+V3pO8cYzp92Puf/+Cgo0xc4haE0azTXg== - dependencies: - "@inquirer/prompts" "^6.0.1" - commander "^13.1.0" - fflate "^0.8.2" - galactus "^1.0.0" - ignore "^7.0.5" - node-forge "^1.3.1" - pretty-bytes "^5.6.0" - zod "^3.25.67" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" @@ -350,144 +336,6 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@inquirer/checkbox@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-3.0.1.tgz#0a57f704265f78c36e17f07e421b98efb4b9867b" - integrity sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/figures" "^1.0.6" - "@inquirer/type" "^2.0.0" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" - -"@inquirer/confirm@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-4.0.1.tgz#9106d6bffa0b2fdd0e4f60319b6f04f2e06e6e25" - integrity sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - -"@inquirer/core@^9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" - integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== - dependencies: - "@inquirer/figures" "^1.0.6" - "@inquirer/type" "^2.0.0" - "@types/mute-stream" "^0.0.4" - "@types/node" "^22.5.5" - "@types/wrap-ansi" "^3.0.0" - ansi-escapes "^4.3.2" - cli-width "^4.1.0" - mute-stream "^1.0.0" - signal-exit "^4.1.0" - strip-ansi "^6.0.1" - wrap-ansi "^6.2.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/editor@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-3.0.1.tgz#d109f21e050af6b960725388cb1c04214ed7c7bc" - integrity sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - external-editor "^3.1.0" - -"@inquirer/expand@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-3.0.1.tgz#aed9183cac4d12811be47a4a895ea8e82a17e22c" - integrity sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/figures@^1.0.6": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" - integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== - -"@inquirer/input@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-3.0.1.tgz#de63d49e516487388508d42049deb70f2cb5f28e" - integrity sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - -"@inquirer/number@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-2.0.1.tgz#b9863080d02ab7dc2e56e16433d83abea0f2a980" - integrity sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - -"@inquirer/password@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-3.0.1.tgz#2a9a9143591088336bbd573bcb05d5bf080dbf87" - integrity sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - ansi-escapes "^4.3.2" - -"@inquirer/prompts@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-6.0.1.tgz#43f5c0ed35c5ebfe52f1d43d46da2d363d950071" - integrity sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A== - dependencies: - "@inquirer/checkbox" "^3.0.1" - "@inquirer/confirm" "^4.0.1" - "@inquirer/editor" "^3.0.1" - "@inquirer/expand" "^3.0.1" - "@inquirer/input" "^3.0.1" - "@inquirer/number" "^2.0.1" - "@inquirer/password" "^3.0.1" - "@inquirer/rawlist" "^3.0.1" - "@inquirer/search" "^2.0.1" - "@inquirer/select" "^3.0.1" - -"@inquirer/rawlist@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-3.0.1.tgz#729def358419cc929045f264131878ed379e0af3" - integrity sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/search@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-2.0.1.tgz#69b774a0a826de2e27b48981d01bc5ad81e73721" - integrity sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/figures" "^1.0.6" - "@inquirer/type" "^2.0.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/select@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-3.0.1.tgz#1df9ed27fb85a5f526d559ac5ce7cc4e9dc4e7ec" - integrity sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/figures" "^1.0.6" - "@inquirer/type" "^2.0.0" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" - -"@inquirer/type@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" - integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== - dependencies: - mute-stream "^1.0.0" - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -947,13 +795,6 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/mute-stream@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" - integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== - dependencies: - "@types/node" "*" - "@types/node@*": version "22.15.17" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.17.tgz#355ccec95f705b664e4332bb64a7f07db30b7055" @@ -961,13 +802,6 @@ dependencies: undici-types "~6.21.0" -"@types/node@^22.5.5": - version "22.18.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.0.tgz#9e4709be4f104e3568f7dd1c71e2949bf147a47b" - integrity sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ== - dependencies: - undici-types "~6.21.0" - "@types/qs@*", "@types/qs@^6.14.0": version "6.14.0" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" @@ -1000,11 +834,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== -"@types/wrap-ansi@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" - integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== - "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" @@ -1151,7 +980,7 @@ ajv@^6.12.4, ajv@^6.12.6: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: +ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -1393,11 +1222,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - ci-info@^3.2.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -1413,11 +1237,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -1454,11 +1273,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -commander@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" - integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1871,15 +1685,6 @@ express@^5.0.1, express@^5.1.0: type-is "^2.0.1" vary "^1.1.2" -external-editor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1925,11 +1730,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fflate@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" - integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1993,14 +1793,6 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -flora-colossus@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-2.0.0.tgz#af1e85db0a8256ef05f3fb531c1235236c97220a" - integrity sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA== - dependencies: - debug "^4.3.4" - fs-extra "^10.1.0" - forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -2011,15 +1803,6 @@ fresh@^2.0.0: resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2035,15 +1818,6 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -galactus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/galactus/-/galactus-1.0.0.tgz#c2615182afa0c6d0859b92e56ae36d052827db7e" - integrity sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ== - dependencies: - debug "^4.3.4" - flora-colossus "^2.0.0" - fs-extra "^10.1.0" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -2136,7 +1910,7 @@ gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: +graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -2191,23 +1965,11 @@ iconv-lite@0.6.3, iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -ignore@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" - integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== - import-fresh@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" @@ -2786,15 +2548,6 @@ json5@^2.2.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonfile@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" - integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -2968,11 +2721,6 @@ ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2983,11 +2731,6 @@ negotiator@^1.0.0: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== -node-forge@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -3053,11 +2796,6 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - p-all@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-all/-/p-all-3.0.0.tgz#077c023c37e75e760193badab2bad3ccd5782bfb" @@ -3201,11 +2939,6 @@ prettier@^3.0.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== -pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -3353,7 +3086,7 @@ safe-buffer@5.2.1, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3457,11 +3190,6 @@ signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -3606,13 +3334,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -3753,11 +3474,6 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -3821,15 +3537,6 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -3890,11 +3597,6 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yoctocolors-cjs@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" - integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== - zod-to-json-schema@^3.24.1, zod-to-json-schema@^3.24.5: version "3.24.5" resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz#d1095440b147fb7c2093812a53c54df8d5df50a3" @@ -3910,7 +3612,7 @@ zod@^3.23.8: resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.4.tgz#e2e2cca5faaa012d76e527d0d36622e0a90c315f" integrity sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg== -zod@^3.25.20, zod@^3.25.67: +zod@^3.25.20: version "3.25.76" resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== From 53a4db199bbd91a0918f9d60f04cdf60814a5b69 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 14:03:38 +0000 Subject: [PATCH 37/47] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 40205901..23acd0a9 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-fd18483a409117a70113398a50c7ff8bde92455d830e8027f2c2e3cc7a9c67ac.yml -openapi_spec_hash: cb88f02495e1cfd2d73d2f9e3728205d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-f8783c7acb61970583e95ad6d75c8735d2ae5e4344f808957e0b9cc22f2b8c04.yml +openapi_spec_hash: 2baa7719b95befc1553083d5757bd99a config_hash: 6d3585c0032e08d723d077d660fc8448 From 64d21976509a6d6b6d0095bf1867ad9bdd153e03 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 21:36:29 +0000 Subject: [PATCH 38/47] chore(internal): remove .eslintcache --- .eslintcache | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .eslintcache diff --git a/.eslintcache b/.eslintcache deleted file mode 100644 index 0b562d68..00000000 --- a/.eslintcache +++ /dev/null @@ -1 +0,0 @@ -[{"/home/tempuser-y52ps0/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts":"1"},{"size":17015,"mtime":1759164825169,"results":"2","hashOfConfig":"3"},{"filePath":"4","messages":"5","suppressedMessages":"6","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"br52zc","/home/tempuser-y52ps0/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts",[],[]] \ No newline at end of file From 7df5a28a1be002645785fa2d59cd94da5df28889 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 21:36:27 +0000 Subject: [PATCH 39/47] chore(internal): use npm pack for build uploads --- scripts/utils/upload-artifact.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh index 7e2b4502..84cc4286 100755 --- a/scripts/utils/upload-artifact.sh +++ b/scripts/utils/upload-artifact.sh @@ -12,9 +12,11 @@ if [[ "$SIGNED_URL" == "null" ]]; then exit 1 fi -UPLOAD_RESPONSE=$(tar "${BASE_PATH:+-C$BASE_PATH}" -cz "${ARTIFACT_PATH:-dist}" | curl -v -X PUT \ +TARBALL=$(cd dist && npm pack --silent) + +UPLOAD_RESPONSE=$(curl -v -X PUT \ -H "Content-Type: application/gzip" \ - --data-binary @- "$SIGNED_URL" 2>&1) + --data-binary "@dist/$TARBALL" "$SIGNED_URL" 2>&1) if echo "$UPLOAD_RESPONSE" | grep -q "HTTP/[0-9.]* 200"; then echo -e "\033[32mUploaded build to Stainless storage.\033[0m" From 1c4f073cc8e8f06e58069dcc2bc5b708e3a8be34 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 15:14:24 +0000 Subject: [PATCH 40/47] feat(api): api update --- .stats.yml | 4 ++-- src/resources/hris/pay-statements.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.stats.yml b/.stats.yml index 23acd0a9..4d6fbdae 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-f8783c7acb61970583e95ad6d75c8735d2ae5e4344f808957e0b9cc22f2b8c04.yml -openapi_spec_hash: 2baa7719b95befc1553083d5757bd99a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-ef0b0fb4ec85648855da514cbc53018cb429fb37bce8570bc6c44254eb32c62f.yml +openapi_spec_hash: 38622a4a3cdef04686053018329616f2 config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/src/resources/hris/pay-statements.ts b/src/resources/hris/pay-statements.ts index f9eb2090..3f641c75 100644 --- a/src/resources/hris/pay-statements.ts +++ b/src/resources/hris/pay-statements.ts @@ -52,9 +52,9 @@ export interface PayStatement { /** * The array of deductions objects associated with this pay statement. */ - employee_deductions: Array | null; + employee_deductions: Array | null; - employer_contributions: Array | null; + employer_contributions: Array | null; gross_pay: HRISAPI.Money | null; @@ -73,7 +73,7 @@ export interface PayStatement { /** * The array of taxes objects associated with this pay statement. */ - taxes: Array | null; + taxes: Array | null; /** * The number of hours worked for this pay period From f9c7e0685ff5ab28614353eacc1fc7887ec6a0ff Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 23:34:06 +0000 Subject: [PATCH 41/47] feat(api): api update --- .stats.yml | 4 +-- api.md | 4 +-- .../src/tools/account/introspect-account.ts | 2 +- .../jobs/automated/list-jobs-automated.ts | 5 --- .../jobs/automated/retrieve-jobs-automated.ts | 9 +---- .../tools/jobs/manual/retrieve-jobs-manual.ts | 7 +--- src/resources/account.ts | 10 ------ src/resources/jobs/automated.ts | 34 ++----------------- src/resources/jobs/index.ts | 3 +- src/resources/jobs/jobs.ts | 10 ++---- src/resources/jobs/manual.ts | 29 ++-------------- tests/api-resources/jobs/automated.test.ts | 16 +-------- tests/api-resources/jobs/manual.test.ts | 11 ------ 13 files changed, 16 insertions(+), 128 deletions(-) diff --git a/.stats.yml b/.stats.yml index 4d6fbdae..845aada6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-ef0b0fb4ec85648855da514cbc53018cb429fb37bce8570bc6c44254eb32c62f.yml -openapi_spec_hash: 38622a4a3cdef04686053018329616f2 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-df44cda9b18320f8a8117d5c8dfa02ebd6739fc77fc87eb284748c987a7412a4.yml +openapi_spec_hash: 69524ddfedf3c4492e77826561f7c7d8 config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/api.md b/api.md index f945660a..f47d124f 100644 --- a/api.md +++ b/api.md @@ -244,7 +244,7 @@ Types: Methods: - client.jobs.automated.create({ ...params }) -> AutomatedCreateResponse -- client.jobs.automated.retrieve(jobId, { ...params }) -> AutomatedAsyncJob +- client.jobs.automated.retrieve(jobId) -> AutomatedAsyncJob - client.jobs.automated.list({ ...params }) -> AutomatedListResponse ## Manual @@ -255,7 +255,7 @@ Types: Methods: -- client.jobs.manual.retrieve(jobId, { ...params }) -> ManualAsyncJob +- client.jobs.manual.retrieve(jobId) -> ManualAsyncJob # Sandbox diff --git a/packages/mcp-server/src/tools/account/introspect-account.ts b/packages/mcp-server/src/tools/account/introspect-account.ts index 943b330a..bdc030fb 100644 --- a/packages/mcp-server/src/tools/account/introspect-account.ts +++ b/packages/mcp-server/src/tools/account/introspect-account.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'introspect_account', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n entity_ids: {\n type: 'array',\n description: 'Array of entity IDs associated with this connection.',\n items: {\n type: 'string'\n }\n },\n entity_mode: {\n type: 'string',\n description: 'Indicates whether this connection manages a single entity or multiple entities.',\n enum: [ 'single',\n 'multi'\n ]\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts b/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts index 7e9fbc59..a2b7e70d 100644 --- a/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts +++ b/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts @@ -22,11 +22,6 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { - entity_id: { - type: 'string', - description: - "The entity ID to use when authenticating with a multi-account token. Required when using a multi-account token to specify which entity's data to access. Example: `123e4567-e89b-12d3-a456-426614174000`", - }, limit: { type: 'integer', description: 'Number of items to return', diff --git a/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts b/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts index 08a53cd0..212feeae 100644 --- a/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts +++ b/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts @@ -25,11 +25,6 @@ export const tool: Tool = { job_id: { type: 'string', }, - entity_id: { - type: 'string', - description: - "The entity ID to use when authenticating with a multi-account token. Required when using a multi-account token to specify which entity's data to access. Example: `123e4567-e89b-12d3-a456-426614174000`", - }, jq_filter: { type: 'string', title: 'jq Filter', @@ -46,9 +41,7 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { job_id, jq_filter, ...body } = args as any; - return asTextContentResult( - await maybeFilter(jq_filter, await client.jobs.automated.retrieve(job_id, body)), - ); + return asTextContentResult(await maybeFilter(jq_filter, await client.jobs.automated.retrieve(job_id))); }; export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts b/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts index e6273579..39670f06 100644 --- a/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts +++ b/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts @@ -25,11 +25,6 @@ export const tool: Tool = { job_id: { type: 'string', }, - entity_id: { - type: 'string', - description: - "The entity ID to use when authenticating with a multi-account token. Required when using a multi-account token to specify which entity's data to access. Example: `123e4567-e89b-12d3-a456-426614174000`", - }, jq_filter: { type: 'string', title: 'jq Filter', @@ -46,7 +41,7 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { job_id, jq_filter, ...body } = args as any; - return asTextContentResult(await maybeFilter(jq_filter, await client.jobs.manual.retrieve(job_id, body))); + return asTextContentResult(await maybeFilter(jq_filter, await client.jobs.manual.retrieve(job_id))); }; export default { metadata, tool, handler }; diff --git a/src/resources/account.ts b/src/resources/account.ts index 3e9f48b3..2df6c8d5 100644 --- a/src/resources/account.ts +++ b/src/resources/account.ts @@ -100,16 +100,6 @@ export interface Introspection { */ customer_name?: string | null; - /** - * Array of entity IDs associated with this connection. - */ - entity_ids?: Array; - - /** - * Indicates whether this connection manages a single entity or multiple entities. - */ - entity_mode?: 'single' | 'multi'; - /** * Whether the connection associated with the `access_token` uses the Assisted * Connect Flow. (`true` if using Assisted Connect, `false` if connection is diff --git a/src/resources/jobs/automated.ts b/src/resources/jobs/automated.ts index 4319848d..9e7a3a0f 100644 --- a/src/resources/jobs/automated.ts +++ b/src/resources/jobs/automated.ts @@ -31,21 +31,8 @@ export class Automated extends APIResource { /** * Get an automated job by `job_id`. */ - retrieve( - jobId: string, - query?: AutomatedRetrieveParams, - options?: Core.RequestOptions, - ): Core.APIPromise; - retrieve(jobId: string, options?: Core.RequestOptions): Core.APIPromise; - retrieve( - jobId: string, - query: AutomatedRetrieveParams | Core.RequestOptions = {}, - options?: Core.RequestOptions, - ): Core.APIPromise { - if (isRequestOptions(query)) { - return this.retrieve(jobId, {}, query); - } - return this._client.get(`/jobs/automated/${jobId}`, { query, ...options }); + retrieve(jobId: string, options?: Core.RequestOptions): Core.APIPromise { + return this._client.get(`/jobs/automated/${jobId}`, options); } /** @@ -222,23 +209,7 @@ export declare namespace AutomatedCreateParams { } } -export interface AutomatedRetrieveParams { - /** - * The entity ID to use when authenticating with a multi-account token. Required - * when using a multi-account token to specify which entity's data to access. - * Example: `123e4567-e89b-12d3-a456-426614174000` - */ - entity_id?: string; -} - export interface AutomatedListParams { - /** - * The entity ID to use when authenticating with a multi-account token. Required - * when using a multi-account token to specify which entity's data to access. - * Example: `123e4567-e89b-12d3-a456-426614174000` - */ - entity_id?: string; - /** * Number of items to return */ @@ -256,7 +227,6 @@ export declare namespace Automated { type AutomatedCreateResponse as AutomatedCreateResponse, type AutomatedListResponse as AutomatedListResponse, type AutomatedCreateParams as AutomatedCreateParams, - type AutomatedRetrieveParams as AutomatedRetrieveParams, type AutomatedListParams as AutomatedListParams, }; } diff --git a/src/resources/jobs/index.ts b/src/resources/jobs/index.ts index 74874081..fc96a5e7 100644 --- a/src/resources/jobs/index.ts +++ b/src/resources/jobs/index.ts @@ -6,8 +6,7 @@ export { type AutomatedCreateResponse, type AutomatedListResponse, type AutomatedCreateParams, - type AutomatedRetrieveParams, type AutomatedListParams, } from './automated'; export { Jobs } from './jobs'; -export { Manual, type ManualAsyncJob, type ManualRetrieveParams } from './manual'; +export { Manual, type ManualAsyncJob } from './manual'; diff --git a/src/resources/jobs/jobs.ts b/src/resources/jobs/jobs.ts index 9fa13838..7cc64d28 100644 --- a/src/resources/jobs/jobs.ts +++ b/src/resources/jobs/jobs.ts @@ -9,10 +9,9 @@ import { AutomatedCreateResponse, AutomatedListParams, AutomatedListResponse, - AutomatedRetrieveParams, } from './automated'; import * as ManualAPI from './manual'; -import { Manual, ManualAsyncJob, ManualRetrieveParams } from './manual'; +import { Manual, ManualAsyncJob } from './manual'; export class Jobs extends APIResource { automated: AutomatedAPI.Automated = new AutomatedAPI.Automated(this._client); @@ -29,13 +28,8 @@ export declare namespace Jobs { type AutomatedCreateResponse as AutomatedCreateResponse, type AutomatedListResponse as AutomatedListResponse, type AutomatedCreateParams as AutomatedCreateParams, - type AutomatedRetrieveParams as AutomatedRetrieveParams, type AutomatedListParams as AutomatedListParams, }; - export { - Manual as Manual, - type ManualAsyncJob as ManualAsyncJob, - type ManualRetrieveParams as ManualRetrieveParams, - }; + export { Manual as Manual, type ManualAsyncJob as ManualAsyncJob }; } diff --git a/src/resources/jobs/manual.ts b/src/resources/jobs/manual.ts index c755ccae..07f4b6d5 100644 --- a/src/resources/jobs/manual.ts +++ b/src/resources/jobs/manual.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; -import { isRequestOptions } from '../../core'; import * as Core from '../../core'; export class Manual extends APIResource { @@ -9,21 +8,8 @@ export class Manual extends APIResource { * Get a manual job by `job_id`. Manual jobs are completed by a human and include * Assisted Benefits jobs. */ - retrieve( - jobId: string, - query?: ManualRetrieveParams, - options?: Core.RequestOptions, - ): Core.APIPromise; - retrieve(jobId: string, options?: Core.RequestOptions): Core.APIPromise; - retrieve( - jobId: string, - query: ManualRetrieveParams | Core.RequestOptions = {}, - options?: Core.RequestOptions, - ): Core.APIPromise { - if (isRequestOptions(query)) { - return this.retrieve(jobId, {}, query); - } - return this._client.get(`/jobs/manual/${jobId}`, { query, ...options }); + retrieve(jobId: string, options?: Core.RequestOptions): Core.APIPromise { + return this._client.get(`/jobs/manual/${jobId}`, options); } } @@ -38,15 +24,6 @@ export interface ManualAsyncJob { status: 'pending' | 'in_progress' | 'error' | 'complete'; } -export interface ManualRetrieveParams { - /** - * The entity ID to use when authenticating with a multi-account token. Required - * when using a multi-account token to specify which entity's data to access. - * Example: `123e4567-e89b-12d3-a456-426614174000` - */ - entity_id?: string; -} - export declare namespace Manual { - export { type ManualAsyncJob as ManualAsyncJob, type ManualRetrieveParams as ManualRetrieveParams }; + export { type ManualAsyncJob as ManualAsyncJob }; } diff --git a/tests/api-resources/jobs/automated.test.ts b/tests/api-resources/jobs/automated.test.ts index 2b844248..a199923f 100644 --- a/tests/api-resources/jobs/automated.test.ts +++ b/tests/api-resources/jobs/automated.test.ts @@ -42,17 +42,6 @@ describe('resource automated', () => { ).rejects.toThrow(Finch.NotFoundError); }); - test('retrieve: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.jobs.automated.retrieve( - 'job_id', - { entity_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); - }); - test('list', async () => { const responsePromise = client.jobs.automated.list(); const rawResponse = await responsePromise.asResponse(); @@ -74,10 +63,7 @@ describe('resource automated', () => { test('list: request options and params are passed correctly', async () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( - client.jobs.automated.list( - { entity_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', limit: 0, offset: 0 }, - { path: '/_stainless_unknown_path' }, - ), + client.jobs.automated.list({ limit: 0, offset: 0 }, { path: '/_stainless_unknown_path' }), ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/jobs/manual.test.ts b/tests/api-resources/jobs/manual.test.ts index 04ff1d5e..c1912928 100644 --- a/tests/api-resources/jobs/manual.test.ts +++ b/tests/api-resources/jobs/manual.test.ts @@ -26,15 +26,4 @@ describe('resource manual', () => { Finch.NotFoundError, ); }); - - test('retrieve: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.jobs.manual.retrieve( - 'job_id', - { entity_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); - }); }); From 55c37998bdb39779bfb9ae62ee5310a2a423248d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Oct 2025 17:05:57 +0000 Subject: [PATCH 42/47] chore: extract some types in mcp docs --- .../src/tools/connect/sessions/new-connect-sessions.ts | 2 +- .../tools/connect/sessions/reauthenticate-connect-sessions.ts | 2 +- .../individuals/enrolled-ids-benefits-hris-individuals.ts | 2 +- .../pay-statement-item/list-company-hris-pay-statement-item.ts | 2 +- .../rules/create-pay-statement-item-company-hris-rules.ts | 2 +- .../rules/delete-pay-statement-item-company-hris-rules.ts | 2 +- .../rules/list-pay-statement-item-company-hris-rules.ts | 2 +- .../rules/update-pay-statement-item-company-hris-rules.ts | 2 +- .../mcp-server/src/tools/hris/documents/list-hris-documents.ts | 2 +- .../src/tools/hris/documents/retreive-hris-documents.ts | 2 +- .../src/tools/jobs/automated/create-jobs-automated.ts | 2 +- .../mcp-server/src/tools/jobs/automated/list-jobs-automated.ts | 2 +- .../src/tools/payroll/pay-groups/list-payroll-pay-groups.ts | 2 +- .../src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts | 2 +- packages/mcp-server/src/tools/providers/list-providers.ts | 2 +- .../src/tools/request-forwarding/forward-request-forwarding.ts | 2 +- .../src/tools/sandbox/company/update-sandbox-company.ts | 2 +- .../connections/accounts/create-connections-sandbox-accounts.ts | 2 +- .../connections/accounts/update-connections-sandbox-accounts.ts | 2 +- .../src/tools/sandbox/connections/create-sandbox-connections.ts | 2 +- .../src/tools/sandbox/directory/create-sandbox-directory.ts | 2 +- .../src/tools/sandbox/individual/update-sandbox-individual.ts | 2 +- .../jobs/configuration/retrieve-jobs-sandbox-configuration.ts | 2 +- .../mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts | 2 +- .../src/tools/sandbox/payment/create-sandbox-payment.ts | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts b/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts index a1914cff..8f76f54c 100644 --- a/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts +++ b/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'new_connect_sessions', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new connect session for an employer\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n connect_url: {\n type: 'string',\n description: 'The Connect URL to redirect the user to for authentication'\n },\n session_id: {\n type: 'string',\n description: 'The unique identifier for the created connect session'\n }\n },\n required: [ 'connect_url',\n 'session_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new connect session for an employer\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/session_new_response',\n $defs: {\n session_new_response: {\n type: 'object',\n properties: {\n connect_url: {\n type: 'string',\n description: 'The Connect URL to redirect the user to for authentication'\n },\n session_id: {\n type: 'string',\n description: 'The unique identifier for the created connect session'\n }\n },\n required: [ 'connect_url',\n 'session_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts b/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts index 017a780c..486d5d22 100644 --- a/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts +++ b/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'reauthenticate_connect_sessions', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new Connect session for reauthenticating an existing connection\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n connect_url: {\n type: 'string',\n description: 'The Connect URL to redirect the user to for reauthentication'\n },\n session_id: {\n type: 'string',\n description: 'The unique identifier for the created connect session'\n }\n },\n required: [ 'connect_url',\n 'session_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new Connect session for reauthenticating an existing connection\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/session_reauthenticate_response',\n $defs: {\n session_reauthenticate_response: {\n type: 'object',\n properties: {\n connect_url: {\n type: 'string',\n description: 'The Connect URL to redirect the user to for reauthentication'\n },\n session_id: {\n type: 'string',\n description: 'The unique identifier for the created connect session'\n }\n },\n required: [ 'connect_url',\n 'session_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts index 4c85d942..ce1d33f4 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'enrolled_ids_benefits_hris_individuals', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nLists individuals currently enrolled in a given deduction.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n benefit_id: {\n type: 'string',\n description: 'The id of the benefit.'\n },\n individual_ids: {\n type: 'array',\n items: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n }\n }\n },\n required: [ 'benefit_id',\n 'individual_ids'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nLists individuals currently enrolled in a given deduction.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/individual_enrolled_ids_response',\n $defs: {\n individual_enrolled_ids_response: {\n type: 'object',\n properties: {\n benefit_id: {\n type: 'string',\n description: 'The id of the benefit.'\n },\n individual_ids: {\n type: 'array',\n items: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n }\n }\n },\n required: [ 'benefit_id',\n 'individual_ids'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts index bc1a82b0..b4df4bae 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_company_hris_pay_statement_item', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\n Retrieve a list of detailed pay statement items for the access token's connection account.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n responses: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n attributes: {\n type: 'object',\n description: 'The attributes of the pay statement item.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata of the pay statement item derived by the rules engine if available. Each attribute will be a key-value pair defined by a rule.',\n additionalProperties: true\n },\n employer: {\n type: 'boolean',\n description: '`true` if the amount is paid by the employers. This field is only available for taxes.'\n },\n pre_tax: {\n type: 'boolean',\n description: '`true` if the pay statement item is pre-tax. This field is only available for employee deductions.'\n },\n type: {\n type: 'string',\n description: 'The type of the pay statement item.'\n }\n },\n required: [ 'metadata'\n ]\n },\n category: {\n type: 'string',\n description: 'The category of the pay statement item.',\n enum: [ 'earnings',\n 'taxes',\n 'employee_deductions',\n 'employer_contributions'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the pay statement item.'\n }\n },\n required: [ 'attributes',\n 'category',\n 'name'\n ]\n }\n }\n },\n required: [ 'responses'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\n Retrieve a list of detailed pay statement items for the access token's connection account.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n responses: {\n type: 'array',\n items: {\n $ref: '#/$defs/pay_statement_item_list_response'\n }\n }\n },\n required: [ 'responses'\n ],\n $defs: {\n pay_statement_item_list_response: {\n type: 'object',\n properties: {\n attributes: {\n type: 'object',\n description: 'The attributes of the pay statement item.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata of the pay statement item derived by the rules engine if available. Each attribute will be a key-value pair defined by a rule.',\n additionalProperties: true\n },\n employer: {\n type: 'boolean',\n description: '`true` if the amount is paid by the employers. This field is only available for taxes.'\n },\n pre_tax: {\n type: 'boolean',\n description: '`true` if the pay statement item is pre-tax. This field is only available for employee deductions.'\n },\n type: {\n type: 'string',\n description: 'The type of the pay statement item.'\n }\n },\n required: [ 'metadata'\n ]\n },\n category: {\n type: 'string',\n description: 'The category of the pay statement item.',\n enum: [ 'earnings',\n 'taxes',\n 'employee_deductions',\n 'employer_contributions'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the pay statement item.'\n }\n },\n required: [ 'attributes',\n 'category',\n 'name'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts index 8367eeea..5c954955 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_pay_statement_item_company_hris_rules', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nCustom rules can be created to associate specific attributes to pay statement items depending on the use case. For example, pay statement items that meet certain conditions can be labeled as a pre-tax 401k. This metadata can be retrieved where pay statement item information is available.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nCustom rules can be created to associate specific attributes to pay statement items depending on the use case. For example, pay statement items that meet certain conditions can be labeled as a pre-tax 401k. This metadata can be retrieved where pay statement item information is available.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/rule_create_response',\n $defs: {\n rule_create_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts index e73d6584..420fcc93 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'delete_pay_statement_item_company_hris_rules', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nDelete a rule for a pay statement item.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n deleted_at: {\n type: 'string',\n description: 'The datetime when the rule was deleted.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nDelete a rule for a pay statement item.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/rule_delete_response',\n $defs: {\n rule_delete_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n deleted_at: {\n type: 'string',\n description: 'The datetime when the rule was deleted.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts index d6a05ed9..0f875d85 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_pay_statement_item_company_hris_rules', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nList all rules of a connection account.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n responses: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n },\n required: [ 'responses'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nList all rules of a connection account.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n responses: {\n type: 'array',\n items: {\n $ref: '#/$defs/rule_list_response'\n }\n }\n },\n required: [ 'responses'\n ],\n $defs: {\n rule_list_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts index f4fd4ff8..ceb760d2 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'update_pay_statement_item_company_hris_rules', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nUpdate a rule for a pay statement item.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nUpdate a rule for a pay statement item.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/rule_update_response',\n $defs: {\n rule_update_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts index e2b4bf89..e8d57239 100644 --- a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_hris_documents', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve a list of company-wide documents.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n items: {\n $ref: '#/$defs/document_response'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'documents',\n 'paging'\n ],\n $defs: {\n document_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch id for the document.'\n },\n individual_id: {\n type: 'string',\n description: 'The ID of the individual associated with the document. This will be null for employer-level documents.'\n },\n type: {\n type: 'string',\n description: 'The type of document.',\n enum: [ 'w4_2020',\n 'w4_2005'\n ]\n },\n url: {\n type: 'string',\n description: 'A URL to access the document. Format: `https://api.tryfinch.com/employer/documents/:document_id`.'\n },\n year: {\n type: 'number',\n description: 'The year the document applies to, if available.'\n }\n }\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve a list of company-wide documents.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_list_response',\n $defs: {\n document_list_response: {\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n items: {\n $ref: '#/$defs/document_response'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'documents',\n 'paging'\n ]\n },\n document_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch id for the document.'\n },\n individual_id: {\n type: 'string',\n description: 'The ID of the individual associated with the document. This will be null for employer-level documents.'\n },\n type: {\n type: 'string',\n description: 'The type of document.',\n enum: [ 'w4_2020',\n 'w4_2005'\n ]\n },\n url: {\n type: 'string',\n description: 'A URL to access the document. Format: `https://api.tryfinch.com/employer/documents/:document_id`.'\n },\n year: {\n type: 'number',\n description: 'The year the document applies to, if available.'\n }\n }\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts index ddb7e766..f75adb83 100644 --- a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'retreive_hris_documents', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve details of a specific document by its ID.\n\n\n# Response Schema\n```json\n{\n anyOf: [ {\n $ref: '#/$defs/w42020'\n },\n {\n $ref: '#/$defs/w42005'\n }\n ],\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n $defs: {\n w42020: {\n type: 'object',\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2020 W4 form.',\n properties: {\n amount_for_other_dependents: {\n type: 'integer',\n description: 'Amount claimed for dependents other than qualifying children under 17 (in cents).'\n },\n amount_for_qualifying_children_under_17: {\n type: 'integer',\n description: 'Amount claimed for dependents under 17 years old (in cents).'\n },\n deductions: {\n type: 'integer',\n description: 'Deductible expenses (in cents).'\n },\n extra_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'head_of_household',\n 'married_filing_jointly_or_qualifying_surviving_spouse',\n 'single_or_married_filing_separately'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this document.'\n },\n other_income: {\n type: 'integer',\n description: 'Additional income from sources outside of primary employment (in cents).'\n },\n total_claim_dependent_and_other_credits: {\n type: 'integer',\n description: 'Total amount claimed for dependents and other credits (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2020 W4 form.',\n enum: [ 'w4_2020'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n },\n w42005: {\n type: 'object',\n description: 'A 2005 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2005 W4 form.',\n properties: {\n additional_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n exemption: {\n type: 'string',\n description: 'Indicates exemption status from federal tax withholding.',\n enum: [ 'exempt',\n 'non_exempt'\n ]\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'married',\n 'married_but_withhold_at_higher_single_rate',\n 'single'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this 2005 W4 form.'\n },\n total_number_of_allowances: {\n type: 'integer',\n description: 'Total number of allowances claimed (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2005 W4 form.',\n enum: [ 'w4_2005'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve details of a specific document by its ID.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_retreive_response',\n $defs: {\n document_retreive_response: {\n anyOf: [ {\n $ref: '#/$defs/w42020'\n },\n {\n $ref: '#/$defs/w42005'\n }\n ],\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.'\n },\n w42020: {\n type: 'object',\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2020 W4 form.',\n properties: {\n amount_for_other_dependents: {\n type: 'integer',\n description: 'Amount claimed for dependents other than qualifying children under 17 (in cents).'\n },\n amount_for_qualifying_children_under_17: {\n type: 'integer',\n description: 'Amount claimed for dependents under 17 years old (in cents).'\n },\n deductions: {\n type: 'integer',\n description: 'Deductible expenses (in cents).'\n },\n extra_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'head_of_household',\n 'married_filing_jointly_or_qualifying_surviving_spouse',\n 'single_or_married_filing_separately'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this document.'\n },\n other_income: {\n type: 'integer',\n description: 'Additional income from sources outside of primary employment (in cents).'\n },\n total_claim_dependent_and_other_credits: {\n type: 'integer',\n description: 'Total amount claimed for dependents and other credits (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2020 W4 form.',\n enum: [ 'w4_2020'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n },\n w42005: {\n type: 'object',\n description: 'A 2005 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2005 W4 form.',\n properties: {\n additional_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n exemption: {\n type: 'string',\n description: 'Indicates exemption status from federal tax withholding.',\n enum: [ 'exempt',\n 'non_exempt'\n ]\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'married',\n 'married_but_withhold_at_higher_single_rate',\n 'single'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this 2005 W4 form.'\n },\n total_number_of_allowances: {\n type: 'integer',\n description: 'Total number of allowances claimed (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2005 W4 form.',\n enum: [ 'w4_2005'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts b/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts index 8c03a23c..efd870cb 100644 --- a/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts +++ b/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_jobs_automated', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nEnqueue an automated job.\n\n`data_sync_all`: Enqueue a job to re-sync all data for a connection. `data_sync_all` has a concurrency limit of 1 job at a time per connection. This means that if this endpoint is called while a job is already in progress for this connection, Finch will return the `job_id` of the job that is currently in progress. Finch allows a fixed window rate limit of 1 forced refresh per hour per connection.\n\n`w4_form_employee_sync`: Enqueues a job for sync W-4 data for a particular individual, identified by `individual_id`. This feature is currently in beta.\n\nThis endpoint is available for *Scale* tier customers as an add-on. To request access to this endpoint, please contact your Finch account manager.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer',\n description: 'The number of allowed refreshes per hour (per hour, fixed window)'\n },\n remaining_refreshes: {\n type: 'integer',\n description: 'The number of remaining refreshes available (per hour, fixed window)'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n retry_at: {\n type: 'string',\n description: 'ISO 8601 timestamp indicating when to retry the request'\n }\n },\n required: [ 'allowed_refreshes',\n 'remaining_refreshes'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nEnqueue an automated job.\n\n`data_sync_all`: Enqueue a job to re-sync all data for a connection. `data_sync_all` has a concurrency limit of 1 job at a time per connection. This means that if this endpoint is called while a job is already in progress for this connection, Finch will return the `job_id` of the job that is currently in progress. Finch allows a fixed window rate limit of 1 forced refresh per hour per connection.\n\n`w4_form_employee_sync`: Enqueues a job for sync W-4 data for a particular individual, identified by `individual_id`. This feature is currently in beta.\n\nThis endpoint is available for *Scale* tier customers as an add-on. To request access to this endpoint, please contact your Finch account manager.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/automated_create_response',\n $defs: {\n automated_create_response: {\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer',\n description: 'The number of allowed refreshes per hour (per hour, fixed window)'\n },\n remaining_refreshes: {\n type: 'integer',\n description: 'The number of remaining refreshes available (per hour, fixed window)'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n retry_at: {\n type: 'string',\n description: 'ISO 8601 timestamp indicating when to retry the request'\n }\n },\n required: [ 'allowed_refreshes',\n 'remaining_refreshes'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', anyOf: [ diff --git a/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts b/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts index a2b7e70d..dde71026 100644 --- a/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts +++ b/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_jobs_automated', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet all automated jobs. Automated jobs are completed by a machine. By default, jobs are sorted in descending order by submission time. For scheduled jobs such as data syncs, only the next scheduled job is shown.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n data: {\n type: 'array',\n items: {\n $ref: '#/$defs/automated_async_job'\n }\n },\n meta: {\n type: 'object',\n properties: {\n quotas: {\n type: 'object',\n description: 'Information about remaining quotas for this connection. Only applicable for customers opted in to use Finch\\'s Data Sync Refresh endpoint (`POST /jobs/automated`). Please contact a Finch representative for more details.',\n properties: {\n data_sync_all: {\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer'\n },\n remaining_refreshes: {\n type: 'integer'\n }\n }\n }\n }\n }\n }\n }\n },\n required: [ 'data',\n 'meta'\n ],\n $defs: {\n automated_async_job: {\n type: 'object',\n title: 'AutomatedAsyncJob',\n properties: {\n completed_at: {\n type: 'string',\n description: 'The datetime the job completed.',\n format: 'date-time'\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the job was created. for scheduled jobs, this will be the initial connection time. For ad-hoc jobs, this will be the time the creation request was received.',\n format: 'date-time'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n params: {\n type: 'object',\n description: 'The input parameters for the job.',\n properties: {\n individual_id: {\n type: 'string',\n description: 'The ID of the individual that the job was completed for.'\n }\n }\n },\n scheduled_at: {\n type: 'string',\n description: 'The datetime a job is scheduled to be run. For scheduled jobs, this datetime can be in the future if the job has not yet been enqueued. For ad-hoc jobs, this field will be null.',\n format: 'date-time'\n },\n started_at: {\n type: 'string',\n description: 'The datetime a job entered into the job queue.',\n format: 'date-time'\n },\n status: {\n type: 'string',\n enum: [ 'pending',\n 'in_progress',\n 'complete',\n 'error',\n 'reauth_error',\n 'permissions_error'\n ]\n },\n type: {\n type: 'string',\n description: 'The type of automated job',\n enum: [ 'data_sync_all',\n 'w4_form_employee_sync'\n ]\n }\n },\n required: [ 'completed_at',\n 'created_at',\n 'job_id',\n 'job_url',\n 'params',\n 'scheduled_at',\n 'started_at',\n 'status',\n 'type'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet all automated jobs. Automated jobs are completed by a machine. By default, jobs are sorted in descending order by submission time. For scheduled jobs such as data syncs, only the next scheduled job is shown.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/automated_list_response',\n $defs: {\n automated_list_response: {\n type: 'object',\n properties: {\n data: {\n type: 'array',\n items: {\n $ref: '#/$defs/automated_async_job'\n }\n },\n meta: {\n type: 'object',\n properties: {\n quotas: {\n type: 'object',\n description: 'Information about remaining quotas for this connection. Only applicable for customers opted in to use Finch\\'s Data Sync Refresh endpoint (`POST /jobs/automated`). Please contact a Finch representative for more details.',\n properties: {\n data_sync_all: {\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer'\n },\n remaining_refreshes: {\n type: 'integer'\n }\n }\n }\n }\n }\n }\n }\n },\n required: [ 'data',\n 'meta'\n ]\n },\n automated_async_job: {\n type: 'object',\n title: 'AutomatedAsyncJob',\n properties: {\n completed_at: {\n type: 'string',\n description: 'The datetime the job completed.',\n format: 'date-time'\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the job was created. for scheduled jobs, this will be the initial connection time. For ad-hoc jobs, this will be the time the creation request was received.',\n format: 'date-time'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n params: {\n type: 'object',\n description: 'The input parameters for the job.',\n properties: {\n individual_id: {\n type: 'string',\n description: 'The ID of the individual that the job was completed for.'\n }\n }\n },\n scheduled_at: {\n type: 'string',\n description: 'The datetime a job is scheduled to be run. For scheduled jobs, this datetime can be in the future if the job has not yet been enqueued. For ad-hoc jobs, this field will be null.',\n format: 'date-time'\n },\n started_at: {\n type: 'string',\n description: 'The datetime a job entered into the job queue.',\n format: 'date-time'\n },\n status: {\n type: 'string',\n enum: [ 'pending',\n 'in_progress',\n 'complete',\n 'error',\n 'reauth_error',\n 'permissions_error'\n ]\n },\n type: {\n type: 'string',\n description: 'The type of automated job',\n enum: [ 'data_sync_all',\n 'w4_form_employee_sync'\n ]\n }\n },\n required: [ 'completed_at',\n 'created_at',\n 'job_id',\n 'job_url',\n 'params',\n 'scheduled_at',\n 'started_at',\n 'status',\n 'type'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts b/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts index de9b9fd0..b0ea09d2 100644 --- a/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts +++ b/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_payroll_pay_groups', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead company pay groups and frequencies\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the pay group'\n },\n name: {\n type: 'string',\n description: 'Name of the pay group'\n },\n pay_frequencies: {\n type: 'array',\n description: 'List of pay frequencies associated with this pay group',\n items: {\n type: 'string',\n enum: [ 'annually',\n 'bi_weekly',\n 'daily',\n 'monthly',\n 'other',\n 'quarterly',\n 'semi_annually',\n 'semi_monthly',\n 'weekly'\n ]\n }\n }\n },\n required: [ 'id',\n 'name',\n 'pay_frequencies'\n ]\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead company pay groups and frequencies\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/pay_group_list_response'\n },\n $defs: {\n pay_group_list_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the pay group'\n },\n name: {\n type: 'string',\n description: 'Name of the pay group'\n },\n pay_frequencies: {\n type: 'array',\n description: 'List of pay frequencies associated with this pay group',\n items: {\n type: 'string',\n enum: [ 'annually',\n 'bi_weekly',\n 'daily',\n 'monthly',\n 'other',\n 'quarterly',\n 'semi_annually',\n 'semi_monthly',\n 'weekly'\n ]\n }\n }\n },\n required: [ 'id',\n 'name',\n 'pay_frequencies'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts b/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts index 9a6079b7..3e64cb3c 100644 --- a/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts +++ b/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'retrieve_payroll_pay_groups', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead information from a single pay group\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the pay group'\n },\n individual_ids: {\n type: 'array',\n items: {\n type: 'string',\n description: 'Finch id (uuidv4) for an individual assigned to this pay group'\n }\n },\n name: {\n type: 'string',\n description: 'Name of the pay group'\n },\n pay_frequencies: {\n type: 'array',\n description: 'List of pay frequencies associated with this pay group',\n items: {\n type: 'string',\n enum: [ 'annually',\n 'bi_weekly',\n 'daily',\n 'monthly',\n 'other',\n 'quarterly',\n 'semi_annually',\n 'semi_monthly',\n 'weekly'\n ]\n }\n }\n },\n required: [ 'id',\n 'individual_ids',\n 'name',\n 'pay_frequencies'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead information from a single pay group\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/pay_group_retrieve_response',\n $defs: {\n pay_group_retrieve_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the pay group'\n },\n individual_ids: {\n type: 'array',\n items: {\n type: 'string',\n description: 'Finch id (uuidv4) for an individual assigned to this pay group'\n }\n },\n name: {\n type: 'string',\n description: 'Name of the pay group'\n },\n pay_frequencies: {\n type: 'array',\n description: 'List of pay frequencies associated with this pay group',\n items: {\n type: 'string',\n enum: [ 'annually',\n 'bi_weekly',\n 'daily',\n 'monthly',\n 'other',\n 'quarterly',\n 'semi_annually',\n 'semi_monthly',\n 'weekly'\n ]\n }\n }\n },\n required: [ 'id',\n 'individual_ids',\n 'name',\n 'pay_frequencies'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/providers/list-providers.ts b/packages/mcp-server/src/tools/providers/list-providers.ts index 9be1cb45..70e47a5d 100644 --- a/packages/mcp-server/src/tools/providers/list-providers.ts +++ b/packages/mcp-server/src/tools/providers/list-providers.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_providers', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nReturn details on all available payroll and HR systems.\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The id of the payroll provider used in Connect.'\n },\n display_name: {\n type: 'string',\n description: 'The display name of the payroll provider.'\n },\n products: {\n type: 'array',\n description: 'The list of Finch products supported on this payroll provider.',\n items: {\n type: 'string'\n }\n },\n authentication_methods: {\n type: 'array',\n description: 'The authentication methods supported by the provider.',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth',\n 'api'\n ]\n },\n benefits_support: {\n type: 'object',\n description: 'The supported benefit types and their configurations',\n additionalProperties: true\n },\n supported_fields: {\n type: 'object',\n description: 'The supported fields for each Finch product',\n additionalProperties: true\n }\n },\n required: [ 'type'\n ]\n }\n },\n beta: {\n type: 'boolean',\n description: '`true` if the integration is in a beta state, `false` otherwise'\n },\n icon: {\n type: 'string',\n description: 'The url to the official icon of the payroll provider.'\n },\n logo: {\n type: 'string',\n description: 'The url to the official logo of the payroll provider.'\n },\n manual: {\n type: 'boolean',\n description: '[DEPRECATED] Whether the Finch integration with this provider uses the Assisted Connect Flow by default. This field is now deprecated. Please check for a `type` of `assisted` in the `authentication_methods` field instead.'\n },\n mfa_required: {\n type: 'boolean',\n description: 'whether MFA is required for the provider.'\n },\n primary_color: {\n type: 'string',\n description: 'The hex code for the primary color of the payroll provider.'\n }\n },\n required: [ 'id',\n 'display_name',\n 'products'\n ]\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nReturn details on all available payroll and HR systems.\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/provider_list_response'\n },\n $defs: {\n provider_list_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The id of the payroll provider used in Connect.'\n },\n display_name: {\n type: 'string',\n description: 'The display name of the payroll provider.'\n },\n products: {\n type: 'array',\n description: 'The list of Finch products supported on this payroll provider.',\n items: {\n type: 'string'\n }\n },\n authentication_methods: {\n type: 'array',\n description: 'The authentication methods supported by the provider.',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth',\n 'api'\n ]\n },\n benefits_support: {\n type: 'object',\n description: 'The supported benefit types and their configurations',\n additionalProperties: true\n },\n supported_fields: {\n type: 'object',\n description: 'The supported fields for each Finch product',\n additionalProperties: true\n }\n },\n required: [ 'type'\n ]\n }\n },\n beta: {\n type: 'boolean',\n description: '`true` if the integration is in a beta state, `false` otherwise'\n },\n icon: {\n type: 'string',\n description: 'The url to the official icon of the payroll provider.'\n },\n logo: {\n type: 'string',\n description: 'The url to the official logo of the payroll provider.'\n },\n manual: {\n type: 'boolean',\n description: '[DEPRECATED] Whether the Finch integration with this provider uses the Assisted Connect Flow by default. This field is now deprecated. Please check for a `type` of `assisted` in the `authentication_methods` field instead.'\n },\n mfa_required: {\n type: 'boolean',\n description: 'whether MFA is required for the provider.'\n },\n primary_color: {\n type: 'string',\n description: 'The hex code for the primary color of the payroll provider.'\n }\n },\n required: [ 'id',\n 'display_name',\n 'products'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts b/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts index a104c4d3..4407f890 100644 --- a/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts +++ b/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'forward_request_forwarding', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nThe Forward API allows you to make direct requests to an employment system. If Finch's unified API\ndoesn't have a data model that cleanly fits your needs, then Forward allows you to push or pull\ndata models directly against an integration's API.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n request: {\n type: 'object',\n description: 'An object containing details of your original forwarded request, for your ease of reference.',\n properties: {\n method: {\n type: 'string',\n description: 'The HTTP method that was specified for the forwarded request. Valid values include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`.'\n },\n route: {\n type: 'string',\n description: 'The URL route path that was specified for the forwarded request.'\n },\n data: {\n anyOf: [ {\n type: 'string'\n },\n {\n type: 'object',\n additionalProperties: true\n }\n ],\n description: 'The body that was specified for the forwarded request.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers that were specified for the forwarded request.',\n additionalProperties: true\n },\n params: {\n type: 'object',\n description: 'The query parameters that were specified for the forwarded request.',\n additionalProperties: true\n }\n },\n required: [ 'method',\n 'route'\n ]\n },\n statusCode: {\n type: 'integer',\n description: 'The HTTP status code of the forwarded request\\'s response, exactly received from the underlying integration\\'s API. This value will be returned as an integer.'\n },\n data: {\n type: 'string',\n description: 'A string representation of the HTTP response body of the forwarded request\\'s response received from the underlying integration\\'s API. This field may be null in the case where the upstream system\\'s response is empty.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers of the forwarded request\\'s response, exactly as received from the underlying integration\\'s API.',\n additionalProperties: true\n }\n },\n required: [ 'request',\n 'statusCode'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nThe Forward API allows you to make direct requests to an employment system. If Finch's unified API\ndoesn't have a data model that cleanly fits your needs, then Forward allows you to push or pull\ndata models directly against an integration's API.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/request_forwarding_forward_response',\n $defs: {\n request_forwarding_forward_response: {\n type: 'object',\n properties: {\n request: {\n type: 'object',\n description: 'An object containing details of your original forwarded request, for your ease of reference.',\n properties: {\n method: {\n type: 'string',\n description: 'The HTTP method that was specified for the forwarded request. Valid values include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`.'\n },\n route: {\n type: 'string',\n description: 'The URL route path that was specified for the forwarded request.'\n },\n data: {\n anyOf: [ {\n type: 'string'\n },\n {\n type: 'object',\n additionalProperties: true\n }\n ],\n description: 'The body that was specified for the forwarded request.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers that were specified for the forwarded request.',\n additionalProperties: true\n },\n params: {\n type: 'object',\n description: 'The query parameters that were specified for the forwarded request.',\n additionalProperties: true\n }\n },\n required: [ 'method',\n 'route'\n ]\n },\n statusCode: {\n type: 'integer',\n description: 'The HTTP status code of the forwarded request\\'s response, exactly received from the underlying integration\\'s API. This value will be returned as an integer.'\n },\n data: {\n type: 'string',\n description: 'A string representation of the HTTP response body of the forwarded request\\'s response received from the underlying integration\\'s API. This field may be null in the case where the upstream system\\'s response is empty.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers of the forwarded request\\'s response, exactly as received from the underlying integration\\'s API.',\n additionalProperties: true\n }\n },\n required: [ 'request',\n 'statusCode'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts b/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts index 746321db..e46a0642 100644 --- a/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts +++ b/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'update_sandbox_company', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate a sandbox company's data\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n accounts: {\n type: 'array',\n description: 'An array of bank account objects associated with the payroll/HRIS system.',\n items: {\n type: 'object',\n properties: {\n account_name: {\n type: 'string',\n description: 'The name of the bank associated in the payroll/HRIS system.'\n },\n account_number: {\n type: 'string',\n description: '10-12 digit number to specify the bank account'\n },\n account_type: {\n type: 'string',\n description: 'The type of bank account.',\n enum: [ 'checking',\n 'savings'\n ]\n },\n institution_name: {\n type: 'string',\n description: 'Name of the banking institution.'\n },\n routing_number: {\n type: 'string',\n description: 'A nine-digit code that\\'s based on the U.S. Bank location where your account was opened.'\n }\n }\n }\n },\n departments: {\n type: 'array',\n description: 'The array of company departments.',\n items: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The department name.'\n },\n parent: {\n type: 'object',\n description: 'The parent department, if present.',\n properties: {\n name: {\n type: 'string',\n description: 'The parent department\\'s name.'\n }\n }\n }\n }\n }\n },\n ein: {\n type: 'string',\n description: 'The employer identification number.'\n },\n entity: {\n type: 'object',\n description: 'The entity type object.',\n properties: {\n subtype: {\n type: 'string',\n description: 'The tax payer subtype of the company.',\n enum: [ 's_corporation',\n 'c_corporation',\n 'b_corporation'\n ]\n },\n type: {\n type: 'string',\n description: 'The tax payer type of the company.',\n enum: [ 'llc',\n 'lp',\n 'corporation',\n 'sole_proprietor',\n 'non_profit',\n 'partnership',\n 'cooperative'\n ]\n }\n }\n },\n legal_name: {\n type: 'string',\n description: 'The legal name of the company.'\n },\n locations: {\n type: 'array',\n items: {\n $ref: '#/$defs/location'\n }\n },\n primary_email: {\n type: 'string',\n description: 'The email of the main administrator on the account.'\n },\n primary_phone_number: {\n type: 'string',\n description: 'The phone number of the main administrator on the account. Format: E.164, with extension where applicable, e.g. `+NNNNNNNNNNN xExtension`'\n }\n },\n required: [ 'accounts',\n 'departments',\n 'ein',\n 'entity',\n 'legal_name',\n 'locations',\n 'primary_email',\n 'primary_phone_number'\n ],\n $defs: {\n location: {\n type: 'object',\n title: 'Location',\n properties: {\n city: {\n type: 'string',\n description: 'City, district, suburb, town, or village.'\n },\n country: {\n type: 'string',\n description: 'The 2-letter ISO 3166 country code.'\n },\n line1: {\n type: 'string',\n description: 'Street address or PO box.'\n },\n line2: {\n type: 'string',\n description: 'Apartment, suite, unit, or building.'\n },\n postal_code: {\n type: 'string',\n description: 'The postal code or zip code.'\n },\n state: {\n type: 'string',\n description: 'The state code.'\n },\n name: {\n type: 'string'\n },\n source_id: {\n type: 'string'\n }\n },\n required: [ 'city',\n 'country',\n 'line1',\n 'line2',\n 'postal_code',\n 'state'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate a sandbox company's data\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/company_update_response',\n $defs: {\n company_update_response: {\n type: 'object',\n properties: {\n accounts: {\n type: 'array',\n description: 'An array of bank account objects associated with the payroll/HRIS system.',\n items: {\n type: 'object',\n properties: {\n account_name: {\n type: 'string',\n description: 'The name of the bank associated in the payroll/HRIS system.'\n },\n account_number: {\n type: 'string',\n description: '10-12 digit number to specify the bank account'\n },\n account_type: {\n type: 'string',\n description: 'The type of bank account.',\n enum: [ 'checking',\n 'savings'\n ]\n },\n institution_name: {\n type: 'string',\n description: 'Name of the banking institution.'\n },\n routing_number: {\n type: 'string',\n description: 'A nine-digit code that\\'s based on the U.S. Bank location where your account was opened.'\n }\n }\n }\n },\n departments: {\n type: 'array',\n description: 'The array of company departments.',\n items: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The department name.'\n },\n parent: {\n type: 'object',\n description: 'The parent department, if present.',\n properties: {\n name: {\n type: 'string',\n description: 'The parent department\\'s name.'\n }\n }\n }\n }\n }\n },\n ein: {\n type: 'string',\n description: 'The employer identification number.'\n },\n entity: {\n type: 'object',\n description: 'The entity type object.',\n properties: {\n subtype: {\n type: 'string',\n description: 'The tax payer subtype of the company.',\n enum: [ 's_corporation',\n 'c_corporation',\n 'b_corporation'\n ]\n },\n type: {\n type: 'string',\n description: 'The tax payer type of the company.',\n enum: [ 'llc',\n 'lp',\n 'corporation',\n 'sole_proprietor',\n 'non_profit',\n 'partnership',\n 'cooperative'\n ]\n }\n }\n },\n legal_name: {\n type: 'string',\n description: 'The legal name of the company.'\n },\n locations: {\n type: 'array',\n items: {\n $ref: '#/$defs/location'\n }\n },\n primary_email: {\n type: 'string',\n description: 'The email of the main administrator on the account.'\n },\n primary_phone_number: {\n type: 'string',\n description: 'The phone number of the main administrator on the account. Format: E.164, with extension where applicable, e.g. `+NNNNNNNNNNN xExtension`'\n }\n },\n required: [ 'accounts',\n 'departments',\n 'ein',\n 'entity',\n 'legal_name',\n 'locations',\n 'primary_email',\n 'primary_phone_number'\n ]\n },\n location: {\n type: 'object',\n title: 'Location',\n properties: {\n city: {\n type: 'string',\n description: 'City, district, suburb, town, or village.'\n },\n country: {\n type: 'string',\n description: 'The 2-letter ISO 3166 country code.'\n },\n line1: {\n type: 'string',\n description: 'Street address or PO box.'\n },\n line2: {\n type: 'string',\n description: 'Apartment, suite, unit, or building.'\n },\n postal_code: {\n type: 'string',\n description: 'The postal code or zip code.'\n },\n state: {\n type: 'string',\n description: 'The state code.'\n },\n name: {\n type: 'string'\n },\n source_id: {\n type: 'string'\n }\n },\n required: [ 'city',\n 'country',\n 'line1',\n 'line2',\n 'postal_code',\n 'state'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts b/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts index dd0a68ef..e330b866 100644 --- a/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts +++ b/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_connections_sandbox_accounts', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new account for an existing connection (company/provider pair)\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n access_token: {\n type: 'string'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n }\n },\n required: [ 'access_token',\n 'account_id',\n 'authentication_type',\n 'company_id',\n 'connection_id',\n 'products',\n 'provider_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new account for an existing connection (company/provider pair)\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/account_create_response',\n $defs: {\n account_create_response: {\n type: 'object',\n properties: {\n access_token: {\n type: 'string'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n }\n },\n required: [ 'access_token',\n 'account_id',\n 'authentication_type',\n 'company_id',\n 'connection_id',\n 'products',\n 'provider_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts b/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts index 5c404d61..0db70e8e 100644 --- a/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts +++ b/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'update_connections_sandbox_accounts', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate an existing sandbox account. Change the connection status to understand how the Finch API responds.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n }\n },\n required: [ 'account_id',\n 'authentication_type',\n 'company_id',\n 'products',\n 'provider_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate an existing sandbox account. Change the connection status to understand how the Finch API responds.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/account_update_response',\n $defs: {\n account_update_response: {\n type: 'object',\n properties: {\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n }\n },\n required: [ 'account_id',\n 'authentication_type',\n 'company_id',\n 'products',\n 'provider_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts b/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts index 27f4cd8d..a87e34ff 100644 --- a/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts +++ b/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_sandbox_connections', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new connection (new company/provider pair) with a new account\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n access_token: {\n type: 'string'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n token_type: {\n type: 'string'\n }\n },\n required: [ 'access_token',\n 'account_id',\n 'authentication_type',\n 'company_id',\n 'connection_id',\n 'products',\n 'provider_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new connection (new company/provider pair) with a new account\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/connection_create_response',\n $defs: {\n connection_create_response: {\n type: 'object',\n properties: {\n access_token: {\n type: 'string'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n token_type: {\n type: 'string'\n }\n },\n required: [ 'access_token',\n 'account_id',\n 'authentication_type',\n 'company_id',\n 'connection_id',\n 'products',\n 'provider_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts b/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts index ec52b617..d0b01c8d 100644 --- a/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts +++ b/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_sandbox_directory', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nAdd new individuals to a sandbox company\n\n# Response Schema\n```json\n{\n type: 'array',\n description: 'The individuals which were created',\n items: {\n type: 'object',\n additionalProperties: true\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nAdd new individuals to a sandbox company\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/directory_create_response',\n $defs: {\n directory_create_response: {\n type: 'array',\n description: 'The individuals which were created',\n items: {\n type: 'object',\n additionalProperties: true\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts b/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts index 6735cc5b..6e57f5dd 100644 --- a/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts +++ b/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'update_sandbox_individual', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate sandbox individual\n\n# Response Schema\n```json\n{\n type: 'object',\n title: 'Individual',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n },\n dob: {\n type: 'string',\n title: 'Date'\n },\n emails: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n type: 'string'\n },\n type: {\n type: 'string',\n enum: [ 'work',\n 'personal'\n ]\n }\n }\n }\n },\n encrypted_ssn: {\n type: 'string',\n description: 'Social Security Number of the individual in **encrypted** format. This field is only available with the `ssn` scope enabled and the `options: { include: [\\'ssn\\'] }` param set in the body.'\n },\n ethnicity: {\n type: 'string',\n description: 'The EEOC-defined ethnicity of the individual.',\n enum: [ 'asian',\n 'white',\n 'black_or_african_american',\n 'native_hawaiian_or_pacific_islander',\n 'american_indian_or_alaska_native',\n 'hispanic_or_latino',\n 'two_or_more_races',\n 'decline_to_specify'\n ]\n },\n first_name: {\n type: 'string',\n description: 'The legal first name of the individual.'\n },\n gender: {\n type: 'string',\n description: 'The gender of the individual.',\n enum: [ 'female',\n 'male',\n 'other',\n 'decline_to_specify'\n ]\n },\n last_name: {\n type: 'string',\n description: 'The legal last name of the individual.'\n },\n middle_name: {\n type: 'string',\n description: 'The legal middle name of the individual.'\n },\n phone_numbers: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n type: 'string'\n },\n type: {\n type: 'string',\n enum: [ 'work',\n 'personal'\n ]\n }\n }\n }\n },\n preferred_name: {\n type: 'string',\n description: 'The preferred name of the individual.'\n },\n residence: {\n $ref: '#/$defs/location'\n },\n ssn: {\n type: 'string',\n description: 'Social Security Number of the individual. This field is only available with the `ssn` scope enabled and the `options: { include: [\\'ssn\\'] }` param set in the body. [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).'\n }\n },\n $defs: {\n location: {\n type: 'object',\n title: 'Location',\n properties: {\n city: {\n type: 'string',\n description: 'City, district, suburb, town, or village.'\n },\n country: {\n type: 'string',\n description: 'The 2-letter ISO 3166 country code.'\n },\n line1: {\n type: 'string',\n description: 'Street address or PO box.'\n },\n line2: {\n type: 'string',\n description: 'Apartment, suite, unit, or building.'\n },\n postal_code: {\n type: 'string',\n description: 'The postal code or zip code.'\n },\n state: {\n type: 'string',\n description: 'The state code.'\n },\n name: {\n type: 'string'\n },\n source_id: {\n type: 'string'\n }\n },\n required: [ 'city',\n 'country',\n 'line1',\n 'line2',\n 'postal_code',\n 'state'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate sandbox individual\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/individual_update_response',\n $defs: {\n individual_update_response: {\n type: 'object',\n title: 'Individual',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n },\n dob: {\n type: 'string',\n title: 'Date'\n },\n emails: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n type: 'string'\n },\n type: {\n type: 'string',\n enum: [ 'work',\n 'personal'\n ]\n }\n }\n }\n },\n encrypted_ssn: {\n type: 'string',\n description: 'Social Security Number of the individual in **encrypted** format. This field is only available with the `ssn` scope enabled and the `options: { include: [\\'ssn\\'] }` param set in the body.'\n },\n ethnicity: {\n type: 'string',\n description: 'The EEOC-defined ethnicity of the individual.',\n enum: [ 'asian',\n 'white',\n 'black_or_african_american',\n 'native_hawaiian_or_pacific_islander',\n 'american_indian_or_alaska_native',\n 'hispanic_or_latino',\n 'two_or_more_races',\n 'decline_to_specify'\n ]\n },\n first_name: {\n type: 'string',\n description: 'The legal first name of the individual.'\n },\n gender: {\n type: 'string',\n description: 'The gender of the individual.',\n enum: [ 'female',\n 'male',\n 'other',\n 'decline_to_specify'\n ]\n },\n last_name: {\n type: 'string',\n description: 'The legal last name of the individual.'\n },\n middle_name: {\n type: 'string',\n description: 'The legal middle name of the individual.'\n },\n phone_numbers: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n type: 'string'\n },\n type: {\n type: 'string',\n enum: [ 'work',\n 'personal'\n ]\n }\n }\n }\n },\n preferred_name: {\n type: 'string',\n description: 'The preferred name of the individual.'\n },\n residence: {\n $ref: '#/$defs/location'\n },\n ssn: {\n type: 'string',\n description: 'Social Security Number of the individual. This field is only available with the `ssn` scope enabled and the `options: { include: [\\'ssn\\'] }` param set in the body. [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).'\n }\n }\n },\n location: {\n type: 'object',\n title: 'Location',\n properties: {\n city: {\n type: 'string',\n description: 'City, district, suburb, town, or village.'\n },\n country: {\n type: 'string',\n description: 'The 2-letter ISO 3166 country code.'\n },\n line1: {\n type: 'string',\n description: 'Street address or PO box.'\n },\n line2: {\n type: 'string',\n description: 'Apartment, suite, unit, or building.'\n },\n postal_code: {\n type: 'string',\n description: 'The postal code or zip code.'\n },\n state: {\n type: 'string',\n description: 'The state code.'\n },\n name: {\n type: 'string'\n },\n source_id: {\n type: 'string'\n }\n },\n required: [ 'city',\n 'country',\n 'line1',\n 'line2',\n 'postal_code',\n 'state'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts b/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts index c3dadac8..c91dcfcd 100644 --- a/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts +++ b/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'retrieve_jobs_sandbox_configuration', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet configurations for sandbox jobs\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/sandbox_job_configuration'\n },\n $defs: {\n sandbox_job_configuration: {\n type: 'object',\n title: 'SandboxJobConfiguration',\n properties: {\n completion_status: {\n type: 'string',\n enum: [ 'complete',\n 'reauth_error',\n 'permissions_error',\n 'error'\n ]\n },\n type: {\n type: 'string',\n enum: [ 'data_sync_all'\n ]\n }\n },\n required: [ 'completion_status',\n 'type'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet configurations for sandbox jobs\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/configuration_retrieve_response',\n $defs: {\n configuration_retrieve_response: {\n type: 'array',\n items: {\n $ref: '#/$defs/sandbox_job_configuration'\n }\n },\n sandbox_job_configuration: {\n type: 'object',\n title: 'SandboxJobConfiguration',\n properties: {\n completion_status: {\n type: 'string',\n enum: [ 'complete',\n 'reauth_error',\n 'permissions_error',\n 'error'\n ]\n },\n type: {\n type: 'string',\n enum: [ 'data_sync_all'\n ]\n }\n },\n required: [ 'completion_status',\n 'type'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts b/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts index 509929fc..897d9b88 100644 --- a/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts +++ b/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_sandbox_jobs', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nEnqueue a new sandbox job\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer',\n description: 'The number of allowed refreshes per hour (per hour, fixed window)'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n remaining_refreshes: {\n type: 'integer',\n description: 'The number of remaining refreshes available (per hour, fixed window)'\n }\n },\n required: [ 'allowed_refreshes',\n 'job_id',\n 'job_url',\n 'remaining_refreshes'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nEnqueue a new sandbox job\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/job_create_response',\n $defs: {\n job_create_response: {\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer',\n description: 'The number of allowed refreshes per hour (per hour, fixed window)'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n remaining_refreshes: {\n type: 'integer',\n description: 'The number of remaining refreshes available (per hour, fixed window)'\n }\n },\n required: [ 'allowed_refreshes',\n 'job_id',\n 'job_url',\n 'remaining_refreshes'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts b/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts index 3e10eb31..fcfb613d 100644 --- a/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts +++ b/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_sandbox_payment', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nAdd a new sandbox payment\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n pay_date: {\n type: 'string',\n description: 'The date of the payment.'\n },\n payment_id: {\n type: 'string',\n description: 'The ID of the payment.'\n }\n },\n required: [ 'pay_date',\n 'payment_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nAdd a new sandbox payment\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/payment_create_response',\n $defs: {\n payment_create_response: {\n type: 'object',\n properties: {\n pay_date: {\n type: 'string',\n description: 'The date of the payment.'\n },\n payment_id: {\n type: 'string',\n description: 'The ID of the payment.'\n }\n },\n required: [ 'pay_date',\n 'payment_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { From 6749ac47c9119c49a17b118d7d7cedd93232434d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:58:14 +0000 Subject: [PATCH 43/47] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 845aada6..cbb8c1b5 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-df44cda9b18320f8a8117d5c8dfa02ebd6739fc77fc87eb284748c987a7412a4.yml -openapi_spec_hash: 69524ddfedf3c4492e77826561f7c7d8 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bfcb61384672f485be2ee4e2ae2938ef8c57c063c2ea5d0e7890e68098300579.yml +openapi_spec_hash: 5d75581b91b95d16f0fae017a36b4ea9 config_hash: 6d3585c0032e08d723d077d660fc8448 From 99a20c267f645658d3928f269f5da7a33b287d17 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:59:25 +0000 Subject: [PATCH 44/47] feat(api): api update --- .stats.yml | 4 +- .../hris/documents/list-hris-documents.ts | 2 +- .../hris/documents/retreive-hris-documents.ts | 2 +- src/resources/hris/documents.ts | 48 +++++++++---------- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.stats.yml b/.stats.yml index cbb8c1b5..99ac1e56 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bfcb61384672f485be2ee4e2ae2938ef8c57c063c2ea5d0e7890e68098300579.yml -openapi_spec_hash: 5d75581b91b95d16f0fae017a36b4ea9 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-199a2fd8b7387b0648e88b5942a8248895373a561aff663389982073e55c8eb5.yml +openapi_spec_hash: 7415c1faca5f2e873824893b140650f1 config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts index e8d57239..94ad8649 100644 --- a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_hris_documents', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve a list of company-wide documents.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_list_response',\n $defs: {\n document_list_response: {\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n items: {\n $ref: '#/$defs/document_response'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'documents',\n 'paging'\n ]\n },\n document_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch id for the document.'\n },\n individual_id: {\n type: 'string',\n description: 'The ID of the individual associated with the document. This will be null for employer-level documents.'\n },\n type: {\n type: 'string',\n description: 'The type of document.',\n enum: [ 'w4_2020',\n 'w4_2005'\n ]\n },\n url: {\n type: 'string',\n description: 'A URL to access the document. Format: `https://api.tryfinch.com/employer/documents/:document_id`.'\n },\n year: {\n type: 'number',\n description: 'The year the document applies to, if available.'\n }\n }\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve a list of company-wide documents.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_list_response',\n $defs: {\n document_list_response: {\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n items: {\n $ref: '#/$defs/document_response'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'documents',\n 'paging'\n ]\n },\n document_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch id for the document.'\n },\n individual_id: {\n type: 'string',\n description: 'The ID of the individual associated with the document. This will be null for employer-level documents.'\n },\n type: {\n type: 'string',\n description: 'The type of document.',\n enum: [ 'w4_2020',\n 'w4_2005'\n ]\n },\n url: {\n type: 'string',\n description: 'A URL to access the document. Format: `https://api.tryfinch.com/employer/documents/:document_id`.'\n },\n year: {\n type: 'number',\n description: 'The year the document applies to, if available.'\n }\n },\n required: [ 'id',\n 'individual_id',\n 'type',\n 'url',\n 'year'\n ]\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts index f75adb83..cb7fd425 100644 --- a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'retreive_hris_documents', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve details of a specific document by its ID.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_retreive_response',\n $defs: {\n document_retreive_response: {\n anyOf: [ {\n $ref: '#/$defs/w42020'\n },\n {\n $ref: '#/$defs/w42005'\n }\n ],\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.'\n },\n w42020: {\n type: 'object',\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2020 W4 form.',\n properties: {\n amount_for_other_dependents: {\n type: 'integer',\n description: 'Amount claimed for dependents other than qualifying children under 17 (in cents).'\n },\n amount_for_qualifying_children_under_17: {\n type: 'integer',\n description: 'Amount claimed for dependents under 17 years old (in cents).'\n },\n deductions: {\n type: 'integer',\n description: 'Deductible expenses (in cents).'\n },\n extra_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'head_of_household',\n 'married_filing_jointly_or_qualifying_surviving_spouse',\n 'single_or_married_filing_separately'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this document.'\n },\n other_income: {\n type: 'integer',\n description: 'Additional income from sources outside of primary employment (in cents).'\n },\n total_claim_dependent_and_other_credits: {\n type: 'integer',\n description: 'Total amount claimed for dependents and other credits (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2020 W4 form.',\n enum: [ 'w4_2020'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n },\n w42005: {\n type: 'object',\n description: 'A 2005 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2005 W4 form.',\n properties: {\n additional_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n exemption: {\n type: 'string',\n description: 'Indicates exemption status from federal tax withholding.',\n enum: [ 'exempt',\n 'non_exempt'\n ]\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'married',\n 'married_but_withhold_at_higher_single_rate',\n 'single'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this 2005 W4 form.'\n },\n total_number_of_allowances: {\n type: 'integer',\n description: 'Total number of allowances claimed (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2005 W4 form.',\n enum: [ 'w4_2005'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve details of a specific document by its ID.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_retreive_response',\n $defs: {\n document_retreive_response: {\n anyOf: [ {\n $ref: '#/$defs/w42020'\n },\n {\n $ref: '#/$defs/w42005'\n }\n ],\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.'\n },\n w42020: {\n type: 'object',\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2020 W4 form.',\n properties: {\n amount_for_other_dependents: {\n type: 'integer',\n description: 'Amount claimed for dependents other than qualifying children under 17 (in cents).'\n },\n amount_for_qualifying_children_under_17: {\n type: 'integer',\n description: 'Amount claimed for dependents under 17 years old (in cents).'\n },\n deductions: {\n type: 'integer',\n description: 'Deductible expenses (in cents).'\n },\n extra_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'head_of_household',\n 'married_filing_jointly_or_qualifying_surviving_spouse',\n 'single_or_married_filing_separately'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this document.'\n },\n other_income: {\n type: 'integer',\n description: 'Additional income from sources outside of primary employment (in cents).'\n },\n total_claim_dependent_and_other_credits: {\n type: 'integer',\n description: 'Total amount claimed for dependents and other credits (in cents).'\n }\n },\n required: [ 'amount_for_other_dependents',\n 'amount_for_qualifying_children_under_17',\n 'deductions',\n 'extra_withholding',\n 'filing_status',\n 'individual_id',\n 'other_income',\n 'total_claim_dependent_and_other_credits'\n ]\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2020 W4 form.',\n enum: [ 'w4_2020'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n },\n required: [ 'data',\n 'type',\n 'year'\n ]\n },\n w42005: {\n type: 'object',\n description: 'A 2005 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2005 W4 form.',\n properties: {\n additional_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n exemption: {\n type: 'string',\n description: 'Indicates exemption status from federal tax withholding.',\n enum: [ 'exempt',\n 'non_exempt'\n ]\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'married',\n 'married_but_withhold_at_higher_single_rate',\n 'single'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this 2005 W4 form.'\n },\n total_number_of_allowances: {\n type: 'integer',\n description: 'Total number of allowances claimed (in cents).'\n }\n },\n required: [ 'additional_withholding',\n 'exemption',\n 'filing_status',\n 'individual_id',\n 'total_number_of_allowances'\n ]\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2005 W4 form.',\n enum: [ 'w4_2005'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n },\n required: [ 'data',\n 'type',\n 'year'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/src/resources/hris/documents.ts b/src/resources/hris/documents.ts index b9b3396f..6d6e3b6b 100644 --- a/src/resources/hris/documents.ts +++ b/src/resources/hris/documents.ts @@ -47,29 +47,29 @@ export interface DocumentResponse { /** * A stable Finch id for the document. */ - id?: string; + id: string; /** * The ID of the individual associated with the document. This will be null for * employer-level documents. */ - individual_id?: string | null; + individual_id: string | null; /** * The type of document. */ - type?: 'w4_2020' | 'w4_2005'; + type: 'w4_2020' | 'w4_2005'; /** * A URL to access the document. Format: * `https://api.tryfinch.com/employer/documents/:document_id`. */ - url?: string; + url: string; /** * The year the document applies to, if available. */ - year?: number | null; + year: number; } /** @@ -80,17 +80,17 @@ export interface W42005 { /** * Detailed information specific to the 2005 W4 form. */ - data?: W42005.Data; + data: W42005.Data; /** * Specifies the form type, indicating that this document is a 2005 W4 form. */ - type?: 'w4_2005'; + type: 'w4_2005'; /** * The tax year this W4 document applies to. */ - year?: number | null; + year: number; } export namespace W42005 { @@ -101,27 +101,27 @@ export namespace W42005 { /** * Additional withholding amount (in cents). */ - additional_withholding?: number | null; + additional_withholding: number; /** * Indicates exemption status from federal tax withholding. */ - exemption?: 'exempt' | 'non_exempt'; + exemption: 'exempt' | 'non_exempt' | null; /** * The individual's filing status for tax purposes. */ - filing_status?: 'married' | 'married_but_withhold_at_higher_single_rate' | 'single' | null; + filing_status: 'married' | 'married_but_withhold_at_higher_single_rate' | 'single' | null; /** * The unique identifier for the individual associated with this 2005 W4 form. */ - individual_id?: string; + individual_id: string; /** * Total number of allowances claimed (in cents). */ - total_number_of_allowances?: number | null; + total_number_of_allowances: number; } } @@ -133,17 +133,17 @@ export interface W42020 { /** * Detailed information specific to the 2020 W4 form. */ - data?: W42020.Data; + data: W42020.Data; /** * Specifies the form type, indicating that this document is a 2020 W4 form. */ - type?: 'w4_2020'; + type: 'w4_2020'; /** * The tax year this W4 document applies to. */ - year?: number | null; + year: number; } export namespace W42020 { @@ -155,27 +155,27 @@ export namespace W42020 { * Amount claimed for dependents other than qualifying children under 17 (in * cents). */ - amount_for_other_dependents?: number | null; + amount_for_other_dependents: number; /** * Amount claimed for dependents under 17 years old (in cents). */ - amount_for_qualifying_children_under_17?: number | null; + amount_for_qualifying_children_under_17: number; /** * Deductible expenses (in cents). */ - deductions?: number | null; + deductions: number; /** * Additional withholding amount (in cents). */ - extra_withholding?: number | null; + extra_withholding: number; /** * The individual's filing status for tax purposes. */ - filing_status?: + filing_status: | 'head_of_household' | 'married_filing_jointly_or_qualifying_surviving_spouse' | 'single_or_married_filing_separately' @@ -184,17 +184,17 @@ export namespace W42020 { /** * The unique identifier for the individual associated with this document. */ - individual_id?: string; + individual_id: string; /** * Additional income from sources outside of primary employment (in cents). */ - other_income?: number | null; + other_income: number; /** * Total amount claimed for dependents and other credits (in cents). */ - total_claim_dependent_and_other_credits?: number | null; + total_claim_dependent_and_other_credits: number; } } From b331c108e3912c503e4cc8393587bac2a927f4f7 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 15:10:51 +0000 Subject: [PATCH 45/47] feat(api): api update --- .stats.yml | 4 +- .../connect/sessions/new-connect-sessions.ts | 67 ++++++++++----- .../reauthenticate-connect-sessions.ts | 10 +-- src/resources/connect/sessions.ts | 85 +++++++++++++------ tests/api-resources/connect/sessions.test.ts | 21 +++-- 5 files changed, 126 insertions(+), 61 deletions(-) diff --git a/.stats.yml b/.stats.yml index 99ac1e56..0751652c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-199a2fd8b7387b0648e88b5942a8248895373a561aff663389982073e55c8eb5.yml -openapi_spec_hash: 7415c1faca5f2e873824893b140650f1 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-5f9c0770c8be0fa779cbb640c25043cc1d5514236b8d0d6791c822dd7e00ffe6.yml +openapi_spec_hash: d8df70c1dc1ba1ebcd572c1fab58eec6 config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts b/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts index 8f76f54c..0333a867 100644 --- a/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts +++ b/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts @@ -22,59 +22,70 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { - customer_id: { + customer_email: { type: 'string', + description: 'Email address of the customer', }, - customer_name: { + customer_id: { type: 'string', + description: 'Unique identifier for the customer', }, - products: { - type: 'array', - items: { - type: 'string', - description: 'The Finch products that can be requested during the Connect flow.', - enum: [ - 'company', - 'directory', - 'individual', - 'employment', - 'payment', - 'pay_statement', - 'benefits', - 'ssn', - 'deduction', - 'documents', - ], - }, - }, - customer_email: { + customer_name: { type: 'string', + description: 'Name of the customer', }, integration: { type: 'object', + description: 'Integration configuration for the connect session', properties: { auth_method: { type: 'string', + description: 'The authentication method to use', enum: ['assisted', 'credential', 'oauth', 'api_token'], }, provider: { type: 'string', + description: 'The provider to integrate with', }, }, + required: ['auth_method', 'provider'], }, manual: { type: 'boolean', + description: 'Enable manual authentication mode', }, minutes_to_expire: { type: 'number', description: 'The number of minutes until the session expires (defaults to 129,600, which is 90 days)', }, + products: { + type: 'array', + description: 'The Finch products to request access to', + items: { + type: 'string', + description: 'The Finch products that can be requested during the Connect flow.', + enum: [ + 'benefits', + 'company', + 'deduction', + 'directory', + 'documents', + 'employment', + 'individual', + 'payment', + 'pay_statement', + 'ssn', + ], + }, + }, redirect_uri: { type: 'string', + description: 'The URI to redirect to after the Connect flow is completed', }, sandbox: { type: 'string', + description: 'Sandbox mode for testing', enum: ['finch', 'provider'], }, jq_filter: { @@ -84,7 +95,17 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['customer_id', 'customer_name', 'products'], + required: [ + 'customer_email', + 'customer_id', + 'customer_name', + 'integration', + 'manual', + 'minutes_to_expire', + 'products', + 'redirect_uri', + 'sandbox', + ], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts b/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts index 486d5d22..028508c6 100644 --- a/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts +++ b/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts @@ -37,16 +37,16 @@ export const tool: Tool = { type: 'string', description: 'The Finch products that can be requested during the Connect flow.', enum: [ + 'benefits', 'company', + 'deduction', 'directory', - 'individual', + 'documents', 'employment', + 'individual', 'payment', 'pay_statement', - 'benefits', 'ssn', - 'deduction', - 'documents', ], }, }, @@ -61,7 +61,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['connection_id'], + required: ['connection_id', 'minutes_to_expire', 'products', 'redirect_uri'], }, annotations: {}, }; diff --git a/src/resources/connect/sessions.ts b/src/resources/connect/sessions.ts index e0b55282..1c3aa83a 100644 --- a/src/resources/connect/sessions.ts +++ b/src/resources/connect/sessions.ts @@ -47,45 +47,78 @@ export interface SessionReauthenticateResponse { } export interface SessionNewParams { + /** + * Email address of the customer + */ + customer_email: string | null; + + /** + * Unique identifier for the customer + */ customer_id: string; + /** + * Name of the customer + */ customer_name: string; + /** + * Integration configuration for the connect session + */ + integration: SessionNewParams.Integration | null; + + /** + * Enable manual authentication mode + */ + manual: boolean | null; + + /** + * The number of minutes until the session expires (defaults to 129,600, which is + * 90 days) + */ + minutes_to_expire: number | null; + + /** + * The Finch products to request access to + */ products: Array< + | 'benefits' | 'company' + | 'deduction' | 'directory' - | 'individual' + | 'documents' | 'employment' + | 'individual' | 'payment' | 'pay_statement' - | 'benefits' | 'ssn' - | 'deduction' - | 'documents' >; - customer_email?: string | null; - - integration?: SessionNewParams.Integration | null; - - manual?: boolean | null; - /** - * The number of minutes until the session expires (defaults to 129,600, which is - * 90 days) + * The URI to redirect to after the Connect flow is completed */ - minutes_to_expire?: number | null; + redirect_uri: string | null; - redirect_uri?: string | null; - - sandbox?: 'finch' | 'provider' | null; + /** + * Sandbox mode for testing + */ + sandbox: 'finch' | 'provider' | null; } export namespace SessionNewParams { + /** + * Integration configuration for the connect session + */ export interface Integration { - auth_method?: 'assisted' | 'credential' | 'oauth' | 'api_token' | null; - - provider?: string | null; + /** + * The authentication method to use + */ + auth_method: 'assisted' | 'credential' | 'oauth' | 'api_token' | null; + + /** + * The provider to integrate with + */ + provider: string | null; } } @@ -99,28 +132,28 @@ export interface SessionReauthenticateParams { * The number of minutes until the session expires (defaults to 43,200, which is 30 * days) */ - minutes_to_expire?: number | null; + minutes_to_expire: number; /** * The products to request access to (optional for reauthentication) */ - products?: Array< + products: Array< + | 'benefits' | 'company' + | 'deduction' | 'directory' - | 'individual' + | 'documents' | 'employment' + | 'individual' | 'payment' | 'pay_statement' - | 'benefits' | 'ssn' - | 'deduction' - | 'documents' > | null; /** * The URI to redirect to after the Connect flow is completed */ - redirect_uri?: string | null; + redirect_uri: string | null; } export declare namespace Sessions { diff --git a/tests/api-resources/connect/sessions.test.ts b/tests/api-resources/connect/sessions.test.ts index 167db5d3..d66e242d 100644 --- a/tests/api-resources/connect/sessions.test.ts +++ b/tests/api-resources/connect/sessions.test.ts @@ -12,9 +12,15 @@ describe('resource sessions', () => { // prism tests are broken test.skip('new: only required params', async () => { const responsePromise = client.connect.sessions.new({ + customer_email: 'dev@stainless.com', customer_id: 'x', customer_name: 'x', - products: ['company'], + integration: { auth_method: 'assisted', provider: 'provider' }, + manual: true, + minutes_to_expire: 1, + products: ['benefits'], + redirect_uri: 'redirect_uri', + sandbox: 'finch', }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -28,13 +34,13 @@ describe('resource sessions', () => { // prism tests are broken test.skip('new: required and optional params', async () => { const response = await client.connect.sessions.new({ + customer_email: 'dev@stainless.com', customer_id: 'x', customer_name: 'x', - products: ['company'], - customer_email: 'dev@stainless.com', integration: { auth_method: 'assisted', provider: 'provider' }, manual: true, minutes_to_expire: 1, + products: ['benefits'], redirect_uri: 'redirect_uri', sandbox: 'finch', }); @@ -42,7 +48,12 @@ describe('resource sessions', () => { // prism tests are broken test.skip('reauthenticate: only required params', async () => { - const responsePromise = client.connect.sessions.reauthenticate({ connection_id: 'connection_id' }); + const responsePromise = client.connect.sessions.reauthenticate({ + connection_id: 'connection_id', + minutes_to_expire: 0, + products: ['benefits'], + redirect_uri: 'https://example.com', + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -57,7 +68,7 @@ describe('resource sessions', () => { const response = await client.connect.sessions.reauthenticate({ connection_id: 'connection_id', minutes_to_expire: 0, - products: ['company'], + products: ['benefits'], redirect_uri: 'https://example.com', }); }); From 96d3f666690caea95b650b954dfd681eeb686c8e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 20:25:51 +0000 Subject: [PATCH 46/47] feat(api): api update --- .stats.yml | 4 ++-- .../enroll-many-benefits-hris-individuals.ts | 22 ++++++++++++++++++- .../list-supported-benefits-hris-benefits.ts | 2 +- src/resources/hris/benefits/benefits.ts | 2 +- src/resources/hris/benefits/individuals.ts | 22 ++++++++++++++++++- .../hris/benefits/individuals.test.ts | 2 +- 6 files changed, 47 insertions(+), 7 deletions(-) diff --git a/.stats.yml b/.stats.yml index 0751652c..80967a2d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-5f9c0770c8be0fa779cbb640c25043cc1d5514236b8d0d6791c822dd7e00ffe6.yml -openapi_spec_hash: d8df70c1dc1ba1ebcd572c1fab58eec6 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-b57bba4d2e9b4a64e1c8c3f037aad70e35a164bb1f3b5082948717b94d501a30.yml +openapi_spec_hash: 7e111f64fb635d9dc76da7eaedd0296f config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts index b4370f4a..3cbd1330 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts @@ -56,9 +56,29 @@ export const tool: Tool = { description: 'Amount in cents for fixed type or basis points (1/100th of a percent) for percent type', }, + tiers: { + type: 'array', + description: + 'Array of tier objects for tiered contribution matching (required when type is tiered)', + items: { + type: 'object', + properties: { + match: { + type: 'integer', + description: 'The employer match percentage in basis points (0-10000 = 0-100%)', + }, + threshold: { + type: 'integer', + description: + 'The employee contribution threshold in basis points (0-10000 = 0-100%)', + }, + }, + required: ['match', 'threshold'], + }, + }, type: { type: 'string', - enum: ['fixed', 'percent'], + enum: ['fixed', 'percent', 'tiered'], }, }, }, diff --git a/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts index 49dc8e56..5b1aa097 100644 --- a/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_supported_benefits_hris_benefits', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet deductions metadata\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/supported_benefit'\n },\n $defs: {\n supported_benefit: {\n type: 'object',\n title: 'BenefitFeature',\n properties: {\n annual_maximum: {\n type: 'boolean',\n description: 'Whether the provider supports an annual maximum for this benefit.'\n },\n company_contribution: {\n type: 'array',\n description: 'Supported contribution types. An empty array indicates contributions are not supported.',\n items: {\n type: 'string',\n enum: [ 'fixed',\n 'percent'\n ]\n }\n },\n description: {\n type: 'string'\n },\n employee_deduction: {\n type: 'array',\n description: 'Supported deduction types. An empty array indicates deductions are not supported.',\n items: {\n type: 'string',\n enum: [ 'fixed',\n 'percent'\n ]\n }\n },\n frequencies: {\n type: 'array',\n description: 'The list of frequencies supported by the provider for this benefit',\n items: {\n $ref: '#/$defs/benefit_frequency'\n }\n },\n catch_up: {\n type: 'boolean',\n description: 'Whether the provider supports catch up for this benefit. This field will only be true for retirement benefits.'\n },\n hsa_contribution_limit: {\n type: 'array',\n description: 'Whether the provider supports HSA contribution limits. Empty if this feature is not supported for the benefit. This array only has values for HSA benefits.',\n items: {\n type: 'string',\n enum: [ 'family',\n 'individual'\n ]\n }\n }\n },\n required: [ 'annual_maximum',\n 'company_contribution',\n 'description',\n 'employee_deduction',\n 'frequencies'\n ]\n },\n benefit_frequency: {\n type: 'string',\n title: 'BenefitFrequency',\n description: 'The frequency of the benefit deduction/contribution.',\n enum: [ 'every_paycheck',\n 'monthly',\n 'one_time'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet deductions metadata\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/supported_benefit'\n },\n $defs: {\n supported_benefit: {\n type: 'object',\n title: 'BenefitFeature',\n properties: {\n annual_maximum: {\n type: 'boolean',\n description: 'Whether the provider supports an annual maximum for this benefit.'\n },\n company_contribution: {\n type: 'array',\n description: 'Supported contribution types. An empty array indicates contributions are not supported.',\n items: {\n type: 'string',\n enum: [ 'fixed',\n 'percent',\n 'tiered'\n ]\n }\n },\n description: {\n type: 'string'\n },\n employee_deduction: {\n type: 'array',\n description: 'Supported deduction types. An empty array indicates deductions are not supported.',\n items: {\n type: 'string',\n enum: [ 'fixed',\n 'percent'\n ]\n }\n },\n frequencies: {\n type: 'array',\n description: 'The list of frequencies supported by the provider for this benefit',\n items: {\n $ref: '#/$defs/benefit_frequency'\n }\n },\n catch_up: {\n type: 'boolean',\n description: 'Whether the provider supports catch up for this benefit. This field will only be true for retirement benefits.'\n },\n hsa_contribution_limit: {\n type: 'array',\n description: 'Whether the provider supports HSA contribution limits. Empty if this feature is not supported for the benefit. This array only has values for HSA benefits.',\n items: {\n type: 'string',\n enum: [ 'family',\n 'individual'\n ]\n }\n }\n },\n required: [ 'annual_maximum',\n 'company_contribution',\n 'description',\n 'employee_deduction',\n 'frequencies'\n ]\n },\n benefit_frequency: {\n type: 'string',\n title: 'BenefitFrequency',\n description: 'The frequency of the benefit deduction/contribution.',\n enum: [ 'every_paycheck',\n 'monthly',\n 'one_time'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/src/resources/hris/benefits/benefits.ts b/src/resources/hris/benefits/benefits.ts index 91be697e..344f099a 100644 --- a/src/resources/hris/benefits/benefits.ts +++ b/src/resources/hris/benefits/benefits.ts @@ -271,7 +271,7 @@ export interface SupportedBenefit { * Supported contribution types. An empty array indicates contributions are not * supported. */ - company_contribution: Array<'fixed' | 'percent' | null> | null; + company_contribution: Array<'fixed' | 'percent' | 'tiered' | null> | null; description: string | null; diff --git a/src/resources/hris/benefits/individuals.ts b/src/resources/hris/benefits/individuals.ts index 67ea17fe..56fb6b97 100644 --- a/src/resources/hris/benefits/individuals.ts +++ b/src/resources/hris/benefits/individuals.ts @@ -238,7 +238,27 @@ export namespace IndividualEnrollManyParams { */ amount?: number; - type?: 'fixed' | 'percent'; + /** + * Array of tier objects for tiered contribution matching (required when type is + * tiered) + */ + tiers?: Array; + + type?: 'fixed' | 'percent' | 'tiered'; + } + + export namespace CompanyContribution { + export interface Tier { + /** + * The employer match percentage in basis points (0-10000 = 0-100%) + */ + match: number; + + /** + * The employee contribution threshold in basis points (0-10000 = 0-100%) + */ + threshold: number; + } } export interface EmployeeDeduction { diff --git a/tests/api-resources/hris/benefits/individuals.test.ts b/tests/api-resources/hris/benefits/individuals.test.ts index 1b201e27..a3c4f0ec 100644 --- a/tests/api-resources/hris/benefits/individuals.test.ts +++ b/tests/api-resources/hris/benefits/individuals.test.ts @@ -38,7 +38,7 @@ describe('resource individuals', () => { annual_contribution_limit: 'individual', annual_maximum: null, catch_up: true, - company_contribution: { amount: 0, type: 'fixed' }, + company_contribution: { amount: 0, tiers: [{ match: 0, threshold: 0 }], type: 'fixed' }, effective_date: '2019-12-27', employee_deduction: { amount: 10000, type: 'fixed' }, }, From 6948056539603bf969f2186051bda0eb8d8428e9 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 20:26:23 +0000 Subject: [PATCH 47/47] release: 6.38.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 61 +++++++++++++++++++++++++++++++ package.json | 2 +- packages/mcp-server/package.json | 2 +- packages/mcp-server/src/server.ts | 2 +- src/version.ts | 2 +- 6 files changed, 66 insertions(+), 5 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 509abc6f..a25f0a9b 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "6.37.0" + ".": "6.38.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 31cf2632..d382e54b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,66 @@ # Changelog +## 6.38.0 (2025-10-14) + +Full Changelog: [v6.37.0...v6.38.0](https://github.com/Finch-API/finch-api-node/compare/v6.37.0...v6.38.0) + +### Features + +* **api:** api update ([96d3f66](https://github.com/Finch-API/finch-api-node/commit/96d3f666690caea95b650b954dfd681eeb686c8e)) +* **api:** api update ([b331c10](https://github.com/Finch-API/finch-api-node/commit/b331c108e3912c503e4cc8393587bac2a927f4f7)) +* **api:** api update ([99a20c2](https://github.com/Finch-API/finch-api-node/commit/99a20c267f645658d3928f269f5da7a33b287d17)) +* **api:** api update ([f9c7e06](https://github.com/Finch-API/finch-api-node/commit/f9c7e0685ff5ab28614353eacc1fc7887ec6a0ff)) +* **api:** api update ([1c4f073](https://github.com/Finch-API/finch-api-node/commit/1c4f073cc8e8f06e58069dcc2bc5b708e3a8be34)) +* **api:** api update ([843b525](https://github.com/Finch-API/finch-api-node/commit/843b525f6a3f07edda04ca213a35dd3d2d37fdb3)) +* **api:** api update ([9bc9a38](https://github.com/Finch-API/finch-api-node/commit/9bc9a38df44189e734248cf7ad06259f93e25b82)) +* **api:** api update ([09d2e93](https://github.com/Finch-API/finch-api-node/commit/09d2e939a8c42d495d9207ad2d73841f6e9e8732)) +* **api:** make client id, client secret optional again ([d67f867](https://github.com/Finch-API/finch-api-node/commit/d67f867f1b3c9e4886d21da21a1cccab5760aa9d)) +* **mcp:** add docs search tool ([a9e8666](https://github.com/Finch-API/finch-api-node/commit/a9e866662d47e0f39a1988339101d46ba149fb9d)) +* **mcp:** add mcp bundles to build script ([45794fe](https://github.com/Finch-API/finch-api-node/commit/45794fe7a8d09dd0160ac3d2a64941fff12837d5)) +* **mcp:** add option for including docs tools ([fef1f5b](https://github.com/Finch-API/finch-api-node/commit/fef1f5b0cc05c737db89097378c88a38e8973089)) +* **mcp:** allow setting logging level ([4634f9a](https://github.com/Finch-API/finch-api-node/commit/4634f9a04f0fd3a7daa781876a1d93e170f1941d)) +* **mcp:** change remote server query option parsing logic ([13ef1bd](https://github.com/Finch-API/finch-api-node/commit/13ef1bd4400e1ae2b2197a35f33e79703af34e08)) +* **mcp:** enable experimental docs search tool ([8ec38f6](https://github.com/Finch-API/finch-api-node/commit/8ec38f6536ca6a6e7324dd827db0dc9ee9234f61)) +* **mcp:** expose client options in `streamableHTTPApp` ([39cdb76](https://github.com/Finch-API/finch-api-node/commit/39cdb7601c55b6d723132edeb320c3898e697fa2)) + + +### Bug Fixes + +* **ci:** set permissions for DXT publish action ([6a6dd0a](https://github.com/Finch-API/finch-api-node/commit/6a6dd0af7e290990c7773447615e3e5d99ff217b)) +* coerce nullable values to undefined ([aa135f5](https://github.com/Finch-API/finch-api-node/commit/aa135f5fdfe89359b6ad8c49b1908e7faee4ebaa)) +* **mcp:** avoid importing unsupported libraries on non-node environments ([8c380a8](https://github.com/Finch-API/finch-api-node/commit/8c380a8499435e8a92155664943e6fc631f7ba1a)) +* **mcp:** fix cli argument parsing logic ([277ba31](https://github.com/Finch-API/finch-api-node/commit/277ba31b242825bd569a6566a8f2a136ec0b595d)) +* **mcp:** fix query options parsing ([9087760](https://github.com/Finch-API/finch-api-node/commit/90877607933fa892f5d05c8931fa2de9d139e769)) +* **mcp:** fix uploading dxt release assets ([70f9a36](https://github.com/Finch-API/finch-api-node/commit/70f9a36f47190f4b78de043e63d65e21df6ce116)) +* **mcp:** resolve a linting issue in server code ([90b7ae2](https://github.com/Finch-API/finch-api-node/commit/90b7ae260d427cebb7bcd7f2d3e854a0efaccd19)) + + +### Performance Improvements + +* faster formatting ([163982a](https://github.com/Finch-API/finch-api-node/commit/163982a884bcf10684b5b3e242b0d52d547fc62b)) + + +### Chores + +* ci build action ([f0c3633](https://github.com/Finch-API/finch-api-node/commit/f0c3633571f7eea46803cb75ba244c41cac5a7b4)) +* **codegen:** internal codegen update ([27ec1f5](https://github.com/Finch-API/finch-api-node/commit/27ec1f5a8d71f31a327021745f7dab0aeebc4b7b)) +* do not install brew dependencies in ./scripts/bootstrap by default ([1758c0d](https://github.com/Finch-API/finch-api-node/commit/1758c0de64e97975332bb8a0c6b55a23ed82a036)) +* extract some types in mcp docs ([55c3799](https://github.com/Finch-API/finch-api-node/commit/55c37998bdb39779bfb9ae62ee5310a2a423248d)) +* **internal:** codegen related update ([d020050](https://github.com/Finch-API/finch-api-node/commit/d0200501b52ae4ac9e7c8de91d2f883e27db34c5)) +* **internal:** codegen related update ([697d211](https://github.com/Finch-API/finch-api-node/commit/697d211b9600d388aa101879ac6c400e4eb4ac53)) +* **internal:** codegen related update ([ac835bf](https://github.com/Finch-API/finch-api-node/commit/ac835bf6af93d53e551d73001d048baa95e1c334)) +* **internal:** fix incremental formatting in some cases ([40ecf6a](https://github.com/Finch-API/finch-api-node/commit/40ecf6a887ea44d156672f155abf70ab2d146921)) +* **internal:** gitignore .mcpb files ([73c778e](https://github.com/Finch-API/finch-api-node/commit/73c778e3b9d157f8296c43131cd0db764d5086bc)) +* **internal:** ignore .eslintcache ([4d90156](https://github.com/Finch-API/finch-api-node/commit/4d901569e987fa9c93c12ae77844972b4655fa8f)) +* **internal:** remove .eslintcache ([64d2197](https://github.com/Finch-API/finch-api-node/commit/64d21976509a6d6b6d0095bf1867ad9bdd153e03)) +* **internal:** remove deprecated `compilerOptions.baseUrl` from tsconfig.json ([5955e29](https://github.com/Finch-API/finch-api-node/commit/5955e291311d6d8192a3e8c3eb87f4eac9bdbdbc)) +* **internal:** use npm pack for build uploads ([7df5a28](https://github.com/Finch-API/finch-api-node/commit/7df5a28a1be002645785fa2d59cd94da5df28889)) +* **mcp:** allow pointing `docs_search` tool at other URLs ([bb7f182](https://github.com/Finch-API/finch-api-node/commit/bb7f182ef3959a99a7728cdab685d972e4110756)) +* **mcp:** rename dxt to mcpb ([68a9c07](https://github.com/Finch-API/finch-api-node/commit/68a9c079dfb35ab661f58780405036399fbaf31e)) +* **mcp:** upload dxt as release asset ([256c717](https://github.com/Finch-API/finch-api-node/commit/256c717c7eb0bd947322b14d85fc15cd7f919724)) +* update CI script ([47843c8](https://github.com/Finch-API/finch-api-node/commit/47843c85864215c19edd9826952bd625e79ca78c)) +* update lockfile ([0601d2a](https://github.com/Finch-API/finch-api-node/commit/0601d2aca7eeb80b8967d3bc89dea5b5ab527565)) + ## 6.37.0 (2025-08-21) Full Changelog: [v6.36.0...v6.37.0](https://github.com/Finch-API/finch-api-node/compare/v6.36.0...v6.37.0) diff --git a/package.json b/package.json index ef7d3403..a88f5e6a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tryfinch/finch-api", - "version": "6.37.0", + "version": "6.38.0", "description": "The official TypeScript library for the Finch API", "author": "Finch ", "types": "dist/index.d.ts", diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index a09f0a7b..3f3f0a6c 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@tryfinch/finch-api-mcp", - "version": "6.37.0", + "version": "6.38.0", "description": "The official MCP Server for the Finch API", "author": "Finch ", "types": "dist/index.d.ts", diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 8e579cb0..bd37d253 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -33,7 +33,7 @@ export const newMcpServer = () => new McpServer( { name: 'tryfinch_finch_api_api', - version: '6.37.0', + version: '6.38.0', }, { capabilities: { tools: {}, logging: {} } }, ); diff --git a/src/version.ts b/src/version.ts index b381c68f..1422fd54 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '6.37.0'; // x-release-please-version +export const VERSION = '6.38.0'; // x-release-please-version