├── .env.example
├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── package.json
├── src
├── apollo-client.ts
└── index.ts
├── tsconfig.json
└── yarn.lock
/.env.example:
--------------------------------------------------------------------------------
1 | # Apollo.io API Key
2 | # Get your API key from https://app.apollo.io/ > Settings > API
3 | APOLLO_IO_API_KEY=your_api_key_here
4 |
5 | # Authentication Server URL (for mcp-proxy-auth)
6 | # AUTH_SERVER_URL=https://your-auth-server.com/verify
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Dependency directories
2 | node_modules/
3 |
4 | # Build output
5 | dist/
6 | build/
7 |
8 | # Environment variables
9 | .env
10 | .env.local
11 | .env.development.local
12 | .env.test.local
13 | .env.production.local
14 |
15 | # Logs
16 | logs
17 | *.log
18 | npm-debug.log*
19 | yarn-debug.log*
20 | yarn-error.log*
21 |
22 | # Editor directories and files
23 | .idea
24 | .vscode
25 | *.suo
26 | *.ntvs*
27 | *.njsproj
28 | *.sln
29 | *.sw?
30 |
31 | # OS generated files
32 | .DS_Store
33 | .DS_Store?
34 | ._*
35 | .Spotlight-V100
36 | .Trashes
37 | ehthumbs.db
38 | Thumbs.db
39 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:22.12-alpine AS builder
2 |
3 | COPY . /app
4 |
5 | WORKDIR /app
6 |
7 | RUN npm install
8 |
9 | FROM node:22-alpine AS release
10 |
11 | WORKDIR /app
12 |
13 | COPY --from=builder /app/dist /app/dist
14 | COPY --from=builder /app/package.json /app/package.json
15 | COPY --from=builder /app/package-lock.json /app/package-lock.json
16 |
17 | ENV NODE_ENV=production
18 |
19 |
20 | RUN npm ci --ignore-scripts --omit-dev
21 | EXPOSE 8080
22 | ENTRYPOINT ["npx", "mcp-proxy", "node", "dist/index.js"]
23 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 Lakhvinder Singh
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Apollo.io MCP Server
2 |
3 | [](https://www.typescriptlang.org/)
4 | [](https://docs.apollo.io/reference/introduction)
5 | [](https://github.com/modelcontextprotocol/sdk)
6 | [](https://opensource.org/licenses/MIT)
7 |
8 | A powerful Model Context Protocol (MCP) server implementation for seamless Apollo.io API integration, enabling AI assistants to interact with Apollo.io data.
9 |
10 |
11 |
12 |
13 |
14 | ## Overview
15 |
16 | This MCP server provides a comprehensive set of tools for interacting with the Apollo.io API, allowing AI assistants to:
17 |
18 | - Enrich data for people and organizations
19 | - Search for people and organizations
20 | - Find job postings for specific organizations
21 | - Perform Apollo.io operations without leaving your AI assistant interface
22 |
23 | ## Why Use This MCP Server?
24 |
25 | - **Seamless AI Integration**: Connect your AI assistants directly to Apollo.io data
26 | - **Simplified API Operations**: Perform common Apollo.io tasks through natural language commands
27 | - **Real-time Data Access**: Get up-to-date information from Apollo.io
28 | - **Secure Authentication**: Uses Apollo.io's secure API token authentication
29 | - **Extensible Design**: Easily add more Apollo.io API capabilities as needed
30 |
31 | ## Installation
32 |
33 | ```bash
34 | # Clone the repository
35 | git clone https://github.com/lkm1developer/apollo-io-mcp-server.git
36 | cd apollo-io-mcp-server
37 |
38 | # Install dependencies
39 | npm install
40 |
41 | # Build the project
42 | npm run build
43 | ```
44 |
45 | ## Configuration
46 |
47 | The server requires an Apollo.io API access token. You can obtain one by:
48 |
49 | 1. Going to your [Apollo.io Account](https://app.apollo.io/)
50 | 2. Navigating to Settings > API
51 | 3. Generating an API key
52 |
53 | You can provide the token in two ways:
54 |
55 | 1. As an environment variable:
56 | ```
57 | APOLLO_IO_API_KEY=your-api-key
58 | ```
59 |
60 | 2. As a command-line argument:
61 | ```
62 | npm start -- --api-key=your-api-key
63 | ```
64 |
65 | For development, create a `.env` file in the project root to store your environment variables:
66 |
67 | ```
68 | APOLLO_IO_API_KEY=your-api-key
69 | ```
70 |
71 | ## Usage
72 |
73 | ### Starting the Server
74 |
75 | ```bash
76 | # Start the server
77 | npm start
78 |
79 | # Or with a specific API key
80 | npm start -- --api-key=your-api-key
81 |
82 | # Run the SSE server with authentication
83 | npx mcp-proxy-auth node dist/index.js
84 | ```
85 |
86 | ### Implementing Authentication in SSE Server
87 |
88 | The SSE server uses the [mcp-proxy-auth](https://www.npmjs.com/package/mcp-proxy-auth) package for authentication. To implement authentication:
89 |
90 | 1. Install the package:
91 | ```bash
92 | npm install mcp-proxy-auth
93 | ```
94 |
95 | 2. Set the `AUTH_SERVER_URL` environment variable to point to your API key verification endpoint:
96 | ```bash
97 | export AUTH_SERVER_URL=https://your-auth-server.com/verify
98 | ```
99 |
100 | 3. Run the SSE server with authentication:
101 | ```bash
102 | npx mcp-proxy-auth node dist/index.js
103 | ```
104 |
105 | 4. The SSE URL will be available at:
106 | ```
107 | localhost:8080/sse?apiKey=apikey
108 | ```
109 |
110 | Replace `apikey` with your actual API key for authentication.
111 |
112 | The `mcp-proxy-auth` package acts as a proxy that:
113 | - Intercepts requests to your SSE server
114 | - Verifies API keys against your authentication server
115 | - Only allows authenticated requests to reach your SSE endpoint
116 |
117 | ### Integrating with AI Assistants
118 |
119 | This MCP server is designed to work with AI assistants that support the Model Context Protocol. Once running, the server exposes a set of tools that can be used by compatible AI assistants to interact with Apollo.io data.
120 |
121 | ### Available Tools
122 |
123 | The server exposes the following powerful Apollo.io integration tools:
124 |
125 | 1. **people_enrichment**
126 | - Use the People Enrichment endpoint to enrich data for 1 person
127 | - Parameters:
128 | - `first_name` (string, optional): Person's first name
129 | - `last_name` (string, optional): Person's last name
130 | - `email` (string, optional): Person's email address
131 | - `domain` (string, optional): Company domain
132 | - `organization_name` (string, optional): Organization name
133 | - Example:
134 | ```json
135 | {
136 | "first_name": "John",
137 | "last_name": "Doe",
138 | "email": "john.doe@example.com"
139 | }
140 | ```
141 |
142 | 2. **organization_enrichment**
143 | - Use the Organization Enrichment endpoint to enrich data for 1 company
144 | - Parameters:
145 | - `domain` (string, optional): Company domain
146 | - `name` (string, optional): Company name
147 | - Example:
148 | ```json
149 | {
150 | "domain": "apollo.io"
151 | }
152 | ```
153 |
154 | 3. **people_search**
155 | - Use the People Search endpoint to find people
156 | - Parameters:
157 | - `q_organization_domains_list` (array, optional): List of organization domains to search within
158 | - `person_titles` (array, optional): List of job titles to search for
159 | - `person_seniorities` (array, optional): List of seniority levels to search for
160 | - Example:
161 | ```json
162 | {
163 | "person_titles": ["Marketing Manager"],
164 | "person_seniorities": ["vp"],
165 | "q_organization_domains_list": ["apollo.io"]
166 | }
167 | ```
168 |
169 | 4. **organization_search**
170 | - Use the Organization Search endpoint to find organizations
171 | - Parameters:
172 | - `q_organization_domains_list` (array, optional): List of organization domains to search for
173 | - `organization_locations` (array, optional): List of organization locations to search for
174 | - Example:
175 | ```json
176 | {
177 | "organization_locations": ["Japan", "Ireland"]
178 | }
179 | ```
180 |
181 | 5. **organization_job_postings**
182 | - Use the Organization Job Postings endpoint to find job postings for a specific organization
183 | - Parameters:
184 | - `organization_id` (string, required): Apollo.io organization ID
185 | - Example:
186 | ```json
187 | {
188 | "organization_id": "5e60b6381c85b4008c83"
189 | }
190 | ```
191 |
192 | ## Extending the Server
193 |
194 | The server is designed to be easily extensible. To add new Apollo.io API capabilities:
195 |
196 | 1. Add new methods to the `ApolloClient` class in `src/apollo-client.ts`
197 | 2. Register new tools in the `setupToolHandlers` method in `src/index.ts`
198 | 3. Rebuild the project with `npm run build`
199 |
200 | ## License
201 |
202 | This project is licensed under the MIT License - see the LICENSE file for details.
203 |
204 | ## Keywords
205 |
206 | Apollo.io, Model Context Protocol, MCP, AI Assistant, TypeScript, API Integration, Apollo.io API, People Enrichment, Organization Enrichment, People Search, Organization Search, Job Postings, AI Tools
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "apollo-io-mcp-server",
3 | "version": "0.1.0",
4 | "description": "A powerful Model Context Protocol (MCP) server implementation for seamless Apollo.io API integration, enabling AI assistants to interact with Apollo.io data",
5 | "main": "dist/index.js",
6 | "type": "module",
7 | "scripts": {
8 | "build": "tsc",
9 | "start": "node dist/index.js",
10 | "dev": "tsx --watch src/index.ts",
11 | "stdio": "node dist/index.js"
12 | },
13 | "keywords": [
14 | "mcp",
15 | "apollo-io",
16 | "model-context-protocol",
17 | "ai-assistant",
18 | "apollo-io-api",
19 | "apollo-io-integration",
20 | "typescript",
21 | "people-enrichment",
22 | "organization-enrichment",
23 | "people-search",
24 | "organization-search",
25 | "job-postings",
26 | "ai-tools"
27 | ],
28 | "author": "lakhvinder singh",
29 | "license": "MIT",
30 | "dependencies": {
31 | "@modelcontextprotocol/sdk": "^1.8.0",
32 | "axios": "^1.6.7",
33 | "dotenv": "^16.4.7",
34 | "mcp-proxy-auth": "^1.0.1",
35 | "zod": "^3.24.2"
36 | },
37 | "devDependencies": {
38 | "@types/node": "^20.10.5",
39 | "tsx": "^4.7.0",
40 | "typescript": "^5.3.3"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/apollo-client.ts:
--------------------------------------------------------------------------------
1 | import axios, { AxiosInstance } from 'axios';
2 | import dotenv from 'dotenv';
3 |
4 | // Load environment variables
5 | dotenv.config();
6 |
7 | // Helper function to strip URL
8 | const stripUrl = (url?: string): string | undefined => {
9 | if (!url) return undefined;
10 |
11 | try {
12 | // Remove protocol (http://, https://)
13 | let stripped = url.replace(/^https?:\/\//, '');
14 |
15 | // Remove www.
16 | stripped = stripped.replace(/^www\./, '');
17 |
18 | // Remove trailing slash
19 | stripped = stripped.replace(/\/$/, '');
20 |
21 | // Convert to lowercase
22 | stripped = stripped.toLowerCase();
23 |
24 | return stripped;
25 | } catch (error) {
26 | console.error('Error stripping URL:', error);
27 | return url;
28 | }
29 | };
30 |
31 | // Type definitions for Apollo.io API responses
32 | export interface PeopleEnrichmentQuery {
33 | first_name?: string;
34 | last_name?: string;
35 | email?: string;
36 | domain?: string;
37 | organization_name?: string;
38 | [key: string]: any;
39 | }
40 |
41 | export interface OrganizationEnrichmentQuery {
42 | domain?: string;
43 | name?: string;
44 | [key: string]: any;
45 | }
46 |
47 | export interface PeopleSearchQuery {
48 | q_organization_domains_list?: string[];
49 | person_titles?: string[];
50 | person_seniorities?: string[];
51 | [key: string]: any;
52 | }
53 |
54 | export interface OrganizationSearchQuery {
55 | q_organization_domains_list?: string[];
56 | organization_locations?: string[];
57 | [key: string]: any;
58 | }
59 |
60 | export interface EmployeesOfCompanyQuery {
61 | company: string;
62 | website_url?: string;
63 | linkedin_url?: string;
64 | [key: string]: any;
65 | }
66 |
67 | export class ApolloClient {
68 | private apiKey: string;
69 | private baseUrl: string;
70 | private headers: Record;
71 | private axiosInstance: AxiosInstance;
72 |
73 | constructor(apiKey?: string) {
74 | this.apiKey = apiKey || process.env.APOLLO_IO_API_KEY || '';
75 |
76 | if (!this.apiKey) {
77 | throw new Error('APOLLO_IO_API_KEY environment variable is required');
78 | }
79 |
80 | this.baseUrl = 'https://api.apollo.io/api/v1';
81 | this.headers = {
82 | 'Content-Type': 'application/json',
83 | 'Cache-Control': 'no-cache',
84 | 'x-api-key': this.apiKey
85 | };
86 |
87 | this.axiosInstance = axios.create({
88 | baseURL: this.baseUrl,
89 | headers: this.headers
90 | });
91 | }
92 |
93 | /**
94 | * Use the People Enrichment endpoint to enrich data for 1 person.
95 | * https://docs.apollo.io/reference/people-enrichment
96 | */
97 | async peopleEnrichment(query: PeopleEnrichmentQuery): Promise {
98 | try {
99 | const url = `${this.baseUrl}/people/match`;
100 | console.log('url', url);
101 | console.log('query', query);
102 | const response = await this.axiosInstance.post(url, query);
103 |
104 | if (response.status === 200) {
105 | return response.data;
106 | } else {
107 | console.error(`Error: ${response.status} - ${response.statusText}`);
108 | return null;
109 | }
110 | } catch (error: any) {
111 | console.error(`Error: ${error.response?.status} - ${error.response?.statusText || error.message}`);
112 | return null;
113 | }
114 | }
115 |
116 | /**
117 | * Use the Organization Enrichment endpoint to enrich data for 1 company.
118 | * https://docs.apollo.io/reference/organization-enrichment
119 | */
120 | async organizationEnrichment(query: OrganizationEnrichmentQuery): Promise {
121 | try {
122 | const url = `${this.baseUrl}/organizations/enrich`;
123 | const response = await this.axiosInstance.get(url, { params: query });
124 |
125 | if (response.status === 200) {
126 | return response.data;
127 | } else {
128 | console.error(`Error: ${response.status} - ${response.statusText}`);
129 | return null;
130 | }
131 | } catch (error: any) {
132 | console.error(`Error: ${error.response?.status} - ${error.response?.statusText || error.message}`);
133 | return null;
134 | }
135 | }
136 |
137 | /**
138 | * Use the People Search endpoint to find people.
139 | * https://docs.apollo.io/reference/people-search
140 | */
141 | async peopleSearch(query: PeopleSearchQuery): Promise {
142 | try {
143 | const url = `${this.baseUrl}/mixed_people/search`;
144 | const response = await this.axiosInstance.post(url, query);
145 |
146 | if (response.status === 200) {
147 | return response.data;
148 | } else {
149 | console.error(`Error: ${response.status} - ${response.statusText}`);
150 | return null;
151 | }
152 | } catch (error: any) {
153 | console.error(`Error: ${error.response?.status} - ${error.response?.statusText || error.message}`);
154 | return null;
155 | }
156 | }
157 |
158 | /**
159 | * Use the Organization Search endpoint to find organizations.
160 | * https://docs.apollo.io/reference/organization-search
161 | */
162 | async organizationSearch(query: OrganizationSearchQuery): Promise {
163 | try {
164 | const url = `${this.baseUrl}/mixed_companies/search`;
165 | const response = await this.axiosInstance.post(url, query);
166 |
167 | if (response.status === 200) {
168 | return response.data;
169 | } else {
170 | console.error(`Error: ${response.status} - ${response.statusText}`);
171 | return null;
172 | }
173 | } catch (error: any) {
174 | console.error(`Error: ${error.response?.status} - ${error.response?.statusText || error.message}`);
175 | return null;
176 | }
177 | }
178 |
179 | /**
180 | * Use the Organization Job Postings endpoint to find job postings for a specific organization.
181 | * https://docs.apollo.io/reference/organization-jobs-postings
182 | */
183 | async organizationJobPostings(organizationId: string): Promise {
184 | try {
185 | const url = `${this.baseUrl}/organizations/${organizationId}/job_postings`;
186 | const response = await this.axiosInstance.get(url);
187 |
188 | if (response.status === 200) {
189 | return response.data;
190 | } else {
191 | console.error(`Error: ${response.status} - ${response.statusText}`);
192 | return null;
193 | }
194 | } catch (error: any) {
195 | console.error(`Error: ${error.response?.status} - ${error.response?.statusText || error.message}`);
196 | return null;
197 | }
198 | }
199 |
200 | /**
201 | * Get email address for a person using their Apollo ID
202 | */
203 | async getPersonEmail(apolloId: string): Promise {
204 | try {
205 | if (!apolloId) {
206 | throw new Error('Apollo ID is required');
207 | }
208 |
209 | const baseUrl = `https://app.apollo.io/api/v1/mixed_people/add_to_my_prospects`;
210 | const payload = {
211 | entity_ids: [apolloId],
212 | analytics_context: 'Searcher: Individual Add Button',
213 | skip_fetching_people: true,
214 | cta_name: 'Access email',
215 | cacheKey: Date.now()
216 | };
217 |
218 | const response = await axios.post(baseUrl, payload, {
219 | headers: {
220 | 'X-Api-Key': this.apiKey,
221 | 'Content-Type': 'application/json'
222 | }
223 | });
224 |
225 | if (!response.data) {
226 | throw new Error('No data received from Apollo API');
227 | }
228 |
229 | const emails = (response?.data?.contacts ?? []).map((item: any) => item.email);
230 | return emails;
231 | } catch (error: any) {
232 | console.error(`Error getting person email: ${error.message}`);
233 | return null;
234 | }
235 | }
236 |
237 | /**
238 | * Find employees of a company using company name or website/LinkedIn URL
239 | */
240 | async employeesOfCompany(query: EmployeesOfCompanyQuery): Promise {
241 | try {
242 | const { company, website_url, linkedin_url } = query;
243 |
244 | if (!company) {
245 | throw new Error('Company name is required');
246 | }
247 |
248 | const strippedWebsiteUrl = stripUrl(website_url);
249 | const strippedLinkedinUrl = stripUrl(linkedin_url);
250 |
251 | // First search for the company
252 | const companySearchPayload = {
253 | q_organization_name: company,
254 | page: 1,
255 | limit: 100
256 | };
257 |
258 | const mixedCompaniesResponse = await axios.post(
259 | 'https://api.apollo.io/v1/mixed_companies/search',
260 | companySearchPayload,
261 | {
262 | headers: {
263 | 'Content-Type': 'application/json',
264 | 'X-Api-Key': this.apiKey
265 | }
266 | }
267 | );
268 |
269 | if (!mixedCompaniesResponse.data) {
270 | throw new Error('No data received from Apollo API');
271 | }
272 |
273 | let organizations = mixedCompaniesResponse.data.organizations;
274 | if (organizations.length === 0) {
275 | throw new Error('No organizations found');
276 | }
277 |
278 | // Filter companies by website or LinkedIn URL if provided
279 | const companyObjs = organizations.filter((item: any) => {
280 | const companyLinkedin = stripUrl(item.linkedin_url);
281 | const companyWebsite = stripUrl(item.website_url);
282 |
283 | if (strippedLinkedinUrl && companyLinkedin && companyLinkedin === strippedLinkedinUrl) {
284 | return true;
285 | } else if (strippedWebsiteUrl && companyWebsite && companyWebsite === strippedWebsiteUrl) {
286 | return true;
287 | }
288 | return false;
289 | });
290 |
291 | // If we have filtered results, use the first one, otherwise use the first from the original search
292 | const companyObj = companyObjs.length > 0 ? companyObjs[0] : organizations[0];
293 | const companyId = companyObj.id;
294 |
295 | if (!companyId) {
296 | throw new Error('Could not determine company ID');
297 | }
298 |
299 | // Now search for employees
300 | const peopleSearchPayload: any = {
301 | organization_ids: [companyId],
302 | page: 1,
303 | limit: 100
304 | };
305 |
306 | // Add optional filters if provided in the tool config
307 | if (query.person_seniorities) {
308 | peopleSearchPayload.person_titles = (query.person_seniorities ?? '').split(',').map((item: string) => item.trim());
309 | }
310 |
311 | if (query.contact_email_status) {
312 | peopleSearchPayload.contact_email_status_v2 = (query.contact_email_status ?? '').split(',').map((item: string) => item.trim());
313 | }
314 |
315 | const peopleResponse = await axios.post(
316 | 'https://api.apollo.io/v1/mixed_people/search',
317 | peopleSearchPayload,
318 | {
319 | headers: {
320 | 'Content-Type': 'application/json',
321 | 'X-Api-Key': this.apiKey
322 | }
323 | }
324 | );
325 |
326 | if (!peopleResponse.data) {
327 | throw new Error('No data received from Apollo API');
328 | }
329 |
330 | return peopleResponse.data.people || [];
331 | } catch (error: any) {
332 | console.error(`Error finding employees: ${error.message}`);
333 | return null;
334 | }
335 | }
336 | }
337 |
338 | // Example usage (for testing)
339 | async function main() {
340 | try {
341 | // Get API key from environment variable
342 | const apiKey = process.env.APOLLO_IO_API_KEY;
343 | if (!apiKey) {
344 | throw new Error('APOLLO_IO_API_KEY environment variable is required');
345 | }
346 |
347 | const client = new ApolloClient(apiKey);
348 |
349 | // Example People Enrichment
350 | const peopleEnrichmentQuery: PeopleEnrichmentQuery = {
351 | first_name: "Tim",
352 | last_name: "Zheng"
353 | };
354 | const peopleEnrichmentResponse = await client.peopleEnrichment(peopleEnrichmentQuery);
355 | if (peopleEnrichmentResponse) {
356 | console.log("People Enrichment Response:", JSON.stringify(peopleEnrichmentResponse, null, 2));
357 | } else {
358 | console.log("People Enrichment failed.");
359 | }
360 |
361 | // Example Organization Enrichment
362 | const organizationEnrichmentQuery: OrganizationEnrichmentQuery = {
363 | domain: "apollo.io"
364 | };
365 | const organizationEnrichmentResponse = await client.organizationEnrichment(organizationEnrichmentQuery);
366 | if (organizationEnrichmentResponse) {
367 | console.log("Organization Enrichment Response:", JSON.stringify(organizationEnrichmentResponse, null, 2));
368 | } else {
369 | console.log("Organization Enrichment failed.");
370 | }
371 |
372 | // Example People Search
373 | const peopleSearchQuery: PeopleSearchQuery = {
374 | person_titles: ["Marketing Manager"],
375 | person_seniorities: ["vp"],
376 | q_organization_domains_list: ["apollo.io"]
377 | };
378 | const peopleSearchResponse = await client.peopleSearch(peopleSearchQuery);
379 | if (peopleSearchResponse) {
380 | console.log("People Search Response:", JSON.stringify(peopleSearchResponse, null, 2));
381 | } else {
382 | console.log("People Search failed.");
383 | }
384 |
385 | // Example Organization Search
386 | const organizationSearchQuery: OrganizationSearchQuery = {
387 | organization_locations: ["Japan", "Ireland"]
388 | };
389 | const organizationSearchResponse = await client.organizationSearch(organizationSearchQuery);
390 | if (organizationSearchResponse) {
391 | console.log("Organization Search Response:", JSON.stringify(organizationSearchResponse, null, 2));
392 | } else {
393 | console.log("Organization Search failed.");
394 | }
395 |
396 | // Example Organization Job Postings
397 | // Note: You need a valid organization ID for this to work
398 | const organizationId = "5e60b6381c85b4008c83"; // Replace with a valid organization ID
399 | const organizationJobPostingsResponse = await client.organizationJobPostings(organizationId);
400 | if (organizationJobPostingsResponse) {
401 | console.log("Organization Job Postings Response:", JSON.stringify(organizationJobPostingsResponse, null, 2));
402 | } else {
403 | console.log("Organization Job Postings failed.");
404 | }
405 | } catch (error) {
406 | console.error("Error:", error);
407 | }
408 | }
409 |
410 | // Run the example if this file is executed directly
411 | if (process.argv[1] === import.meta.url) {
412 | main();
413 | }
414 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3 | import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4 | import {
5 | CallToolRequestSchema,
6 | ErrorCode,
7 | ListToolsRequestSchema,
8 | McpError,
9 | Tool
10 | } from '@modelcontextprotocol/sdk/types.js';
11 | import { ApolloClient } from './apollo-client.js';
12 | import dotenv from 'dotenv';
13 | import { parseArgs } from 'node:util';
14 |
15 | // Load environment variables
16 | dotenv.config();
17 |
18 | // Parse command line arguments
19 | const { values } = parseArgs({
20 | options: {
21 | 'api-key': { type: 'string' }
22 | }
23 | });
24 |
25 | // Initialize Apollo.io client
26 | const apiKey = values['api-key'] || process.env.APOLLO_IO_API_KEY;
27 | if (!apiKey) {
28 | throw new Error('APOLLO_IO_API_KEY environment variable is required');
29 | }
30 |
31 | class ApolloServer {
32 | // Core server properties
33 | private server: Server;
34 | private apollo: ApolloClient;
35 |
36 | constructor() {
37 | this.server = new Server(
38 | {
39 | name: 'apollo-io-manager',
40 | version: '0.1.0',
41 | },
42 | {
43 | capabilities: {
44 | resources: {},
45 | tools: {},
46 | },
47 | }
48 | );
49 |
50 | this.apollo = new ApolloClient(apiKey);
51 |
52 | this.setupToolHandlers();
53 | this.setupErrorHandling();
54 | }
55 |
56 | private setupErrorHandling(): void {
57 | this.server.onerror = (error) => {
58 | console.error('[MCP Error]', error);
59 | };
60 |
61 | process.on('SIGINT', async () => {
62 | await this.server.close();
63 | process.exit(0);
64 | });
65 |
66 | process.on('uncaughtException', (error) => {
67 | console.error('Uncaught exception:', error);
68 | });
69 |
70 | process.on('unhandledRejection', (reason, promise) => {
71 | console.error('Unhandled rejection at:', promise, 'reason:', reason);
72 | });
73 | }
74 |
75 | private setupToolHandlers(): void {
76 | this.server.setRequestHandler(ListToolsRequestSchema, async () => {
77 | // Define available tools
78 | const tools: Tool[] = [
79 | {
80 | name: 'people_enrichment',
81 | description: 'Use the People Enrichment endpoint to enrich data for 1 person',
82 | inputSchema: {
83 | type: 'object',
84 | properties: {
85 | first_name: {
86 | type: 'string',
87 | description: "Person's first name"
88 | },
89 | last_name: {
90 | type: 'string',
91 | description: "Person's last name"
92 | },
93 | email: {
94 | type: 'string',
95 | description: "Person's email address"
96 | },
97 | domain: {
98 | type: 'string',
99 | description: "Company domain"
100 | },
101 | organization_name: {
102 | type: 'string',
103 | description: "Organization name"
104 | },
105 | linkedin_url: {
106 | type: 'string',
107 | description: "Person's LinkedIn profile URL"
108 | }
109 | }
110 | }
111 | },
112 | {
113 | name: 'organization_enrichment',
114 | description: 'Use the Organization Enrichment endpoint to enrich data for 1 company',
115 | inputSchema: {
116 | type: 'object',
117 | properties: {
118 | domain: {
119 | type: 'string',
120 | description: 'Company domain'
121 | },
122 | name: {
123 | type: 'string',
124 | description: 'Company name'
125 | }
126 | }
127 | }
128 | },
129 | {
130 | name: 'people_search',
131 | description: 'Use the People Search endpoint to find people',
132 | inputSchema: {
133 | type: 'object',
134 | properties: {
135 | q_organization_domains_list: {
136 | type: 'array',
137 | items: { type: 'string' },
138 | description: 'List of organization domains to search within'
139 | },
140 | person_titles: {
141 | type: 'array',
142 | items: { type: 'string' },
143 | description: 'List of job titles to search for'
144 | },
145 | person_seniorities: {
146 | type: 'array',
147 | items: { type: 'string' },
148 | description: 'List of seniority levels to search for'
149 | }
150 | }
151 | }
152 | },
153 | {
154 | name: 'organization_search',
155 | description: 'Use the Organization Search endpoint to find organizations',
156 | inputSchema: {
157 | type: 'object',
158 | properties: {
159 | q_organization_domains_list: {
160 | type: 'array',
161 | items: { type: 'string' },
162 | description: 'List of organization domains to search for'
163 | },
164 | organization_locations: {
165 | type: 'array',
166 | items: { type: 'string' },
167 | description: 'List of organization locations to search for'
168 | }
169 | }
170 | }
171 | },
172 | {
173 | name: 'organization_job_postings',
174 | description: 'Use the Organization Job Postings endpoint to find job postings for a specific organization',
175 | inputSchema: {
176 | type: 'object',
177 | properties: {
178 | organization_id: {
179 | type: 'string',
180 | description: 'Apollo.io organization ID'
181 | }
182 | },
183 | required: ['organization_id']
184 | }
185 | },
186 | {
187 | name: 'get_person_email',
188 | description: 'Get email address for a person using their Apollo ID',
189 | inputSchema: {
190 | type: 'object',
191 | properties: {
192 | apollo_id: {
193 | type: 'string',
194 | description: 'Apollo.io person ID'
195 | }
196 | },
197 | required: ['apollo_id']
198 | }
199 | },
200 | {
201 | name: 'employees_of_company',
202 | description: 'Find employees of a company using company name or website/LinkedIn URL',
203 | inputSchema: {
204 | type: 'object',
205 | properties: {
206 | company: {
207 | type: 'string',
208 | description: 'Company name'
209 | },
210 | website_url: {
211 | type: 'string',
212 | description: 'Company website URL'
213 | },
214 | linkedin_url: {
215 | type: 'string',
216 | description: 'Company LinkedIn URL'
217 | }
218 | },
219 | required: ['company']
220 | }
221 | }
222 | ];
223 |
224 | return { tools };
225 | });
226 |
227 | this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
228 | try {
229 | const args = request.params.arguments ?? {};
230 |
231 | switch (request.params.name) {
232 | case 'people_enrichment': {
233 | const result = await this.apollo.peopleEnrichment(args);
234 | return {
235 | content: [{
236 | type: 'text',
237 | text: JSON.stringify(result, null, 2)
238 | }]
239 | };
240 | }
241 |
242 | case 'organization_enrichment': {
243 | const result = await this.apollo.organizationEnrichment(args);
244 | return {
245 | content: [{
246 | type: 'text',
247 | text: JSON.stringify(result, null, 2)
248 | }]
249 | };
250 | }
251 |
252 | case 'people_search': {
253 | const result = await this.apollo.peopleSearch(args);
254 | return {
255 | content: [{
256 | type: 'text',
257 | text: JSON.stringify(result, null, 2)
258 | }]
259 | };
260 | }
261 |
262 | case 'organization_search': {
263 | const result = await this.apollo.organizationSearch(args);
264 | return {
265 | content: [{
266 | type: 'text',
267 | text: JSON.stringify(result, null, 2)
268 | }]
269 | };
270 | }
271 |
272 | case 'organization_job_postings': {
273 | const result = await this.apollo.organizationJobPostings(args.organization_id as string);
274 | return {
275 | content: [{
276 | type: 'text',
277 | text: JSON.stringify(result, null, 2)
278 | }]
279 | };
280 | }
281 |
282 | case 'get_person_email': {
283 | const result = await this.apollo.getPersonEmail(args.apollo_id as string);
284 | return {
285 | content: [{
286 | type: 'text',
287 | text: JSON.stringify(result, null, 2)
288 | }]
289 | };
290 | }
291 |
292 | case 'employees_of_company': {
293 | const result = await this.apollo.employeesOfCompany(args as any);
294 | return {
295 | content: [{
296 | type: 'text',
297 | text: JSON.stringify(result, null, 2)
298 | }]
299 | };
300 | }
301 |
302 | default:
303 | throw new McpError(
304 | ErrorCode.MethodNotFound,
305 | `Unknown tool: ${request.params.name}`
306 | );
307 | }
308 | } catch (error: any) {
309 | console.error(`Error executing tool ${request.params.name}:`, error);
310 | return {
311 | content: [{
312 | type: 'text',
313 | text: `Apollo.io API error: ${error.message}`
314 | }],
315 | isError: true,
316 | };
317 | }
318 | });
319 | }
320 |
321 | async run(): Promise {
322 | const transport = new StdioServerTransport();
323 | await this.server.connect(transport);
324 | console.log('Apollo.io MCP server started');
325 | }
326 | }
327 |
328 | export async function serve(): Promise {
329 | const server = new ApolloServer();
330 | await server.run();
331 | }
332 |
333 | const server = new ApolloServer();
334 | server.run().catch(console.error);
335 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "module": "NodeNext",
5 | "moduleResolution": "NodeNext",
6 | "esModuleInterop": true,
7 | "strict": true,
8 | "outDir": "dist",
9 | "sourceMap": true,
10 | "declaration": true,
11 | "skipLibCheck": true,
12 | "forceConsistentCasingInFileNames": true
13 | },
14 | "include": ["src/**/*"],
15 | "exclude": ["node_modules", "dist"]
16 | }
17 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@esbuild/aix-ppc64@0.25.2":
6 | version "0.25.2"
7 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8"
8 | integrity sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==
9 |
10 | "@esbuild/android-arm64@0.25.2":
11 | version "0.25.2"
12 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196"
13 | integrity sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==
14 |
15 | "@esbuild/android-arm@0.25.2":
16 | version "0.25.2"
17 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee"
18 | integrity sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==
19 |
20 | "@esbuild/android-x64@0.25.2":
21 | version "0.25.2"
22 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2"
23 | integrity sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==
24 |
25 | "@esbuild/darwin-arm64@0.25.2":
26 | version "0.25.2"
27 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz#486efe7599a8d90a27780f2bb0318d9a85c6c423"
28 | integrity sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==
29 |
30 | "@esbuild/darwin-x64@0.25.2":
31 | version "0.25.2"
32 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374"
33 | integrity sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==
34 |
35 | "@esbuild/freebsd-arm64@0.25.2":
36 | version "0.25.2"
37 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6"
38 | integrity sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==
39 |
40 | "@esbuild/freebsd-x64@0.25.2":
41 | version "0.25.2"
42 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809"
43 | integrity sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==
44 |
45 | "@esbuild/linux-arm64@0.25.2":
46 | version "0.25.2"
47 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058"
48 | integrity sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==
49 |
50 | "@esbuild/linux-arm@0.25.2":
51 | version "0.25.2"
52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6"
53 | integrity sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==
54 |
55 | "@esbuild/linux-ia32@0.25.2":
56 | version "0.25.2"
57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737"
58 | integrity sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==
59 |
60 | "@esbuild/linux-loong64@0.25.2":
61 | version "0.25.2"
62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a"
63 | integrity sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==
64 |
65 | "@esbuild/linux-mips64el@0.25.2":
66 | version "0.25.2"
67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30"
68 | integrity sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==
69 |
70 | "@esbuild/linux-ppc64@0.25.2":
71 | version "0.25.2"
72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067"
73 | integrity sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==
74 |
75 | "@esbuild/linux-riscv64@0.25.2":
76 | version "0.25.2"
77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3"
78 | integrity sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==
79 |
80 | "@esbuild/linux-s390x@0.25.2":
81 | version "0.25.2"
82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602"
83 | integrity sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==
84 |
85 | "@esbuild/linux-x64@0.25.2":
86 | version "0.25.2"
87 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb"
88 | integrity sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==
89 |
90 | "@esbuild/netbsd-arm64@0.25.2":
91 | version "0.25.2"
92 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac"
93 | integrity sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==
94 |
95 | "@esbuild/netbsd-x64@0.25.2":
96 | version "0.25.2"
97 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f"
98 | integrity sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==
99 |
100 | "@esbuild/openbsd-arm64@0.25.2":
101 | version "0.25.2"
102 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f"
103 | integrity sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==
104 |
105 | "@esbuild/openbsd-x64@0.25.2":
106 | version "0.25.2"
107 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768"
108 | integrity sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==
109 |
110 | "@esbuild/sunos-x64@0.25.2":
111 | version "0.25.2"
112 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb"
113 | integrity sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==
114 |
115 | "@esbuild/win32-arm64@0.25.2":
116 | version "0.25.2"
117 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf"
118 | integrity sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==
119 |
120 | "@esbuild/win32-ia32@0.25.2":
121 | version "0.25.2"
122 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f"
123 | integrity sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==
124 |
125 | "@esbuild/win32-x64@0.25.2":
126 | version "0.25.2"
127 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d"
128 | integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==
129 |
130 | "@modelcontextprotocol/sdk@^1.6.0", "@modelcontextprotocol/sdk@^1.8.0":
131 | version "1.9.0"
132 | resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.9.0.tgz#1bf7a4843870b81da26983b8e69bf398d87055f1"
133 | integrity sha512-Jq2EUCQpe0iyO5FGpzVYDNFR6oR53AIrwph9yWl7uSc7IWUMsrmpmSaTGra5hQNunXpM+9oit85p924jWuHzUA==
134 | dependencies:
135 | content-type "^1.0.5"
136 | cors "^2.8.5"
137 | cross-spawn "^7.0.3"
138 | eventsource "^3.0.2"
139 | express "^5.0.1"
140 | express-rate-limit "^7.5.0"
141 | pkce-challenge "^5.0.0"
142 | raw-body "^3.0.0"
143 | zod "^3.23.8"
144 | zod-to-json-schema "^3.24.1"
145 |
146 | "@types/node@^20.10.5":
147 | version "20.17.30"
148 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.30.tgz#1d93f656d3b869dbef7b796568ac457606ba58d0"
149 | integrity sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==
150 | dependencies:
151 | undici-types "~6.19.2"
152 |
153 | accepts@^2.0.0:
154 | version "2.0.0"
155 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895"
156 | integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==
157 | dependencies:
158 | mime-types "^3.0.0"
159 | negotiator "^1.0.0"
160 |
161 | ansi-regex@^5.0.1:
162 | version "5.0.1"
163 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
164 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
165 |
166 | ansi-styles@^4.0.0:
167 | version "4.3.0"
168 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
169 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
170 | dependencies:
171 | color-convert "^2.0.1"
172 |
173 | asynckit@^0.4.0:
174 | version "0.4.0"
175 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
176 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
177 |
178 | axios@^1.6.7:
179 | version "1.8.4"
180 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447"
181 | integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==
182 | dependencies:
183 | follow-redirects "^1.15.6"
184 | form-data "^4.0.0"
185 | proxy-from-env "^1.1.0"
186 |
187 | body-parser@^2.2.0:
188 | version "2.2.0"
189 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.0.tgz#f7a9656de305249a715b549b7b8fd1ab9dfddcfa"
190 | integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==
191 | dependencies:
192 | bytes "^3.1.2"
193 | content-type "^1.0.5"
194 | debug "^4.4.0"
195 | http-errors "^2.0.0"
196 | iconv-lite "^0.6.3"
197 | on-finished "^2.4.1"
198 | qs "^6.14.0"
199 | raw-body "^3.0.0"
200 | type-is "^2.0.0"
201 |
202 | bytes@3.1.2, bytes@^3.1.2:
203 | version "3.1.2"
204 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
205 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
206 |
207 | call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
208 | version "1.0.2"
209 | resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
210 | integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
211 | dependencies:
212 | es-errors "^1.3.0"
213 | function-bind "^1.1.2"
214 |
215 | call-bound@^1.0.2:
216 | version "1.0.4"
217 | resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
218 | integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
219 | dependencies:
220 | call-bind-apply-helpers "^1.0.2"
221 | get-intrinsic "^1.3.0"
222 |
223 | cliui@^8.0.1:
224 | version "8.0.1"
225 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
226 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
227 | dependencies:
228 | string-width "^4.2.0"
229 | strip-ansi "^6.0.1"
230 | wrap-ansi "^7.0.0"
231 |
232 | color-convert@^2.0.1:
233 | version "2.0.1"
234 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
235 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
236 | dependencies:
237 | color-name "~1.1.4"
238 |
239 | color-name@~1.1.4:
240 | version "1.1.4"
241 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
242 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
243 |
244 | combined-stream@^1.0.8:
245 | version "1.0.8"
246 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
247 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
248 | dependencies:
249 | delayed-stream "~1.0.0"
250 |
251 | content-disposition@^1.0.0:
252 | version "1.0.0"
253 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.0.tgz#844426cb398f934caefcbb172200126bc7ceace2"
254 | integrity sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==
255 | dependencies:
256 | safe-buffer "5.2.1"
257 |
258 | content-type@^1.0.5:
259 | version "1.0.5"
260 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
261 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
262 |
263 | cookie-signature@^1.2.1:
264 | version "1.2.2"
265 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793"
266 | integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==
267 |
268 | cookie@^0.7.1:
269 | version "0.7.2"
270 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7"
271 | integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==
272 |
273 | cors@^2.8.5:
274 | version "2.8.5"
275 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
276 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
277 | dependencies:
278 | object-assign "^4"
279 | vary "^1"
280 |
281 | cross-spawn@^7.0.3:
282 | version "7.0.6"
283 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
284 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
285 | dependencies:
286 | path-key "^3.1.0"
287 | shebang-command "^2.0.0"
288 | which "^2.0.1"
289 |
290 | debug@^4.3.5, debug@^4.4.0:
291 | version "4.4.0"
292 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
293 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
294 | dependencies:
295 | ms "^2.1.3"
296 |
297 | delayed-stream@~1.0.0:
298 | version "1.0.0"
299 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
300 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
301 |
302 | depd@2.0.0, depd@^2.0.0:
303 | version "2.0.0"
304 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
305 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
306 |
307 | dotenv@^16.4.7:
308 | version "16.5.0"
309 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692"
310 | integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==
311 |
312 | dunder-proto@^1.0.1:
313 | version "1.0.1"
314 | resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
315 | integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
316 | dependencies:
317 | call-bind-apply-helpers "^1.0.1"
318 | es-errors "^1.3.0"
319 | gopd "^1.2.0"
320 |
321 | ee-first@1.1.1:
322 | version "1.1.1"
323 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
324 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
325 |
326 | emoji-regex@^8.0.0:
327 | version "8.0.0"
328 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
329 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
330 |
331 | encodeurl@^2.0.0:
332 | version "2.0.0"
333 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
334 | integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
335 |
336 | es-define-property@^1.0.1:
337 | version "1.0.1"
338 | resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
339 | integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
340 |
341 | es-errors@^1.3.0:
342 | version "1.3.0"
343 | resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
344 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
345 |
346 | es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
347 | version "1.1.1"
348 | resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
349 | integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
350 | dependencies:
351 | es-errors "^1.3.0"
352 |
353 | es-set-tostringtag@^2.1.0:
354 | version "2.1.0"
355 | resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
356 | integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
357 | dependencies:
358 | es-errors "^1.3.0"
359 | get-intrinsic "^1.2.6"
360 | has-tostringtag "^1.0.2"
361 | hasown "^2.0.2"
362 |
363 | esbuild@~0.25.0:
364 | version "0.25.2"
365 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.2.tgz#55a1d9ebcb3aa2f95e8bba9e900c1a5061bc168b"
366 | integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==
367 | optionalDependencies:
368 | "@esbuild/aix-ppc64" "0.25.2"
369 | "@esbuild/android-arm" "0.25.2"
370 | "@esbuild/android-arm64" "0.25.2"
371 | "@esbuild/android-x64" "0.25.2"
372 | "@esbuild/darwin-arm64" "0.25.2"
373 | "@esbuild/darwin-x64" "0.25.2"
374 | "@esbuild/freebsd-arm64" "0.25.2"
375 | "@esbuild/freebsd-x64" "0.25.2"
376 | "@esbuild/linux-arm" "0.25.2"
377 | "@esbuild/linux-arm64" "0.25.2"
378 | "@esbuild/linux-ia32" "0.25.2"
379 | "@esbuild/linux-loong64" "0.25.2"
380 | "@esbuild/linux-mips64el" "0.25.2"
381 | "@esbuild/linux-ppc64" "0.25.2"
382 | "@esbuild/linux-riscv64" "0.25.2"
383 | "@esbuild/linux-s390x" "0.25.2"
384 | "@esbuild/linux-x64" "0.25.2"
385 | "@esbuild/netbsd-arm64" "0.25.2"
386 | "@esbuild/netbsd-x64" "0.25.2"
387 | "@esbuild/openbsd-arm64" "0.25.2"
388 | "@esbuild/openbsd-x64" "0.25.2"
389 | "@esbuild/sunos-x64" "0.25.2"
390 | "@esbuild/win32-arm64" "0.25.2"
391 | "@esbuild/win32-ia32" "0.25.2"
392 | "@esbuild/win32-x64" "0.25.2"
393 |
394 | escalade@^3.1.1:
395 | version "3.2.0"
396 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
397 | integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
398 |
399 | escape-html@^1.0.3:
400 | version "1.0.3"
401 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
402 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
403 |
404 | etag@^1.8.1:
405 | version "1.8.1"
406 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
407 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
408 |
409 | eventsource-parser@^3.0.1:
410 | version "3.0.1"
411 | resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.1.tgz#5e358dba9a55ba64ca90da883c4ca35bd82467bd"
412 | integrity sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==
413 |
414 | eventsource@^3.0.2, eventsource@^3.0.5:
415 | version "3.0.6"
416 | resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-3.0.6.tgz#5c4b24cd70c0323eed2651a5ee07bd4bc391e656"
417 | integrity sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==
418 | dependencies:
419 | eventsource-parser "^3.0.1"
420 |
421 | express-rate-limit@^7.5.0:
422 | version "7.5.0"
423 | resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.0.tgz#6a67990a724b4fbbc69119419feef50c51e8b28f"
424 | integrity sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==
425 |
426 | express@^5.0.1:
427 | version "5.1.0"
428 | resolved "https://registry.yarnpkg.com/express/-/express-5.1.0.tgz#d31beaf715a0016f0d53f47d3b4d7acf28c75cc9"
429 | integrity sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==
430 | dependencies:
431 | accepts "^2.0.0"
432 | body-parser "^2.2.0"
433 | content-disposition "^1.0.0"
434 | content-type "^1.0.5"
435 | cookie "^0.7.1"
436 | cookie-signature "^1.2.1"
437 | debug "^4.4.0"
438 | encodeurl "^2.0.0"
439 | escape-html "^1.0.3"
440 | etag "^1.8.1"
441 | finalhandler "^2.1.0"
442 | fresh "^2.0.0"
443 | http-errors "^2.0.0"
444 | merge-descriptors "^2.0.0"
445 | mime-types "^3.0.0"
446 | on-finished "^2.4.1"
447 | once "^1.4.0"
448 | parseurl "^1.3.3"
449 | proxy-addr "^2.0.7"
450 | qs "^6.14.0"
451 | range-parser "^1.2.1"
452 | router "^2.2.0"
453 | send "^1.1.0"
454 | serve-static "^2.2.0"
455 | statuses "^2.0.1"
456 | type-is "^2.0.1"
457 | vary "^1.1.2"
458 |
459 | finalhandler@^2.1.0:
460 | version "2.1.0"
461 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.0.tgz#72306373aa89d05a8242ed569ed86a1bff7c561f"
462 | integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==
463 | dependencies:
464 | debug "^4.4.0"
465 | encodeurl "^2.0.0"
466 | escape-html "^1.0.3"
467 | on-finished "^2.4.1"
468 | parseurl "^1.3.3"
469 | statuses "^2.0.1"
470 |
471 | follow-redirects@^1.15.6:
472 | version "1.15.9"
473 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
474 | integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
475 |
476 | form-data@^4.0.0:
477 | version "4.0.2"
478 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c"
479 | integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==
480 | dependencies:
481 | asynckit "^0.4.0"
482 | combined-stream "^1.0.8"
483 | es-set-tostringtag "^2.1.0"
484 | mime-types "^2.1.12"
485 |
486 | forwarded@0.2.0:
487 | version "0.2.0"
488 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
489 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
490 |
491 | fresh@^2.0.0:
492 | version "2.0.0"
493 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4"
494 | integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==
495 |
496 | fsevents@~2.3.3:
497 | version "2.3.3"
498 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
499 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
500 |
501 | function-bind@^1.1.2:
502 | version "1.1.2"
503 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
504 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
505 |
506 | get-caller-file@^2.0.5:
507 | version "2.0.5"
508 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
509 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
510 |
511 | get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0:
512 | version "1.3.0"
513 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
514 | integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
515 | dependencies:
516 | call-bind-apply-helpers "^1.0.2"
517 | es-define-property "^1.0.1"
518 | es-errors "^1.3.0"
519 | es-object-atoms "^1.1.1"
520 | function-bind "^1.1.2"
521 | get-proto "^1.0.1"
522 | gopd "^1.2.0"
523 | has-symbols "^1.1.0"
524 | hasown "^2.0.2"
525 | math-intrinsics "^1.1.0"
526 |
527 | get-proto@^1.0.1:
528 | version "1.0.1"
529 | resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
530 | integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
531 | dependencies:
532 | dunder-proto "^1.0.1"
533 | es-object-atoms "^1.0.0"
534 |
535 | get-tsconfig@^4.7.5:
536 | version "4.10.0"
537 | resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb"
538 | integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==
539 | dependencies:
540 | resolve-pkg-maps "^1.0.0"
541 |
542 | gopd@^1.2.0:
543 | version "1.2.0"
544 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
545 | integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
546 |
547 | has-symbols@^1.0.3, has-symbols@^1.1.0:
548 | version "1.1.0"
549 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
550 | integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
551 |
552 | has-tostringtag@^1.0.2:
553 | version "1.0.2"
554 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
555 | integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
556 | dependencies:
557 | has-symbols "^1.0.3"
558 |
559 | hasown@^2.0.2:
560 | version "2.0.2"
561 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
562 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
563 | dependencies:
564 | function-bind "^1.1.2"
565 |
566 | http-errors@2.0.0, http-errors@^2.0.0:
567 | version "2.0.0"
568 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
569 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
570 | dependencies:
571 | depd "2.0.0"
572 | inherits "2.0.4"
573 | setprototypeof "1.2.0"
574 | statuses "2.0.1"
575 | toidentifier "1.0.1"
576 |
577 | iconv-lite@0.6.3, iconv-lite@^0.6.3:
578 | version "0.6.3"
579 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
580 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
581 | dependencies:
582 | safer-buffer ">= 2.1.2 < 3.0.0"
583 |
584 | inherits@2.0.4:
585 | version "2.0.4"
586 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
587 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
588 |
589 | ipaddr.js@1.9.1:
590 | version "1.9.1"
591 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
592 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
593 |
594 | is-fullwidth-code-point@^3.0.0:
595 | version "3.0.0"
596 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
597 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
598 |
599 | is-promise@^4.0.0:
600 | version "4.0.0"
601 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3"
602 | integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==
603 |
604 | isexe@^2.0.0:
605 | version "2.0.0"
606 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
607 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
608 |
609 | math-intrinsics@^1.1.0:
610 | version "1.1.0"
611 | resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
612 | integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
613 |
614 | mcp-proxy-auth@^1.0.1:
615 | version "1.0.2"
616 | resolved "https://registry.yarnpkg.com/mcp-proxy-auth/-/mcp-proxy-auth-1.0.2.tgz#980692e201706196a22bc113743af7b701c435d9"
617 | integrity sha512-vqVpdnSZbfpRpAW8m89yFWR5nfGK2QrFtlUqBjidgMyR40NYgb39A8l8gqQZqjmBtd5ZteiNFPnnw+6WFGh4Kg==
618 | dependencies:
619 | "@modelcontextprotocol/sdk" "^1.6.0"
620 | dotenv "^16.4.7"
621 | eventsource "^3.0.5"
622 | yargs "^17.7.2"
623 |
624 | media-typer@^1.1.0:
625 | version "1.1.0"
626 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561"
627 | integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==
628 |
629 | merge-descriptors@^2.0.0:
630 | version "2.0.0"
631 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808"
632 | integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==
633 |
634 | mime-db@1.52.0:
635 | version "1.52.0"
636 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
637 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
638 |
639 | mime-db@^1.54.0:
640 | version "1.54.0"
641 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
642 | integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
643 |
644 | mime-types@^2.1.12:
645 | version "2.1.35"
646 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
647 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
648 | dependencies:
649 | mime-db "1.52.0"
650 |
651 | mime-types@^3.0.0, mime-types@^3.0.1:
652 | version "3.0.1"
653 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce"
654 | integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==
655 | dependencies:
656 | mime-db "^1.54.0"
657 |
658 | ms@^2.1.3:
659 | version "2.1.3"
660 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
661 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
662 |
663 | negotiator@^1.0.0:
664 | version "1.0.0"
665 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a"
666 | integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==
667 |
668 | object-assign@^4:
669 | version "4.1.1"
670 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
671 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
672 |
673 | object-inspect@^1.13.3:
674 | version "1.13.4"
675 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
676 | integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
677 |
678 | on-finished@^2.4.1:
679 | version "2.4.1"
680 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
681 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
682 | dependencies:
683 | ee-first "1.1.1"
684 |
685 | once@^1.4.0:
686 | version "1.4.0"
687 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
688 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
689 | dependencies:
690 | wrappy "1"
691 |
692 | parseurl@^1.3.3:
693 | version "1.3.3"
694 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
695 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
696 |
697 | path-key@^3.1.0:
698 | version "3.1.1"
699 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
700 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
701 |
702 | path-to-regexp@^8.0.0:
703 | version "8.2.0"
704 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4"
705 | integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==
706 |
707 | pkce-challenge@^5.0.0:
708 | version "5.0.0"
709 | resolved "https://registry.yarnpkg.com/pkce-challenge/-/pkce-challenge-5.0.0.tgz#c3a405cb49e272094a38e890a2b51da0228c4d97"
710 | integrity sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==
711 |
712 | proxy-addr@^2.0.7:
713 | version "2.0.7"
714 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
715 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
716 | dependencies:
717 | forwarded "0.2.0"
718 | ipaddr.js "1.9.1"
719 |
720 | proxy-from-env@^1.1.0:
721 | version "1.1.0"
722 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
723 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
724 |
725 | qs@^6.14.0:
726 | version "6.14.0"
727 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930"
728 | integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==
729 | dependencies:
730 | side-channel "^1.1.0"
731 |
732 | range-parser@^1.2.1:
733 | version "1.2.1"
734 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
735 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
736 |
737 | raw-body@^3.0.0:
738 | version "3.0.0"
739 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.0.tgz#25b3476f07a51600619dae3fe82ddc28a36e5e0f"
740 | integrity sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==
741 | dependencies:
742 | bytes "3.1.2"
743 | http-errors "2.0.0"
744 | iconv-lite "0.6.3"
745 | unpipe "1.0.0"
746 |
747 | require-directory@^2.1.1:
748 | version "2.1.1"
749 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
750 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
751 |
752 | resolve-pkg-maps@^1.0.0:
753 | version "1.0.0"
754 | resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
755 | integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
756 |
757 | router@^2.2.0:
758 | version "2.2.0"
759 | resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef"
760 | integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==
761 | dependencies:
762 | debug "^4.4.0"
763 | depd "^2.0.0"
764 | is-promise "^4.0.0"
765 | parseurl "^1.3.3"
766 | path-to-regexp "^8.0.0"
767 |
768 | safe-buffer@5.2.1:
769 | version "5.2.1"
770 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
771 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
772 |
773 | "safer-buffer@>= 2.1.2 < 3.0.0":
774 | version "2.1.2"
775 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
776 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
777 |
778 | send@^1.1.0, send@^1.2.0:
779 | version "1.2.0"
780 | resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212"
781 | integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==
782 | dependencies:
783 | debug "^4.3.5"
784 | encodeurl "^2.0.0"
785 | escape-html "^1.0.3"
786 | etag "^1.8.1"
787 | fresh "^2.0.0"
788 | http-errors "^2.0.0"
789 | mime-types "^3.0.1"
790 | ms "^2.1.3"
791 | on-finished "^2.4.1"
792 | range-parser "^1.2.1"
793 | statuses "^2.0.1"
794 |
795 | serve-static@^2.2.0:
796 | version "2.2.0"
797 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9"
798 | integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==
799 | dependencies:
800 | encodeurl "^2.0.0"
801 | escape-html "^1.0.3"
802 | parseurl "^1.3.3"
803 | send "^1.2.0"
804 |
805 | setprototypeof@1.2.0:
806 | version "1.2.0"
807 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
808 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
809 |
810 | shebang-command@^2.0.0:
811 | version "2.0.0"
812 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
813 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
814 | dependencies:
815 | shebang-regex "^3.0.0"
816 |
817 | shebang-regex@^3.0.0:
818 | version "3.0.0"
819 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
820 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
821 |
822 | side-channel-list@^1.0.0:
823 | version "1.0.0"
824 | resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
825 | integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
826 | dependencies:
827 | es-errors "^1.3.0"
828 | object-inspect "^1.13.3"
829 |
830 | side-channel-map@^1.0.1:
831 | version "1.0.1"
832 | resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42"
833 | integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
834 | dependencies:
835 | call-bound "^1.0.2"
836 | es-errors "^1.3.0"
837 | get-intrinsic "^1.2.5"
838 | object-inspect "^1.13.3"
839 |
840 | side-channel-weakmap@^1.0.2:
841 | version "1.0.2"
842 | resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea"
843 | integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
844 | dependencies:
845 | call-bound "^1.0.2"
846 | es-errors "^1.3.0"
847 | get-intrinsic "^1.2.5"
848 | object-inspect "^1.13.3"
849 | side-channel-map "^1.0.1"
850 |
851 | side-channel@^1.1.0:
852 | version "1.1.0"
853 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
854 | integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
855 | dependencies:
856 | es-errors "^1.3.0"
857 | object-inspect "^1.13.3"
858 | side-channel-list "^1.0.0"
859 | side-channel-map "^1.0.1"
860 | side-channel-weakmap "^1.0.2"
861 |
862 | statuses@2.0.1, statuses@^2.0.1:
863 | version "2.0.1"
864 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
865 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
866 |
867 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
868 | version "4.2.3"
869 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
870 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
871 | dependencies:
872 | emoji-regex "^8.0.0"
873 | is-fullwidth-code-point "^3.0.0"
874 | strip-ansi "^6.0.1"
875 |
876 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
877 | version "6.0.1"
878 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
879 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
880 | dependencies:
881 | ansi-regex "^5.0.1"
882 |
883 | toidentifier@1.0.1:
884 | version "1.0.1"
885 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
886 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
887 |
888 | tsx@^4.7.0:
889 | version "4.19.3"
890 | resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.3.tgz#2bdbcb87089374d933596f8645615142ed727666"
891 | integrity sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==
892 | dependencies:
893 | esbuild "~0.25.0"
894 | get-tsconfig "^4.7.5"
895 | optionalDependencies:
896 | fsevents "~2.3.3"
897 |
898 | type-is@^2.0.0, type-is@^2.0.1:
899 | version "2.0.1"
900 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97"
901 | integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==
902 | dependencies:
903 | content-type "^1.0.5"
904 | media-typer "^1.1.0"
905 | mime-types "^3.0.0"
906 |
907 | typescript@^5.3.3:
908 | version "5.8.3"
909 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e"
910 | integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==
911 |
912 | undici-types@~6.19.2:
913 | version "6.19.8"
914 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
915 | integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
916 |
917 | unpipe@1.0.0:
918 | version "1.0.0"
919 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
920 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
921 |
922 | vary@^1, vary@^1.1.2:
923 | version "1.1.2"
924 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
925 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
926 |
927 | which@^2.0.1:
928 | version "2.0.2"
929 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
930 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
931 | dependencies:
932 | isexe "^2.0.0"
933 |
934 | wrap-ansi@^7.0.0:
935 | version "7.0.0"
936 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
937 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
938 | dependencies:
939 | ansi-styles "^4.0.0"
940 | string-width "^4.1.0"
941 | strip-ansi "^6.0.0"
942 |
943 | wrappy@1:
944 | version "1.0.2"
945 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
946 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
947 |
948 | y18n@^5.0.5:
949 | version "5.0.8"
950 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
951 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
952 |
953 | yargs-parser@^21.1.1:
954 | version "21.1.1"
955 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
956 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
957 |
958 | yargs@^17.7.2:
959 | version "17.7.2"
960 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
961 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
962 | dependencies:
963 | cliui "^8.0.1"
964 | escalade "^3.1.1"
965 | get-caller-file "^2.0.5"
966 | require-directory "^2.1.1"
967 | string-width "^4.2.3"
968 | y18n "^5.0.5"
969 | yargs-parser "^21.1.1"
970 |
971 | zod-to-json-schema@^3.24.1:
972 | version "3.24.5"
973 | resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz#d1095440b147fb7c2093812a53c54df8d5df50a3"
974 | integrity sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==
975 |
976 | zod@^3.23.8, zod@^3.24.2:
977 | version "3.24.2"
978 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3"
979 | integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==
980 |
--------------------------------------------------------------------------------