@useswarm/mcp
Advanced tools
@@ -54,3 +54,3 @@ /** | ||
| auth: z.object({ | ||
| mode: z.enum(["agent_login", "cookie_injection"]).optional().describe("Auth mode. 'agent_login' (default) uses username+password; 'cookie_injection' uses session cookies + a startUrl (skips login entirely — agent starts already authenticated on the dashboard)."), | ||
| mode: z.enum(["agent_login", "cookie_injection", "signup"]).optional().describe("Auth mode. 'agent_login' (default) uses username+password against an existing account; 'cookie_injection' uses session cookies + a startUrl (skips login — agent starts already authenticated); 'signup' takes one base email and gives each persona a unique `local+<hash>@domain` sub-alias to register with, so synthetic users land in isolated inboxes."), | ||
| // Login mode | ||
@@ -70,4 +70,7 @@ loginUrl: z.string().url().optional().describe("Login page URL (login mode only; defaults to targetUrl)"), | ||
| })).optional().describe("Session cookies for cookie_injection mode. Each cookie needs name/value/domain at minimum. Other fields (path, secure, httpOnly, sameSite) are optional and accept null."), | ||
| // Signup mode | ||
| signupEmail: z.string().email().optional().describe("Base email for signup mode, e.g. 'you@yourdomain.com'. Each persona gets a unique `local+<hash>@domain` alias derived from this. Use a provider that supports plus-addressing (Gmail, Fastmail, custom domains) so all aliases route back to one inbox."), | ||
| signupPassword: z.string().min(1).max(256).optional().describe("Optional shared password the agent uses when filling sign-up forms. If omitted, the runtime mints a strong random password per persona-run (not persisted — accounts are throwaway)."), | ||
| // Shared | ||
| startUrl: z.string().url().optional().describe("URL to land on after auth. Recommended for cookie_injection — the post-auth dashboard URL. For login mode, overrides the default post-login redirect."), | ||
| startUrl: z.string().url().optional().describe("URL to land on after auth. Recommended for cookie_injection — the post-auth dashboard URL. For login mode, overrides the default post-login redirect. For signup, can pre-navigate to the sign-up form."), | ||
| }).optional().describe("Auth setup if the site requires it. WARNING: Use test-only accounts — credentials/cookies may pass through the relay server."), | ||
@@ -152,3 +155,8 @@ }, async (params) => { | ||
| if (!auth.mode) { | ||
| auth.mode = auth.cookies && auth.cookies.length > 0 ? "cookie_injection" : "agent_login"; | ||
| if (auth.cookies && auth.cookies.length > 0) | ||
| auth.mode = "cookie_injection"; | ||
| else if (auth.signupEmail) | ||
| auth.mode = "signup"; | ||
| else | ||
| auth.mode = "agent_login"; | ||
| } | ||
@@ -164,2 +172,10 @@ // Validate mode-specific requirements early so the caller gets a clear error. | ||
| } | ||
| else if (auth.mode === "signup") { | ||
| if (!auth.signupEmail) { | ||
| return { | ||
| content: [{ type: "text", text: "Error: signup mode requires `auth.signupEmail` (a base email — each persona gets a unique +<hash> alias)." }], | ||
| isError: true, | ||
| }; | ||
| } | ||
| } | ||
| else if (!auth.username || !auth.password) { | ||
@@ -166,0 +182,0 @@ return { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"dev-loop.js","sourceRoot":"","sources":["../../src/tools/dev-loop.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"dev-loop.js","sourceRoot":"","sources":["../../src/tools/dev-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,eAAe,EACf,cAAc,EACd,WAAW,GAGZ,MAAM,yBAAyB,CAAC;AAGjC,oDAAoD;AACpD,IAAI,eAAe,GAAkB,IAAI,CAAC;AAC1C,IAAI,oBAAoB,GAAkB,IAAI,CAAC;AAC/C,IAAI,eAAe,GAAkB,IAAI,CAAC;AAC1C,IAAI,aAAa,GAAkB,IAAI,CAAC;AACxC,IAAI,iBAAiB,GAAgB,IAAI,CAAC;AAE1C,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,GAAc;IACpE,kEAAkE;IAClE,MAAM,CAAC,IAAI,CACT,UAAU,EACV;;;;;;;;;;;;;;0EAcsE,EACtE;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wGAAwG,CAAC;QACxI,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oGAAoG,CAAC;QACtI,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uEAAuE,CAAC;QACpH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yFAAyF,CAAC;QACpJ,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kUAAkU,CAAC;QAC9W,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sMAAsM,CAAC;QAC7P,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACrG,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC3F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACtE,2FAA2F;QAC3F,2EAA2E;QAC3E,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACb,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8VAA8V,CAAC;YAC/a,aAAa;YACb,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YACzG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC7F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACvF,wBAAwB;YACxB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;gBACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;gBAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;gBAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;gBAC1B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;gBAC7B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;gBAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;aAC/B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0KAA0K,CAAC;YACnM,cAAc;YACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yPAAyP,CAAC;YAC9S,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sLAAsL,CAAC;YACtP,SAAS;YACT,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yMAAyM,CAAC;SAC1P,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8HAA8H,CAAC;KACvJ,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YACjC,kCAAkC;YAClC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,SAAS,GAAG,UAAU,SAAS,EAAE,CAAC;YACpC,CAAC;YAED,IAAI,UAAU,GAAG,EAAE,CAAC;YAEpB,wFAAwF;YACxF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACpC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpD,OAAO;4BACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,CAAC,6GAA6G,EAAE,CAAC;4BAChL,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,IAAI,UAA8B,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAA6B,uBAAuB,CAAC,CAAC;oBACpF,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC;gBACvC,CAAC;gBAAC,MAAM,CAAC;oBACP,6CAA6C;gBAC/C,CAAC;gBAED,MAAM,UAAU,GAAwB;oBACtC,cAAc,EAAE,UAAU;oBAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBAC5D,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC;oBAC7B,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAC9C,eAAe,GAAG,SAAS,CAAC;oBAC5B,UAAU,GAAG,YAAY,SAAS,MAAM,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC;oBACjF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACjB,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;wBAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;wBAChG,UAAU,IAAI,kCAAkC,SAAS,cAAc,MAAM,CAAC,UAAU,aAAa,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC9H,CAAC;oBACD,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;gBACzB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,eAAe,GAAG,SAAS,CAAC;gBAC5B,eAAe,GAAG,SAAS,CAAC;gBAC5B,oBAAoB,GAAG,IAAI,CAAC;YAC9B,CAAC;YAED,yBAAyB;YACzB,MAAM,IAAI,GAA4B;gBACpC,SAAS;gBACT,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,gBAAgB,EAAE;oBAChB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;oBAClC,mBAAmB,EAAE,MAAM,CAAC,eAAe;iBAC5C;aACF,CAAC;YAEF,IAAI,MAAM,CAAC,QAAQ;gBAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YACrD,IAAI,MAAM,CAAC,QAAQ;gBAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YACrD,IAAI,MAAM,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAE5C,oDAAoD;YACpD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,8GAA8G,CAAC,CAAC;YAChI,CAAC;YAED,qFAAqF;YACrF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAEhC,kFAAkF;gBAClF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACf,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;wBAAE,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;yBACvE,IAAI,IAAI,CAAC,WAAW;wBAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;;wBAC3C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;gBACjC,CAAC;gBAED,8EAA8E;gBAC9E,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC/C,OAAO;4BACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAyE,EAAE,CAAC;4BAC5G,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAClC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACtB,OAAO;4BACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2GAA2G,EAAE,CAAC;4BAC9I,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC5C,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uEAAuE,EAAE,CAAC;wBAC1G,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,gGAAgG;gBAChG,IAAI,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnD,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACzD,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC;gBAClC,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnD,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACzD,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC;gBAClC,CAAC;gBAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAA6C,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAChG,aAAa,GAAG,IAAI,CAAC,OAAO,IAAK,IAAgC,CAAC,EAAY,IAAI,IAAI,CAAC;YACvF,iBAAiB,GAAG,IAAI,IAAI,EAAE,CAAC;YAE/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,qBAAqB,CAAC;YACrE,MAAM,UAAU,GAAG,GAAG,MAAM,2BAA2B,aAAa,EAAE,CAAC;YAEvE,MAAM,QAAQ,GAA4B;gBACxC,GAAI,IAAe;gBACnB,YAAY,EAAE,UAAU;gBACxB,QAAQ,EAAE;oBACR,MAAM,EAAE,UAAU,IAAI,IAAI;oBAC1B,SAAS,EAAE,eAAe;oBAC1B,QAAQ,EAAE,eAAe;oBACzB,UAAU;oBACV,SAAS,EAAE,iBAAiB,CAAC,WAAW,EAAE;oBAC1C,QAAQ,EAAE,gCAAgC,aAAa,2EAA2E,UAAU,EAAE;iBAC/I;aACF,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACrG,CAAC;IACH,CAAC,CACF,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,IAAI,CACT,WAAW,EACX;;;;;;;;;;iEAU6D,EAC7D;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC3D,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;KAC7G,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YACvE,MAAM,cAAc,GAAG,KAAK,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,IAA6B,CAAC;YAElC,YAAY;YACZ,OAAO,IAAI,EAAE,CAAC;gBACZ,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAA0B,kBAAkB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBAElF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAC;gBACrC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;oBAC7E,MAAM;gBACR,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACvC,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;oBACzB,yBAAyB;oBACzB,OAAO;wBACL,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oCACnB,MAAM,EAAE,eAAe;oCACvB,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;oCACzC,OAAO,EAAE,MAAM,CAAC,OAAO;oCACvB,WAAW,EAAE,IAAI;oCACjB,IAAI,EAAE,sFAAsF;iCAC7F,EAAE,IAAI,EAAE,CAAC,CAAC;6BACZ,CAAC;qBACH,CAAC;gBACJ,CAAC;gBAED,wBAAwB;gBACxB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;YAC1D,CAAC;YAED,6CAA6C;YAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAEnC,2DAA2D;YAC3D,MAAM,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC;YAC1C,MAAM,iBAAiB,GAAG,eAAe,CAAC;YAC1C,MAAM,WAAW,EAAE,CAAC;YACpB,eAAe,GAAG,IAAI,CAAC;YACvB,oBAAoB,GAAG,IAAI,CAAC;YAC5B,eAAe,GAAG,IAAI,CAAC;YACvB,aAAa,GAAG,IAAI,CAAC;YACrB,iBAAiB,GAAG,IAAI,CAAC;YAEzB,MAAM,QAAQ,GAA4B;gBACxC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM;gBACN,UAAU,EAAE,MAAM,CAAC,MAAM;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;gBAChD,YAAY,EAAE,qBAAqB,CAAC,IAAI,CAAC;gBACzC,QAAQ,EAAE;oBACR,YAAY,EAAE,eAAe;oBAC7B,iBAAiB;oBACjB,QAAQ,EAAE,eAAe;oBACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;wBACzB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,sEAAsE;wBAC9F,CAAC,CAAC,2FAA2F;iBAChG;aACF,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACjG,CAAC;IACH,CAAC,CACF,CAAC;IAEF,kEAAkE;IAClE,MAAM,CAAC,IAAI,CACT,YAAY,EACZ;;sCAEkC,EAClC,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAA4B;gBACtC,MAAM,EAAE;oBACN,MAAM,EAAE,CAAC,CAAC,eAAe;oBACzB,GAAG,EAAE,eAAe;oBACpB,QAAQ,EAAE,oBAAoB;oBAC9B,QAAQ,EAAE,eAAe;iBAC1B;gBACD,UAAU,EAAE;oBACV,OAAO,EAAE,aAAa;oBACtB,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,IAAI;iBACpD;aACF,CAAC;YAEF,4CAA4C;YAC5C,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE;wBACvC,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;qBACnC,CAAC,CAAC;oBACH,MAAM,CAAC,MAAM,GAAG;wBACd,GAAG,MAAM,CAAC,MAAgB;wBAC1B,SAAS,EAAE,IAAI;wBACf,UAAU,EAAE,GAAG,CAAC,MAAM;qBACvB,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,MAAM,GAAG;wBACd,GAAG,MAAM,CAAC,MAAgB;wBAC1B,SAAS,EAAE,KAAK;wBAChB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa;qBAC1D,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAA0B,kBAAkB,aAAa,EAAE,CAAC,CAAC;oBAC3F,MAAM,CAAC,UAAU,GAAG;wBAClB,GAAG,MAAM,CAAC,UAAoB;wBAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM;qBACxB,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;YACH,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACnG,CAAC;IACH,CAAC,CACF,CAAC;IAEF,kEAAkE;IAClE,MAAM,CAAC,IAAI,CACT,WAAW,EACX,0EAA0E,EAC1E,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,WAAW,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,eAAe,CAAC;YAC7B,eAAe,GAAG,IAAI,CAAC;YACvB,oBAAoB,GAAG,IAAI,CAAC;YAC5B,eAAe,GAAG,IAAI,CAAC;YACvB,aAAa,GAAG,IAAI,CAAC;YACrB,iBAAiB,GAAG,IAAI,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtE,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClG,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAYD,SAAS,aAAa,CAAC,IAA6B;IAClD,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,2CAA2C;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAgD,CAAC;IACxE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,CAA+C,CAAC;QAC9H,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC;oBACV,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,QAAkB,CAAC;oBACjD,QAAQ,EAAG,CAAC,CAAC,QAAmB,IAAI,IAAI;oBACxC,WAAW,EAAG,CAAC,CAAC,WAAsB,IAAK,CAAC,CAAC,OAAkB,IAAK,CAAC,CAAC,IAAe,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC1G,OAAO,EAAE,CAAC,CAAC,OAA6B;iBACzC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAA+C,CAAC;IAC1G,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAgB,CAAC;YACpC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAiB,CAAC;YAEtC,iEAAiE;YACjE,IAAI,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBACxE,MAAM,OAAO,GAAG,GAAG,CAAC,OAA8C,CAAC;gBACnE,MAAM,WAAW,GAAI,OAAO,EAAE,IAAe,IAAK,GAAG,CAAC,WAAsB,IAAI,eAAe,CAAC;gBAChG,MAAM,MAAM,GAAI,GAAG,CAAC,aAAwB,IAAK,GAAG,CAAC,aAAwB,IAAK,GAAG,CAAC,KAAgB,CAAC;gBAEvG,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,EAAE,CAAC;oBAC5D,MAAM,CAAC,IAAI,CAAC;wBACV,QAAQ,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;wBACnD,QAAQ,EAAE,WAAW;wBACrB,WAAW,EAAE,MAAM;wBACnB,OAAO,EAAE,WAAW;qBACrB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,qCAAqC;YACrC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,aAAa,CAA+C,CAAC;YACnG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAkB,CAAC;oBAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAe,CAAC;oBACtC,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;wBACtB,MAAM,IAAI,GAAG,QAAQ,IAAI,KAAK,CAAC;wBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC;4BAChD,MAAM,CAAC,IAAI,CAAC;gCACV,QAAQ,EAAE,QAAQ;gCAClB,QAAQ,EAAE,UAAU;gCACpB,WAAW,EAAE,IAAI;gCACjB,OAAO,EAAG,GAAG,CAAC,OAAmC,EAAE,IAAc;gCACjE,IAAI,EAAE,OAAO,CAAC,IAAc;6BAC7B,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,aAAa,GAA2B,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1F,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAqB;IAC9C,IAAI,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC;IAC/E,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAA6B;IAC1D,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAA+C,CAAC;IAC1G,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,MAAM,OAAO,GAAG,GAAG,CAAC,OAA8C,CAAC;QACnE,OAAO;YACL,WAAW,EAAE,OAAO,EAAE,IAAI,IAAI,GAAG,CAAC,WAAW,IAAI,SAAS;YAC1D,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;YAC5B,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,IAAI,IAAI;YAC7D,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI;SAC5D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"} |
+8
-8
| { | ||
| "name": "@useswarm/mcp", | ||
| "version": "2.0.9", | ||
| "version": "2.1.0", | ||
| "description": "Automated UX testing loop for local dev. Tunnel via cloudflared, run AI agent swarms, get structured issues, fix and repeat.", | ||
@@ -13,2 +13,8 @@ "type": "module", | ||
| ], | ||
| "scripts": { | ||
| "dev": "tsx watch src/cli.ts", | ||
| "start": "node dist/cli.js", | ||
| "build": "tsc", | ||
| "start:relay": "tsx src/relay/index.ts" | ||
| }, | ||
| "dependencies": { | ||
@@ -30,9 +36,3 @@ "@modelcontextprotocol/sdk": "^1.12.1", | ||
| "typescript": "^5.7.0" | ||
| }, | ||
| "scripts": { | ||
| "dev": "tsx watch src/cli.ts", | ||
| "start": "node dist/cli.js", | ||
| "build": "tsc", | ||
| "start:relay": "tsx src/relay/index.ts" | ||
| } | ||
| } | ||
| } |
+217
-144
@@ -1,32 +0,29 @@ | ||
| # Useswarm MCP Server | ||
| # @useswarm/mcp | ||
| Connect the Useswarm UX testing platform to AI agents (Claude Code, Cursor, VS Code, etc.) via the [Model Context Protocol](https://modelcontextprotocol.io/). | ||
| Automated UX testing loop for local development. Connects your AI coding editor (Claude Code, Cursor, VS Code, etc.) to the Useswarm UX testing platform via the [Model Context Protocol](https://modelcontextprotocol.io/). | ||
| ``` | ||
| Local Machine mcp.useswarm.co | ||
| +--------------------+ WebSocket +--------------------+ | ||
| | useswarm-mcp |<---tunnel----->| Relay Server | | ||
| | (MCP Server) | | /tunnel (WS) | | ||
| | | | /s/:slug/message | | ||
| | 27 tools -> API | +--------------------+ | ||
| +--------------------+ ^ | ||
| ^ Remote MCP Clients | ||
| | (Claude Code, Cursor) | ||
| stdio / HTTP | ||
| | | ||
| Local MCP Client | ||
| You (in Claude Code) → "test my signup flow" | ||
| ↓ | ||
| Claude calls dev_test → tunnels localhost → runs AI agent swarm | ||
| ↓ | ||
| Claude calls dev_watch → gets structured UX issues | ||
| ↓ | ||
| Claude fixes the code → calls dev_test again | ||
| ``` | ||
| The MCP server runs locally via stdio. No remote server needed. It tunnels your localhost via Cloudflare so Useswarm's cloud agents can reach your dev server. | ||
| ## Quick Start | ||
| One command adds Useswarm MCP to Claude Code and auto-logs you in on first use: | ||
| ```bash | ||
| # 1. Log in via browser (creates an API key, stores in ~/.useswarm/config.json) | ||
| npx @ux-testing/mcp-server login | ||
| # 2. Add to Claude Code | ||
| claude mcp add useswarm -- npx @ux-testing/mcp-server serve | ||
| npx @useswarm/mcp setup | ||
| ``` | ||
| That's it. Claude Code can now create tests, run persona agents, analyze results, and more. | ||
| After that, ask Claude to test your app: | ||
| > Test localhost:3000 with goal "complete the signup flow". The audience is first-time SaaS users. | ||
| ## Installation | ||
@@ -36,143 +33,190 @@ | ||
| No installation needed. Just run: | ||
| No installation needed: | ||
| ```bash | ||
| npx @ux-testing/mcp-server login | ||
| npx @ux-testing/mcp-server serve | ||
| npx @useswarm/mcp setup | ||
| ``` | ||
| ### Option B: From source (contributors) | ||
| ### Option B: Manual setup | ||
| ```bash | ||
| # 1. Log in (creates an MCP API key, stores at ~/.useswarm/config.json) | ||
| npx @useswarm/mcp login | ||
| # 2. Add to Claude Code | ||
| claude mcp add useswarm -- npx @useswarm/mcp serve | ||
| ``` | ||
| ### Option C: From source (contributors) | ||
| ```bash | ||
| cd apps/mcp-server | ||
| pnpm install | ||
| cp .env.example .env | ||
| # Edit .env with your USESWARM_API_KEY | ||
| # Edit .env with USESWARM_API_KEY | ||
| pnpm dev | ||
| ``` | ||
| ### Option C: With tunnel (remote access) | ||
| ## CLI commands | ||
| Tunnel your local MCP server through `mcp.useswarm.co` so remote clients can connect without port forwarding: | ||
| ```bash | ||
| npx @ux-testing/mcp-server serve --tunnel --tunnel-token YOUR_TOKEN | ||
| ``` | ||
| The CLI prints your public endpoint: | ||
| ``` | ||
| [useswarm-mcp] Public MCP endpoint: https://mcp.useswarm.co/s/abc123/message | ||
| [useswarm-mcp] Add to Claude Code: | ||
| claude mcp add useswarm --transport streamable-http https://mcp.useswarm.co/s/abc123/message | ||
| ``` | ||
| ## CLI Commands | ||
| | Command | Description | | ||
| |---------|-------------| | ||
| | `useswarm-mcp login` | Open browser to useswarm.co, create MCP API key, store locally | | ||
| | `useswarm-mcp logout` | Clear stored credentials from `~/.useswarm/config.json` | | ||
| | `useswarm-mcp setup` | Add to Claude Code and auto-login on first use | | ||
| | `useswarm-mcp login` | Open browser to log in, store API key in `~/.useswarm/config.json` | | ||
| | `useswarm-mcp logout` | Clear stored credentials | | ||
| | `useswarm-mcp whoami` | Show auth status and verify API key | | ||
| | `useswarm-mcp serve` | Start MCP server (stdio transport, default) | | ||
| | `useswarm-mcp serve --http` | Start with HTTP transport on port 3100 | | ||
| | `useswarm-mcp serve --tunnel` | Start with tunnel to mcp.useswarm.co | | ||
| | `useswarm-mcp serve --http` | Start with streamable HTTP transport on port 3100 | | ||
| | `useswarm-mcp serve --tunnel` | Start with WebSocket tunnel to `mcp.useswarm.co` | | ||
| | `useswarm-mcp serve --api-key KEY` | Override stored API key | | ||
| | `useswarm-mcp serve --api-url URL` | Override API base URL | | ||
| ## Available Tools | ||
| ## Tools | ||
| ### Batch Tests | ||
| The server exposes four tools that form a test-fix-retest loop: | ||
| Run autonomous AI personas against a website to get UX feedback. | ||
| ### `dev_test` | ||
| | Tool | Description | | ||
| |------|-------------| | ||
| | `list_batch_tests` | List all batch test runs | | ||
| | `get_batch_test` | Get details of a specific test | | ||
| | `create_batch_test` | Create a new batch test with AI personas | | ||
| | `run_batch_test` | Start executing a batch test | | ||
| | `cancel_batch_test` | Cancel a running test | | ||
| | `get_batch_test_results` | Get aggregated results and insights | | ||
| | `generate_personas` | Generate personas from an audience description | | ||
| | `delete_batch_test` | Delete a test and its results | | ||
| Tunnel your localhost (or hit a public URL directly) and start an AI agent swarm test. | ||
| ### Screenshot Tests | ||
| | Parameter | Required | Description | | ||
| |---|---|---| | ||
| | `targetUrl` | Yes | Frontend URL (e.g. `http://localhost:3000`) | | ||
| | `goal` | Yes | What agents should accomplish (e.g. "complete the signup flow") | | ||
| | `userDescription` | Yes | Target audience (e.g. "first-time SaaS users") | | ||
| | `agentCount` | No | Number of AI personas (1–20, default 3) | | ||
| | `backendUrl` | No | Separate backend URL — when set, a reverse proxy routes `/api/*`, `/auth/*`, `/graphql`, `/trpc/*` to the backend through one tunnel | | ||
| | `backendPaths` | No | Extra path prefixes for backend routing (e.g. `["/ws", "/v1"]`) | | ||
| | `maxSteps` | No | Max steps per agent | | ||
| | `provider` | No | `openai` or `anthropic` | | ||
| | `model` | No | Model override | | ||
| | `auth` | No | Login credentials, sub-aliased sign-up, or session cookies — see [Authenticated testing](#authenticated-testing) | | ||
| Upload screenshots of a user flow and get AI persona analysis. | ||
| > Use dev_test to test http://localhost:3000 with goal "sign up and reach the dashboard". The audience is first-time users. | ||
| | Tool | Description | | ||
| |------|-------------| | ||
| | `create_screenshot_test` | Create a screenshot-based test | | ||
| | `analyze_screenshot_test` | Run persona analysis on uploaded screenshots | | ||
| | `get_screenshot_test_results` | Get analysis results and insights | | ||
| | `generate_mockups` | Generate improved UI mockups from findings | | ||
| ### `dev_watch` | ||
| ### UX Agent | ||
| Poll a running test until it completes, then return structured results. | ||
| Interact with autonomous agent runs. | ||
| | Parameter | Required | Description | | ||
| |---|---|---| | ||
| | `batchId` | Yes | Batch ID returned by `dev_test` | | ||
| | `wait` | No | Poll up to 3 minutes for completion (default `true`) | | ||
| | Tool | Description | | ||
| |------|-------------| | ||
| | `get_queue_status` | Check job queue depth and worker status | | ||
| | `get_agent_run` | Get details of an agent run | | ||
| | `get_agent_thoughts` | Get structured thoughts from a run | | ||
| | `get_agent_insights` | Get AI-generated insights | | ||
| | `chat_with_persona` | Ask follow-up questions to a persona | | ||
| Returns issues sorted by severity with persona attribution, plus a synthesis report. Automatically tears down the tunnel when done. | ||
| ### Scout AI | ||
| ### `dev_status` | ||
| Deep research and analysis across test results. | ||
| Check the current state of the active tunnel and any running test. | ||
| | Tool | Description | | ||
| |------|-------------| | ||
| | `scout_chat` | Chat with Scout about test findings | | ||
| | `scout_history` | Get chat history and suggested questions | | ||
| ### `dev_close` | ||
| ### Swarms | ||
| Manually tear down the active tunnel and clean up. | ||
| Manage reusable groups of personas. | ||
| ## Split frontend/backend | ||
| | Tool | Description | | ||
| |------|-------------| | ||
| | `list_swarms` | List all persona swarms | | ||
| | `create_swarm` | Create a new persona swarm | | ||
| | `get_swarm` | Get swarm details and personas | | ||
| | `delete_swarm` | Delete a swarm | | ||
| If your app runs the frontend and backend on separate ports, pass `backendUrl` and the MCP server starts a reverse proxy automatically: | ||
| ### Projects | ||
| > Use dev_test on http://localhost:3000 with backend at http://localhost:8080. Goal: "create a new project". | ||
| Organize tests into projects. | ||
| The proxy routes by path prefix: | ||
| | Tool | Description | | ||
| |------|-------------| | ||
| | `list_projects` | List all projects | | ||
| | `create_project` | Create a new project | | ||
| | `get_project` | Get project details | | ||
| | Path | Destination | | ||
| |---|---| | ||
| | `/api/*` | Backend | | ||
| | `/auth/*` | Backend | | ||
| | `/graphql` | Backend | | ||
| | `/trpc/*` | Backend | | ||
| | Everything else | Frontend | | ||
| ### Device Farm | ||
| For non-standard backend paths, pass `backendPaths`: | ||
| Test mobile apps on real devices via AWS Device Farm. | ||
| > Test http://localhost:3000 with backend http://localhost:8080 and extra backend paths /ws and /socket.io. Goal: "send a message in the chat". | ||
| | Tool | Description | | ||
| |------|-------------| | ||
| | `enqueue_mobile_test` | Enqueue a mobile app test job | | ||
| | `get_mobile_test_job` | Get mobile test status and results | | ||
| | `list_devices` | List available real devices | | ||
| ## Authenticated testing | ||
| ### CUA Tests | ||
| The `auth` parameter on `dev_test` supports three modes. All accept an optional `startUrl` to land the agent on a specific page after authentication. | ||
| Run Computer Use API tests with autonomous visual agents. | ||
| ### Mode 1: `agent_login` (existing account) | ||
| | Tool | Description | | ||
| |------|-------------| | ||
| | `run_cua_test` | Run a CUA test against a URL | | ||
| | `get_cua_test` | Get CUA test results | | ||
| Agent navigates to `loginUrl` (or the target URL if omitted), fills credentials, submits. | ||
| ## Editor Configuration | ||
| ```json | ||
| { | ||
| "auth": { | ||
| "mode": "agent_login", | ||
| "loginUrl": "http://localhost:3000/login", | ||
| "username": "test@example.com", | ||
| "password": "testpass123", | ||
| "startUrl": "http://localhost:3000/dashboard" | ||
| } | ||
| } | ||
| ``` | ||
| ### Mode 2: `signup` (sub-aliased emails per persona) | ||
| For testing sign-up flows where no account exists yet. You supply one base email; each persona registers with a unique `local+<hash>@domain` sub-alias derived from it. All confirmation emails route to your single inbox, but each persona has its own isolated address. | ||
| ```json | ||
| { | ||
| "auth": { | ||
| "mode": "signup", | ||
| "signupEmail": "you@yourdomain.com", | ||
| "signupPassword": "optional-shared-password", | ||
| "startUrl": "http://localhost:3000/signup" | ||
| } | ||
| } | ||
| ``` | ||
| | Field | Required | Description | | ||
| |---|---|---| | ||
| | `signupEmail` | Yes | Base email. Each persona-run gets a unique `local+<base36(timestamp)+random>@domain` alias derived from this. | | ||
| | `signupPassword` | No | Shared password used on every persona's sign-up form. If omitted, the runtime mints a strong random password per persona-run (not persisted). | | ||
| | `startUrl` | No | URL where the sign-up form lives. | | ||
| The base email `you@yourdomain.com` becomes `you+lwk3a8x7@yourdomain.com`, `you+lwk3a902@yourdomain.com`, etc. — one per persona. The timestamp half guarantees the alias can never repeat in the future; the random half disambiguates personas spawned in the same millisecond. Generated aliases are persisted to the run record (`cua_runs.generated_email`) so confirmation emails can be correlated back to a persona later. | ||
| Use any provider that supports plus-addressing — Gmail, Fastmail, custom domains all work. | ||
| ### Mode 3: `cookie_injection` (skip login) | ||
| Inject session cookies and have the agent start already authenticated. | ||
| ```json | ||
| { | ||
| "auth": { | ||
| "mode": "cookie_injection", | ||
| "cookies": [ | ||
| { | ||
| "name": "session_token", | ||
| "value": "abc123...", | ||
| "domain": ".example.com", | ||
| "path": "/", | ||
| "secure": true, | ||
| "httpOnly": true | ||
| } | ||
| ], | ||
| "startUrl": "http://localhost:3000/dashboard" | ||
| } | ||
| } | ||
| ``` | ||
| Each cookie needs `name`, `value`, `domain` at minimum; everything else is optional and accepts `null`. The easiest way to capture cookies is the [Cookie-Editor](https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm) browser extension — Export → JSON. | ||
| If `mode` is omitted, the MCP server infers it: | ||
| - `cookies` array → `cookie_injection` | ||
| - `signupEmail` → `signup` | ||
| - otherwise → `agent_login` | ||
| When testing localhost, cookie domains captured from a different host are auto-rewritten to match the tunnel; `loginUrl` and `startUrl` are also tunneled if they point at localhost. | ||
| > Use test-only accounts. Credentials and cookies are sent to the Useswarm API over HTTPS but should not be production credentials. | ||
| ## Editor configuration | ||
| ### Claude Code | ||
| ```bash | ||
| claude mcp add useswarm -- npx @ux-testing/mcp-server serve | ||
| claude mcp add useswarm -- npx @useswarm/mcp serve | ||
| ``` | ||
@@ -189,3 +233,3 @@ | ||
| "command": "npx", | ||
| "args": ["@ux-testing/mcp-server", "serve"], | ||
| "args": ["@useswarm/mcp", "serve"], | ||
| "env": { | ||
@@ -209,3 +253,3 @@ "USESWARM_API_KEY": "ux_..." | ||
| "command": "npx", | ||
| "args": ["@ux-testing/mcp-server", "serve"], | ||
| "args": ["@useswarm/mcp", "serve"], | ||
| "env": { | ||
@@ -220,5 +264,5 @@ "USESWARM_API_KEY": "ux_..." | ||
| ### Remote via tunnel (any editor) | ||
| ### Remote via tunnel | ||
| If you're using the tunnel, configure the editor with the HTTP transport: | ||
| If you're running with `--tunnel`, configure the editor with the streamable HTTP transport: | ||
@@ -236,5 +280,5 @@ ```json | ||
| ## Authentication | ||
| ## Authentication (to the MCP server itself) | ||
| The MCP server uses `X-API-Key` header authentication. Keys are SHA-256 hashed before storage. | ||
| The MCP server uses `X-API-Key` header authentication. Keys are SHA-256 hashed before storage server-side. | ||
@@ -257,3 +301,3 @@ ### Browser login (recommended) | ||
| Or set the environment variable: | ||
| Or via env: | ||
@@ -265,15 +309,29 @@ ```bash | ||
| ## Environment Variables | ||
| ## Environment variables | ||
| | Variable | Default | Description | | ||
| |----------|---------|-------------| | ||
| | `USESWARM_API_URL` | `http://localhost:8080` | API base URL | | ||
| | `USESWARM_API_KEY` | - | API key for authentication | | ||
| | `USESWARM_SESSION_TOKEN` | - | Session token (alternative to API key) | | ||
| | `USESWARM_APP_URL` | `https://useswarm.co` | Web app URL (for login flow) | | ||
| |---|---|---| | ||
| | `USESWARM_API_URL` | `https://api.useswarm.co` | API base URL | | ||
| | `USESWARM_API_KEY` | — | API key for authentication | | ||
| | `USESWARM_SESSION_TOKEN` | — | Session token (alternative to API key) | | ||
| | `USESWARM_APP_URL` | `https://useswarm.co` | Web app URL (login flow) | | ||
| | `MCP_PORT` | `3100` | HTTP transport port | | ||
| | `MCP_TUNNEL` | `false` | Enable tunnel to relay | | ||
| | `MCP_TUNNEL_TOKEN` | - | Tunnel authentication token | | ||
| | `MCP_TUNNEL_TOKEN` | — | Tunnel authentication token | | ||
| | `MCP_RELAY_URL` | `wss://mcp.useswarm.co` | Tunnel relay WebSocket URL | | ||
| ## The dev loop | ||
| The server is designed for an iterative test-fix-retest workflow: | ||
| 1. Make a code change | ||
| 2. Ask Claude to run `dev_test` | ||
| 3. Ask Claude to run `dev_watch` for results | ||
| 4. Claude reads the issues and fixes the code | ||
| 5. Repeat | ||
| A typical prompt: | ||
| > Test my app at localhost:3000. The goal is "complete the checkout flow". If there are issues, fix them and re-test until it passes. | ||
| ## Architecture | ||
@@ -283,12 +341,10 @@ | ||
| The MCP server supports three transport modes: | ||
| 1. **stdio** (default) — used by Claude Code, Cursor, VS Code. No network port needed. | ||
| 2. **HTTP** (`--http`) — streamable HTTP on port 3100. For clients that prefer HTTP transport. | ||
| 3. **Tunnel** (`--tunnel`) — connects via WebSocket to the relay at `mcp.useswarm.co`. The relay assigns a public slug and proxies JSON-RPC through the tunnel. | ||
| 1. **stdio** (default) -- Standard input/output. Used by Claude Code, Cursor, etc. No network port needed. | ||
| 2. **HTTP** (`--http`) -- Streamable HTTP on port 3100. For clients that prefer HTTP transport. | ||
| 3. **Tunnel** (`--tunnel`) -- Connects via WebSocket to the relay at `mcp.useswarm.co`. The relay assigns a public slug and proxies JSON-RPC requests through the tunnel. | ||
| ### Relay server | ||
| ### Relay Server | ||
| The relay at `mcp.useswarm.co` handles: | ||
| The relay server runs at `mcp.useswarm.co` and handles: | ||
| - WebSocket tunnel connections from local MCP servers (`/tunnel`) | ||
@@ -306,3 +362,2 @@ - Public HTTP endpoints for remote MCP clients (`/s/:slug/message`) | ||
| cp terraform.tfvars.example terraform.tfvars | ||
| # Edit terraform.tfvars with your ACM cert ARN, VPC tags, etc. | ||
| terraform init | ||
@@ -313,16 +368,33 @@ terraform plan | ||
| ## Development | ||
| ## Tunnel providers | ||
| The MCP server uses **Cloudflare Quick Tunnels** by default (free, no account needed) and falls back to **ngrok** if Cloudflare is unavailable. | ||
| Install Cloudflare for the best experience: | ||
| ```bash | ||
| # Run MCP server in dev mode (auto-reload) | ||
| pnpm dev | ||
| # macOS | ||
| brew install cloudflared | ||
| # Run relay server locally | ||
| pnpm start:relay | ||
| # Linux | ||
| curl -fsSL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 \ | ||
| -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared | ||
| ``` | ||
| # Type-check | ||
| npx tsc --noEmit | ||
| ## Framework notes | ||
| # Build | ||
| pnpm build | ||
| | Framework | Notes | | ||
| |---|---| | ||
| | **Next.js / Nuxt / Remix** | Single port — no `backendUrl` needed | | ||
| | **React + Express** | Use `backendUrl` for the Express server | | ||
| | **Django / Rails** | Add the tunnel URL to `ALLOWED_HOSTS` / `config.hosts` | | ||
| | **Vite with proxy** | If Vite proxies API calls, no `backendUrl` needed | | ||
| ## Development | ||
| ```bash | ||
| pnpm dev # MCP server in dev mode (auto-reload) | ||
| pnpm start:relay # Relay server locally | ||
| npx tsc --noEmit # Type-check | ||
| pnpm build # Build | ||
| ``` | ||
@@ -333,5 +405,6 @@ | ||
| | Service | URL | | ||
| |---------|-----| | ||
| |---|---| | ||
| | Web app | https://useswarm.co | | ||
| | API | https://api.useswarm.co | | ||
| | MCP relay | https://mcp.useswarm.co | | ||
| | Docs | https://docs.useswarm.co | |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
214636
2.64%2727
0.66%400
22.32%