From 431fb962466ec5a95e0cadab80b1deace3def481 Mon Sep 17 00:00:00 2001 From: Harsh Mishra Date: Thu, 18 Jun 2026 01:13:41 +0530 Subject: [PATCH] Add branded server icon and rewrite README for onboarding --- README.md | 65 +++++++++++++++++++++++++++++++++++++------------ icon.png | Bin 4880 -> 6470 bytes package.json | 4 +-- server.json | 9 ++++++- xmcp.config.ts | 16 ++++++++++++ yarn.lock | 35 +++++++++++++++++++++----- 6 files changed, 105 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 0f4787a..e0e397a 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,46 @@ +
+ +LocalStack MCP Server + # LocalStack MCP Server +**Let an AI agent manage and interact with LocalStack on your machine.** + +[![npm version](https://img.shields.io/npm/v/@localstack/localstack-mcp-server)](https://www.npmjs.com/package/@localstack/localstack-mcp-server) +[![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](./LICENSE) +[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-localstack-blue)](https://registry.modelcontextprotocol.io/) + +
+ > [!IMPORTANT] > The LocalStack MCP server is currently available as an experimental public preview. For questions, issues or feedback, please utilize the [LocalStack Community slack](https://slack.localstack.cloud) or submit a [GitHub Issue](https://github.com/localstack/localstack-mcp-server/issues) -A [Model Context Protocol](https://modelcontextprotocol.io/docs/getting-started/intro) (MCP) server that provides tools to manage and interact with your [LocalStack for AWS](https://www.localstack.cloud/localstack-for-aws) container for simplified local cloud development and testing. The LocalStack MCP Server provides simplified integration between MCP-compatible apps and your local LocalStack for AWS development environment, enabling secure and direct communication with LocalStack's emulated services and additional developer experience features. +LocalStack emulates the cloud on your local machine so software teams and AI agents can validate security, quality, and reliability faster and more safely than the cloud allows. This [Model Context Protocol](https://modelcontextprotocol.io/docs/getting-started/intro) (MCP) server lets any MCP client (Cursor, Claude, VS Code, and more) start LocalStack, deploy infrastructure, and debug your local cloud in natural language. -This server eliminates custom scripts and manual LocalStack management with direct access to: +## Quick start + +Set up the server in your MCP client with the interactive wizard: + +```bash +npx -y @localstack/localstack-mcp-server init +``` + +The wizard detects your installed clients, asks how you want to run the server, and writes the configuration for you. You need a LocalStack Auth Token; the wizard reads `LOCALSTACK_AUTH_TOKEN` from your environment or asks for it. For the full options, prerequisites, and manual setup, see [Installation](#installation). + +## What you can ask your agent + +Once the server is configured, talk to LocalStack through your agent in natural language: + +- "Start LocalStack and deploy the Terraform project in `./infra`, then tell me which resources came up." +- "My Lambda calls are failing. Read the LocalStack logs, find the permission errors, and generate an IAM policy that fixes them." +- "Inject 500ms of latency into DynamoDB and confirm my retry logic still works." +- "Search the LocalStack docs for how to enable S3 event notifications and summarize the steps." + +## How it works + +The server connects MCP-compatible apps directly to your local LocalStack environment and its emulated AWS services, so your assistant can operate the stack securely without custom scripts or manual setup. + +This server eliminates custom scripts and manual LocalStack management. Your agent can: - Start, stop, restart, and monitor LocalStack for AWS container status with built-in auth. - Deploy CDK, Terraform, and SAM projects with automatic configuration detection. @@ -19,9 +54,8 @@ This server eliminates custom scripts and manual LocalStack management with dire - Replicate external AWS resources into LocalStack with [AWS Replicator](https://docs.localstack.cloud/aws/tooling/aws-replicator/) so IaC stacks can resolve shared dependencies locally. - Inspect LocalStack application flows with [App Inspector](https://docs.localstack.cloud/aws/capabilities/web-app/app-inspector/) traces, spans, events, payload metadata, and IAM policy evaluations. - Start repeatable LocalStack workflows from ready-made MCP prompts, including infrastructure validation and integration test generation. -- Connect AI assistants and dev tools for automated cloud testing workflows. -## Tools Reference +## Tools This server provides your AI with dedicated tools for managing your LocalStack environment: @@ -43,18 +77,19 @@ This server provides your AI with dedicated tools for managing your LocalStack e | [`localstack-aws-replicator`](./src/tools/localstack-aws-replicator.ts) | Replicates external AWS resources into a running LocalStack instance | - Start single-resource replication jobs with a resource type and identifier or ARN
- Start batch replication jobs, such as SSM parameters under a path prefix
- Poll job status by job ID and list existing jobs
- List resource types supported by the running Replicator extension
- Reads source AWS credentials from the MCP server environment and supports optional target account or region overrides | | [`localstack-app-inspector`](./src/tools/localstack-app-inspector.ts) | Inspects LocalStack application traces, spans, events, and IAM evaluations | - Enable or disable App Inspector for the running LocalStack instance
- List and inspect traces to understand AWS service-to-service flows
- Drill into spans, events, payload metadata, and IAM policy evaluation events
- Filter by service, region, operation, resource, ARN, status, and time range
- Requires a valid LocalStack Auth Token and the App Inspector feature in the connected LocalStack license | | [`localstack-docs`](./src/tools/localstack-docs.ts) | Searches LocalStack documentation through CrawlChat | - Queries LocalStack docs through a public CrawlChat collection
- Returns focused snippets with source links only
- Helps answer coverage, configuration, and setup questions without requiring LocalStack runtime | +| [`localstack-snowflake-client`](./src/tools/localstack-snowflake-client.ts) | Runs SQL against the LocalStack Snowflake emulator through the `snow` CLI | - Execute SELECT, DDL (CREATE/DROP), DML (INSERT/UPDATE/DELETE), and SHOW/DESCRIBE statements from a query string or a `.sql` file
- Check the Snowflake connection before running queries
- Set optional database, schema, warehouse, and role context per query
- Requires the Snowflake CLI (`snow`) and a valid LocalStack Auth Token | ## Prompts Prompts are user-selected workflow templates exposed by MCP clients as slash commands or quick actions. They frame multi-step LocalStack tasks so the assistant follows the same phases, evidence requirements, and reporting format every time. -| Prompt Name | Description | Arguments | -| :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------- | -| `infrastructure-tester` | Deploys an IaC project to LocalStack, validates declared resources with live AWS probes and App Inspector evidence, then writes and runs deterministic integration tests. | `iac_path` (required), `iac_type`, `test_language`, `test_framework`, `mode`, `services_focus` | +| Prompt Name | Description | Arguments | +| :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------ | +| `infrastructure-tester` | Deploys an IaC project to LocalStack, validates declared resources with live AWS probes and App Inspector evidence, then writes and runs deterministic integration tests. | `iac_path` (required), `iac_type`, `test_language`, `test_framework`, `mode`, `services_focus`, `user_focus` | ## Installation -### Quick Setup (Wizard) +### Set up with the wizard (recommended) The fastest way to install the MCP server is the interactive setup wizard: @@ -84,9 +119,7 @@ npx -y @localstack/localstack-mcp-server remove Run `npx -y @localstack/localstack-mcp-server init --help` for all options. -### Setup using npx - -#### Prerequisites +### Prerequisites - [LocalStack CLI](https://docs.localstack.cloud/getting-started/installation/#localstack-cli) and Docker installed in your system path - [`cdklocal`](https://github.com/localstack/aws-cdk-local), [`tflocal`](https://github.com/localstack/terraform-local), or [`samlocal`](https://github.com/localstack/aws-sam-cli-local) installed in your system path if you want to deploy CDK, Terraform, or SAM projects @@ -94,7 +127,7 @@ Run `npx -y @localstack/localstack-mcp-server init --help` for all options. - A [valid LocalStack Auth Token](https://docs.localstack.cloud/aws/getting-started/auth-token/) configured as `LOCALSTACK_AUTH_TOKEN` (**required for all MCP tools**) - [Node.js v20](https://nodejs.org/en/download/) or higher installed in your system path -#### Configuration +### Run with npx Add the following to your MCP client's configuration file (e.g., `~/.cursor/mcp.json`). This configuration uses `npx` to run the server, which will automatically download and install the package if needed. LocalStack and any deployment CLIs used by tools run from your host PATH. @@ -114,6 +147,8 @@ Add the following to your MCP client's configuration file (e.g., `~/.cursor/mcp. All LocalStack MCP tools require `LOCALSTACK_AUTH_TOKEN` to be set. You can get your LocalStack Auth Token by following the official [documentation](https://docs.localstack.cloud/aws/getting-started/auth-token/). +### Run from source + If you installed from source, change `command` and `args` to point to your local build: ```json @@ -130,7 +165,7 @@ If you installed from source, change `command` and `args` to point to your local } ``` -### Setup using Docker +### Run with Docker The `localstack/localstack-mcp-server` Docker image bundles the LocalStack CLI, `awslocal`, Terraform/`tflocal`, CDK/`cdklocal`, SAM/`samlocal`, Snowflake CLI, and Docker CLI. The only required host dependency is Docker. The container uses the mounted Docker socket to run LocalStack as a sibling container on the host. @@ -162,10 +197,10 @@ If you use the deployer tool with local Terraform, CDK, or SAM projects, bind-mo See **[docs/DOCKER.md](./docs/DOCKER.md)** for the run command, MCP client config, IaC project mounts, CDK notes, and troubleshooting. -## LocalStack Configuration +## LocalStack configuration | Variable Name | Description | Default Value | -| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | | `LOCALSTACK_AUTH_TOKEN` (**required**) | The LocalStack Auth Token to use for the MCP server | None | | `MAIN_CONTAINER_NAME` | The name of the LocalStack container to use for the MCP server | `localstack-main` | | `MCP_ANALYTICS_DISABLED` | Disable MCP analytics when set to `1` | `0` | diff --git a/icon.png b/icon.png index 06ec5c3077369bd6a962186109e01c64776b93b9..dcccc52b226d1a91df563661ad821c294c0cca8c 100644 GIT binary patch literal 6470 zcmcIpc{o)6_rG&p%aCY@k}@&FkiC+WTsuR^t|1~zlC|v1Oq*mMgM1=m$yOoR*C}Ps zmXs|bS;`vO^S!>G-@m^xm9pL5TRFf!2QWEWru0Dx0hN5dEZP{=I` zU}Hfp*4}we$c4pTPg?`n-TTn%auWdH(3Y--s;PhKTv|vsPBWyrpbx}B-nC&|< zFgv#O7t&)(A=78C1fpMJzut25zvh_lw_V6#p!kqHt*-?1?k^t>+jS*uOF(3eF3F{j zk=M$l9PMvdbcbiRW%pV}H<@#LC@BaIopt+*gIJhhfvb%s;kS(M2icEF__I~@v zkru(CXT`wilyPyhlTT?IO6XUWD?&0AdUXQqK>&>o^oZX`(-P0Wf z?Q?h_N#XvcM4U}fud>s8pBQLr7FCo-c6oW>crO%6ExGcp4Q#hl zByxxAWmxy^C>$WU7y+n{Gb;v%q(xuJEI#5Wrb6RhP_wmnYr@aeyY7*Y{+ijy7w{g) zc4$UJuNg=AuHsWy0hR11GFzWgz;g@p!qZ=2M4iAG@7E z3*NO6BP)G*&5R_KFHVUY%LPP!y!H9J13puVBv%&=*#?fr)EETy<}*7$($2Yc&NpkNm@aNul(CWv~Q42Y<<-bZNfg0)P*xZx6{*qr~w zz2a^DbDX2Sn^>c~dY#5n%9gK&%2Da)a{?9*p8WCsp(O6=F(cw9WHz1Elgva>MV*SF zMt1JRay@DpGKt-^`zERAmy3^h4eeXa34MWCJbnxPSi>qKmWXMgP1pP2-h0iLi>LmsmB!eJ=wgj0Y0dACW1K|&OebVblHdJPpg?~6rR1gnU$767HQP9 zxCHiG6u~UAS4wJ;2KMP-VFFppsAM%U=z=g~vXM1N4b$Ba;auPsPxhhz7@8GoEVBlY z#kN&Fe-ul=^_aE|yWmWCDC8RIMilsj!drn)Y%jgl`>2`(M3$D=uAq$-P`Ti3RHKLt!btve&$!pD}$F$djkZvqIaweQ_Uy@?P^( z$a+nXpIWhI*bkb&NR_w}k7xFngmU^xO5YZ@W0&=XjQ)^v&Q*OzpR|d^hJ6N^4oH+# z=2ag_3a#XcQ_-p0AL}lm#|Xcq!>Eiq8QFivlt_QI<fu;H)sB|-4hhFO8a~LmsmO#ev@tduEc_uW6!9PJ|Q(Fzem~1|qi|A{!diXIW zyxl{o?q96TMmnk6+^eFn-lP)7GvoQ~xf3WxF|3V4-8i3fXxUK<{kV-lX`%y?lF|k9 zP3kI}B(|?K;$ts8M&)#Y4#Ro@M=3i!AvIg$n|T_Ga%i~tj>X5VmfJ;X&&cTZtqYuQ zj)dzDMM1TmiLh>nBf2lbBv#B6ZK`9p@TGJPPTxiu0cXqIcRIIo5<@D0+3ocM9_FAs zZ&+GC^?R$@(bo_=#{LJ+?w>H^1QZ}uggS?Qi+6BmSyWPfbtI8|qFnQzL~_PgJ@B-e zl%Uvt#|QsC5Z?WHzs1LQO!)_&M#F$u{)_ZDsCw{=BZgp|w;$6Y?anWOJAvos;{{k+ zcP%|Wd;kNY|H9E)V2n#^3MqTj_bB>W(^AYQS>Hm*{f>NiZtO`J@?7Ma)cJmuaXz33 zRiZmu3)L3u(y^$H$X;PepBz=%C+2nDf_?*y@h;^$%FVXc89Z(m-G@I#&1uz{lC>_r^g){)(U% ztydEaN~7KhB*Ln-&t5Glk!35lhwGmId7f1d-TzI!_vnPSG>Wx)(3c0JbJRo=jG5N$ zHb>LmkpxI~9jSn{ir+#(=Yi)9ggX}a`^WVd)pp9bIK2lL^g4|G;=mD?f?*^^atZdI z9WN$PRF@;4#ye2S{I_v&=U7r41Zd=^iub*a44QyESDm2Z)mm0A3t?Nzm}B6^I(|&8 zBDg0}7k=ltPrlg_x0h70Qm~U6K~GW?t0jeY3CfBm(`2e&K$5GS zm_@eJL3(HxM^tYh%1wFUO(U0z{z!q+`rLZFizztp;zRy7Iln%BYQ%QwZ9zUUyxw2?vz04{ioj%%R&k@(p zZa4HJy#K{nup&dm`I)iDTZ|_@O_3SX&7)Yqlt}idb&N1EI^%_=t&mQX|MG=Pje#Kr zmC~GwO!vFglPDb5x+xKxtZ0A5k_G*RhpqwUOM1svxco|?!L=VaC|ZW8+hFSPO(L5n zc;O4qs1m^Y=$G4QfrGvhhf~K(BkyD2xKiT3GDjONn7y^E`JO_8-G3Eb3SvcZ^sYBX z3t>GNywM?&U8xpeAvJINJkUECkh!R`Y$8qRuqVot3t+luFHR`F)?FA<1qXaJ=W=a8 zR4+Tqx~wv6uI=seXP_3RI}hW>F7jXqd0oi?_a4vIWI|f;E;QIN=gNPD4w0ruj>jcW zKMyv>w1@^8fQ6QYy*|nC0C-x5ad!;IEoAa+Cl5(=6De|qM?mmM+w9~y)ap-|*2$9u zFE^Nh$NJ*ooX~6pIk6e%x0vqO{NegcNOH*_0m?B4JVuw-t2e&39nDnA&85D)iRn)G zs0}{YY{M)@ls$k1LduVZL+s;a>{7Bh#=zb03nS>UTMi{D)_AR2NpGIDUR}S zqsW?q5i>E-`&h4W_MlC@ZA2(9S*nf8ZFk7foWbP&800fg^ZO`d$(1V?9?z@FqJ9!55 zadm3>h9V0_r*kp0`kQBCh*&jwg<0aM_OPle>4|f#Vxq!J|8E8U1`k5V1Kyh~^DV*jPehx3cgAwM#(K4 z_Ib`ZY)$S8D}5)mWPGjpmBV(e2B*<`aj{*;Op%-^i@0B8HMJ(KWp#6A|BU0&B(|QUzD|$6D`PsR&4muas520fca6Sm9vB@ znXex4P$2uP%lLi>sWR7KeQ-+?y; zPaje@UAZJ0=g!~E8>W%>NlfSf*c8j{vlG{kNd*AAE%&p~SfOt70SM!0Pl2diYgY@x zD}=b2(msjJ&nS9kdzOjgpe2#By>!_?th&!q zGja3P=2FiguavewTrV#c?rT+LZ{sGF+bHet`O$r@ve>UZso8L}?8Xj{%kf||w|q(i zhn-S%SN*9tYBEQ;y!a6@Km894XN_h|*yIEgqP6!qZho6wv-*QKce)~0IN!FA@yrOI zB-pOM=Lq%GPk}lX4xbXG{8FsPwDf(Z!m1&?RTse!H&`zN$RQ8EEn2bJWXH(%)#zb& z?%fn@7I1J9yrIIWLw_6Mln4iFI&owGYTC9H7j>|=^?5MdjdBD2f;c02gU!coH60<; zC&{_c<$cVuoEjWu2hcRh_4RTpB)|F0Y&}xPKKW#62xB9>u`XV?V=fyfooJ) zzG(dWOB{uL$COGAO)pc_yL`TkFE02>ic*ra|#u zp{!8>H#yf=d~F}(`R}^b;*87`r0#=kDZ@gnnxU#$F_3-;sR`+FrwEixFKe7#os5$q zh&(S@QY~y3$wg2}!vj;<7;|$8lwQb9wBF<$9iv%W}K90JfGO<&&q=vS%zm-HjW_%P~`Y)v1b!fun@xCPZ>Uh-5R8u?7NY+9O z?J`t`??%Ar?%_v9TjSVs0$y-O@fGy6XF#An*T%dEp#{J zn=__a8_e3QS_)R-8?gLAO@I#$m?n~?nv&E|_o9|!?>61|6jzJb=&wiDS1`jHeK8ye z;!62`sr&l+-<1a6fA=cg)w#{Mxi1b$=6WGkWatjT8EtU3@Hy*7 z=Jxab;_J$l{!(-yl#a7!;<(Hw?F_2`$ge2;^ z5vVy)slza`wE%_FLR`doVTScu;0FJ*zUDSe*1u&ZyYg{1{YZFlkXhJ=b4<=Wn#l5v0XNa49{RP2HOcb(M)$S{k3 zwf-}kF8JBXNbJP3qO8PQSsjJX*x(}L#^4^}rCjD0`?RCZ@P>wtO)HOnt=r;!U^j?n zhHERw{ld1Lo-OJ!cQ64of#G+%&##i6m8RtxIR0TJwQ3pXmd@Ss2^saYE-8wp4TKx( z_!VKee8>7`$Ke|JmaxF*t$iW8dM_yG??vuE4s^lrvv_d%N0x3_2n7ANq)JF>6R_ z)$gBOVa2@~qkMiyQm~#dj>8`)s&hP?D>OmqmAK^R~O8yBGPY6Ty zVcSb_uy0rtX8p{k_}418w<2OqpA5UfC~leF0CO8qoHNQ0+*PXRRtai;DW-h+y7x&4 zkuDb;!JMNMEb`UFx(CaWEs-RR?3lP?5@5TmI>xvLv1! z@IheDYLG^zdPrTJ98R+h_=_q!`vJQr8jA+jwO=T;eD_08f4VOrbR5II!73>j{GPMM zc_KOZ$zCvAB9wK}Y@SnZhqv2PwnGu^9J;$_4xU-&7LXQ4edRYXQHlv!eJHjJyZ2wTO%d%|C~jZ zqyF*Pvn@D!eevJ0u&XB%!b%a3o*W?BO;wvb{VgiGJB=t7%D46~0KwtXdD?{ZV7<+z zNYqn}J>0J&0@E#nmc2+R+Y?9vo<<(=&h=l|9pFE?(cF$q#n_J#Y;<1P7JKGARe|Sy z^)Tm&I2s%G&Kbp88KH*xAI>)Nig8gqPZ6->!^n-l^iBNt-E=02q8ktJp>GaanMb@qFxO5j3iDOKkL$7`;m($QC(h-z0@xI2!nxL?S z?N-&r1p$-C*%0C;(z%`&ZTxETiILZ+nS7q;`TSePA&|w@JJ0+hHUOtKmxYbTr{o+KJuGlg+Xlxd1zPJt3KVr{$nU zSl~{$7$1+<9T0nkFm@QIhG?)&;A-LOXG3}Eab%HQJN@t%(N`l74EVX_cQj<;yRh(u z#f$Lx`+|wsz^M$@r`6ixw+m+5lXqP|4+e=I<@ukz6?iDK%SFrZTho{_P(oge0J@q6 K8ii_hcm4zE4t^B? literal 4880 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 XpAjYR>G8gYzunQ64i**2zi$2qL?Qcs diff --git a/package.json b/package.json index 8eb647d..f528e87 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "scripts": { "build": "xmcp build && yarn build:cli", - "build:cli": "esbuild src/cli/index.ts --bundle --platform=node --format=cjs --target=node20 --tsconfig=tsconfig.cli.json --alias:jsonc-parser=jsonc-parser/lib/esm/main.js --outfile=dist/cli.js --external:./stdio.js \"--banner:js=#!/usr/bin/env node\" --log-level=warning", + "build:cli": "esbuild src/cli/index.ts --bundle --platform=node --format=cjs --target=node22 --tsconfig=tsconfig.cli.json --alias:jsonc-parser=jsonc-parser/lib/esm/main.js --outfile=dist/cli.js --external:./stdio.js \"--banner:js=#!/usr/bin/env node\" --log-level=warning", "dev": "xmcp dev", "start": "node dist/stdio.js", "prepack": "yarn build", @@ -21,7 +21,7 @@ "dependencies": { "dockerode": "^4.0.7", "posthog-node": "5.0.0", - "xmcp": "0.6.4", + "xmcp": "^0.6.11", "zod": "4.3.6" }, "devDependencies": { diff --git a/server.json b/server.json index c824217..09f96c5 100644 --- a/server.json +++ b/server.json @@ -1,5 +1,5 @@ { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", "name": "io.github.localstack/localstack-mcp-server", "description": "A LocalStack MCP Server providing essential tools for local cloud development & testing", "status": "active", @@ -8,6 +8,13 @@ "source": "github" }, "version": "0.4.0", + "icons": [ + { + "src": "https://raw.githubusercontent.com/localstack/localstack-mcp-server/main/icon.png", + "mimeType": "image/png", + "sizes": ["256x256"] + } + ], "packages": [ { "registry_type": "npm", diff --git a/xmcp.config.ts b/xmcp.config.ts index d0a6556..a5a7766 100644 --- a/xmcp.config.ts +++ b/xmcp.config.ts @@ -1,5 +1,8 @@ import { type XmcpConfig } from "xmcp"; +const ICON_URL = + "https://raw.githubusercontent.com/localstack/localstack-mcp-server/main/icon.png"; + const config: XmcpConfig = { stdio: true, paths: { @@ -8,6 +11,19 @@ const config: XmcpConfig = { typescript: { skipTypeCheck: true, }, + template: { + name: "LocalStack", + description: + "Manage and interact with LocalStack for local cloud development and testing", + homePage: "https://www.localstack.cloud", + icons: [ + { + src: ICON_URL, + mimeType: "image/png", + sizes: ["256x256"], + }, + ], + }, }; export default config; diff --git a/yarn.lock b/yarn.lock index 3903cd5..0873b83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1252,7 +1252,30 @@ "@jsonjoy.com/buffers" "^1.0.0" "@jsonjoy.com/codegen" "^1.0.0" -"@modelcontextprotocol/sdk@^1.25.3", "@modelcontextprotocol/sdk@^1.27.1": +"@modelcontextprotocol/sdk@^1.26.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz#79786d8b525e269de850ac82b1f1f757f3915f44" + integrity sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ== + dependencies: + "@hono/node-server" "^1.19.9" + ajv "^8.17.1" + ajv-formats "^3.0.1" + content-type "^1.0.5" + cors "^2.8.5" + cross-spawn "^7.0.5" + eventsource "^3.0.2" + eventsource-parser "^3.0.0" + express "^5.2.1" + express-rate-limit "^8.2.1" + hono "^4.11.4" + jose "^6.1.3" + json-schema-typed "^8.0.2" + pkce-challenge "^5.0.0" + raw-body "^3.0.0" + zod "^3.25 || ^4.0" + zod-to-json-schema "^3.25.1" + +"@modelcontextprotocol/sdk@^1.27.1": version "1.27.1" resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.27.1.tgz#a602cf823bf8a68e13e7112f50aeb02b09fb83b9" integrity sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA== @@ -4958,12 +4981,12 @@ wsl-utils@^0.1.0: dependencies: is-wsl "^3.1.0" -xmcp@0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/xmcp/-/xmcp-0.6.4.tgz#b0ed5e955e88d0f061ffd9df9534d9c7340fdf50" - integrity sha512-aigY10YfKfG7BZ2MCq+Lbudgp25F28at8IzXt/rDYAD+iBfUeMsTkzCAO4s81L0miVCtJUB3arY8s4/hY3FsSA== +xmcp@^0.6.11: + version "0.6.11" + resolved "https://registry.yarnpkg.com/xmcp/-/xmcp-0.6.11.tgz#b36857b5fdb250ae3763d0f30ad51f4ff88656a7" + integrity sha512-quQg1sgZlWlB9w6wPpTGhe2ZzNXyXJdc6wi7UoTa29xM/p6Ir272+noqcrawGPHOKm2L98NIUI36r/ee4fG0Hw== dependencies: - "@modelcontextprotocol/sdk" "^1.25.3" + "@modelcontextprotocol/sdk" "^1.26.0" "@rspack/core" "^1.6.7" jose "^6.1.3" postcss-loader "^8.2.0"