mcpico 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,cAAc,EACd,gBAAgB,GAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAkB,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,kDAAkD;AAClD,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,SAAsB;IAChD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqB,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpD,QAAQ,CAAC,UAAU,IAAI,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;YAClD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,KAAgB,EAChB,OAA2B,EAC3B,QAAgB,EAChB,YAI+B,eAAe;IAE9C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAW,CAAC;IACpC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAClE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,UAAU,CACf,wBAAwB,QAAQ,qBAAqB,KAAK,CAAC,SAAS,KAAK,SAAS,wCAAwC,CAC3H,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACvC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CACzC,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,UAAU,CACf,4DAA4D,QAAQ,GAAG,CACxE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,UAAU,CACf,kBAAkB,QAAQ,MAAO,GAAa,CAAC,OAAO,EAAE,CACzD,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAgB;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACrC,OAAO;QACL,UAAU,KAAK,CAAC,SAAS,MAAM,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QAC5E,WAAW,KAAK,CAAC,UAAU,EAAE;QAC7B,yDAAyD;QACzD,0CAA0C;KAC3C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAgC;IACvE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,YAAY,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAoB;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;IAC1C,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,SAAS,GAAgB,EAAE,CAAC;IAElC,0BAA0B;IAC1B,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qDAAqD;IACrD,OAAO,CAAC,KAAK,CACX,wBAAwB,MAAM,CAAC,OAAO,CAAC,MAAM,wBAAwB,CACtE,CAAC;IAEF,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,cAAc,GAClB,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK;gBACnC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG;gBAC5B,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,oBAAoB,YAAY,CAAC,IAAI,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc,MAAM,CAAC,CAAC;YAC/G,MAAM,UAAU,GAAG,MAAM,cAAc,CACrC,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,gBAAgB,CAC9B,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEzB,MAAM,MAAM,GAAG,UAAU,CACvB,YAAY,CAAC,IAAI,EACjB,UAAU,CAAC,KAAK,EAChB,SAAS,EACT,MAAM,CAAC,MAAM,CACd,CAAC;YAEF,OAAO,CAAC,KAAK,CACX,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,YAAY,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/G,CAAC;YAEF,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,2BAA2B,YAAY,CAAC,IAAI,IAAI,EAC/C,GAAa,CAAC,OAAO,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8DAA8D;IAC9D,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAE5C,2BAA2B;IAC3B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EACpC;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACvD,YAAY,EACV,8DAA8D;YAC9D,6DAA6D;YAC7D,0CAA0C;KAC7C,CACF,CAAC;IAEF,gCAAgC;IAChC,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QACrC,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEzC,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;YACE,KAAK,EAAE,WAAW,SAAS,EAAE;YAC7B,WAAW;YACX,WAAW,EAAE;gBACX,OAAO,EAAE,CAAC;qBACP,MAAM,EAAE;qBACR,QAAQ,CACP,6EAA6E;oBAC3E,GAAG,SAAS,cAAc,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,CACpE;aACJ;SACF,EACD,KAAK,EAAE,IAAyB,EAAE,EAAE;YAClC,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChE,CAAC,CACF,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,uBAAuB,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC;IACzE,CAAC;IAED,mDAAmD;IACnD,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,YAAY,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YAC7D,MAAM,WAAW,GAAG,GAAG,QAAQ,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;YAEpD,MAAM,CAAC,gBAAgB,CACrB,WAAW,EACX,aAAa,EACb;gBACE,WAAW,EAAE,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,UAAU,QAAQ,CAAC,IAAI,GAAG;gBACrE,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACvB,EACD,KAAK,IAAI,EAAE;gBACT,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpE,OAAO;oBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;iBAChC,CAAC;YACJ,CAAC,CACF,CAAC;YACF,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAEzD,MAAM,QAAQ,GAAgD,EAAE,CAAC;YACjE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;gBACzC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;qBACnB,MAAM,EAAE;qBACR,QAAQ,CACP,GAAG,CAAC,WAAW;oBACb,aAAa,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9D,CAAC;YACN,CAAC;YAED,MAAM,CAAC,cAAc,CACnB,cAAc,EACd;gBACE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;gBACzC,WAAW,EAAE,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,UAAU,QAAQ,CAAC,IAAI,GAAG;gBAClE,UAAU,EACR,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;aAC1D,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;gBACb,MAAM,UAAU,GAA2B,EAAE,CAAC;gBAC9C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CACjC,IAA+B,CAChC,EAAE,CAAC;wBACF,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;oBAC7C,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,SAAS,EAAE,UAAU;iBACtB,CAAC,CAAC;gBACH,OAAO;oBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;iBAChC,CAAC;YACJ,CAAC,CACF,CAAC;YACF,WAAW,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,gBAAgB,aAAa,cAAc,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,gBAAgB,WAAW,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,6CAA6C;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAExD,IAAI,YAAY,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,6BAA6B,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACjD,iCAAiC;YACjC,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9E,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,WAAW,CAAC;QAC9C,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,KAAK,CACX,kBAAkB,YAAY,CAAC,IAAI,cAAc,OAAO,CAAC,MAAM,6CAA6C,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,CACxI,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CACX,kBAAkB,YAAY,CAAC,IAAI,cAAc,OAAO,CAAC,MAAM,qBAAqB,CACrF,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { OAuthTokens } from "@modelcontextprotocol/sdk/shared/auth.js";
2
+ /** Derive a storage key from server URL */
3
+ export declare function storageKey(serverUrl: string): string;
4
+ /** Persist OAuth tokens for a server */
5
+ export declare function saveTokens(serverUrl: string, tokens: OAuthTokens): void;
6
+ /** Load persisted OAuth tokens for a server */
7
+ export declare function loadTokens(serverUrl: string): OAuthTokens | undefined;
8
+ /** Clear stored tokens (e.g., when invalidated) */
9
+ export declare function clearTokens(serverUrl: string): void;
10
+ /** Check if a stored token is still valid (not expired, with 60s buffer) */
11
+ export declare function isTokenValid(serverUrl: string): boolean;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Token store: persist OAuth tokens to ~/.mcplico/credentials.json
3
+ */
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
+ import { homedir } from "node:os";
6
+ import { join } from "node:path";
7
+ const CREDENTIALS_DIR = join(homedir(), ".mcplico");
8
+ const CREDENTIALS_FILE = join(CREDENTIALS_DIR, "credentials.json");
9
+ function ensureDir() {
10
+ if (!existsSync(CREDENTIALS_DIR)) {
11
+ mkdirSync(CREDENTIALS_DIR, { recursive: true, mode: 0o700 });
12
+ }
13
+ }
14
+ function readStore() {
15
+ try {
16
+ if (!existsSync(CREDENTIALS_FILE))
17
+ return {};
18
+ const raw = readFileSync(CREDENTIALS_FILE, "utf-8");
19
+ return JSON.parse(raw);
20
+ }
21
+ catch {
22
+ return {};
23
+ }
24
+ }
25
+ function writeStore(store) {
26
+ ensureDir();
27
+ writeFileSync(CREDENTIALS_FILE, JSON.stringify(store, null, 2), {
28
+ mode: 0o600,
29
+ });
30
+ }
31
+ /** Derive a storage key from server URL */
32
+ export function storageKey(serverUrl) {
33
+ try {
34
+ const url = new URL(serverUrl);
35
+ // Use hostname + pathname to distinguish different servers
36
+ return `${url.hostname}${url.pathname === "/" ? "" : url.pathname}`;
37
+ }
38
+ catch {
39
+ // Fallback for non-URL values
40
+ return serverUrl.replace(/[^a-zA-Z0-9]/g, "_");
41
+ }
42
+ }
43
+ /** Persist OAuth tokens for a server */
44
+ export function saveTokens(serverUrl, tokens) {
45
+ const store = readStore();
46
+ const key = storageKey(serverUrl);
47
+ store[key] = {
48
+ access_token: tokens.access_token,
49
+ refresh_token: tokens.refresh_token,
50
+ token_type: tokens.token_type,
51
+ expires_at: tokens.expires_in
52
+ ? Date.now() + tokens.expires_in * 1000
53
+ : undefined,
54
+ scope: tokens.scope,
55
+ };
56
+ writeStore(store);
57
+ }
58
+ /** Load persisted OAuth tokens for a server */
59
+ export function loadTokens(serverUrl) {
60
+ const store = readStore();
61
+ const key = storageKey(serverUrl);
62
+ const stored = store[key];
63
+ if (!stored)
64
+ return undefined;
65
+ return {
66
+ access_token: stored.access_token,
67
+ refresh_token: stored.refresh_token,
68
+ token_type: stored.token_type || "Bearer",
69
+ expires_in: stored.expires_at
70
+ ? Math.max(0, Math.floor((stored.expires_at - Date.now()) / 1000)) || undefined
71
+ : undefined,
72
+ scope: stored.scope,
73
+ };
74
+ }
75
+ /** Clear stored tokens (e.g., when invalidated) */
76
+ export function clearTokens(serverUrl) {
77
+ const store = readStore();
78
+ const key = storageKey(serverUrl);
79
+ delete store[key];
80
+ writeStore(store);
81
+ }
82
+ /** Check if a stored token is still valid (not expired, with 60s buffer) */
83
+ export function isTokenValid(serverUrl) {
84
+ const store = readStore();
85
+ const key = storageKey(serverUrl);
86
+ const stored = store[key];
87
+ if (!stored || !stored.access_token)
88
+ return false;
89
+ if (!stored.expires_at)
90
+ return true; // No expiry info — assume valid
91
+ // Refresh with 60 second buffer
92
+ return Date.now() < stored.expires_at - 60_000;
93
+ }
94
+ //# sourceMappingURL=token-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcpico",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "MCPico — MCP proxy that bundles flat tool lists into hierarchical subcommand groups. Pico footprint, maximum discovery.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Authentication types for MCPico.
3
+ *
4
+ * Two layers:
5
+ * Layer 1 — Auth for the listen endpoint (protecting MCPico from clients)
6
+ * Layer 2 — Auth passthrough to upstream MCP servers
7
+ */
8
+
9
+ // ── Upstream auth (passthrough to servers MCPico wraps) ──
10
+
11
+ export interface BearerAuth {
12
+ type: "bearer";
13
+ /** Bearer token value. Supports ${ENV_VAR} interpolation. */
14
+ token: string;
15
+ }
16
+
17
+ export interface HeaderAuth {
18
+ type: "header";
19
+ /** Header name (e.g. "X-API-Key", "X-Auth-Token") */
20
+ name: string;
21
+ /** Header value. Supports ${ENV_VAR} interpolation. */
22
+ value: string;
23
+ }
24
+
25
+ export interface OAuthClientCredentials {
26
+ type: "oauth";
27
+ /** OAuth 2.0 grant type */
28
+ grant_type: "client_credentials";
29
+ /** Client ID for the OAuth provider */
30
+ client_id: string;
31
+ /** Client secret for the OAuth provider */
32
+ client_secret: string;
33
+ /** Token endpoint URL */
34
+ token_url: string;
35
+ /** Optional scopes to request */
36
+ scopes?: string[];
37
+ /** Optional authorization server metadata URL (if different from token_url issuer) */
38
+ authorization_server_url?: string;
39
+ }
40
+
41
+ export type UpstreamAuth = BearerAuth | HeaderAuth | OAuthClientCredentials;
42
+
43
+ // ── Listen endpoint auth (protecting MCPico from clients) ──
44
+
45
+ export interface ListenBearerAuth {
46
+ type: "bearer";
47
+ /** Bearer token that clients must provide. Supports ${ENV_VAR} interpolation. */
48
+ token: string;
49
+ }
50
+
51
+ export type ListenAuth = ListenBearerAuth;
52
+
53
+ // ── Resolved auth (after env var interpolation) ──
54
+
55
+ export interface ResolvedBearerAuth {
56
+ type: "bearer";
57
+ token: string;
58
+ }
59
+
60
+ export interface ResolvedHeaderAuth {
61
+ type: "header";
62
+ name: string;
63
+ value: string;
64
+ }
65
+
66
+ export type ResolvedUpstreamAuth =
67
+ | ResolvedBearerAuth
68
+ | ResolvedHeaderAuth
69
+ | (OAuthClientCredentials & { type: "oauth" }); // OAuth is resolved at request time
70
+
71
+ export type ResolvedListenAuth = ResolvedBearerAuth;
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Tests for auth utilities.
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
5
+ import {
6
+ resolveEnvVars,
7
+ resolveUpstreamAuth,
8
+ resolveListenAuth,
9
+ upstreamAuthHeaders,
10
+ extractBearerToken,
11
+ validateBearerToken,
12
+ sendUnauthorized,
13
+ } from "./auth.js";
14
+ import type {
15
+ BearerAuth,
16
+ HeaderAuth,
17
+ OAuthClientCredentials,
18
+ ListenBearerAuth,
19
+ } from "./auth-types.js";
20
+
21
+ describe("resolveEnvVars", () => {
22
+ beforeEach(() => {
23
+ vi.stubEnv("TEST_TOKEN", "secret123");
24
+ vi.stubEnv("API_KEY", "key-abc");
25
+ });
26
+
27
+ afterEach(() => {
28
+ vi.unstubAllEnvs();
29
+ });
30
+
31
+ it("replaces ${VAR} patterns with env values", () => {
32
+ expect(resolveEnvVars("Bearer ${TEST_TOKEN}")).toBe("Bearer secret123");
33
+ });
34
+
35
+ it("replaces multiple env vars in one string", () => {
36
+ expect(resolveEnvVars("${API_KEY}:${TEST_TOKEN}")).toBe("key-abc:secret123");
37
+ });
38
+
39
+ it("returns string unchanged if no env vars", () => {
40
+ expect(resolveEnvVars("plain-value")).toBe("plain-value");
41
+ });
42
+
43
+ it("throws if referenced env var is not set", () => {
44
+ expect(() => resolveEnvVars("${MISSING}")).toThrow(
45
+ 'Environment variable "MISSING" is not set'
46
+ );
47
+ });
48
+ });
49
+
50
+ describe("resolveUpstreamAuth", () => {
51
+ beforeEach(() => {
52
+ vi.stubEnv("BEARER_TOKEN", "bearer-token-123");
53
+ vi.stubEnv("CUSTOM_KEY", "custom-key-456");
54
+ vi.stubEnv("OAUTH_CLIENT_ID", "client-id");
55
+ vi.stubEnv("OAUTH_CLIENT_SECRET", "client-secret");
56
+ vi.stubEnv("OAUTH_TOKEN_URL", "https://auth.example.com/token");
57
+ });
58
+
59
+ afterEach(() => {
60
+ vi.unstubAllEnvs();
61
+ });
62
+
63
+ it("resolves bearer auth", () => {
64
+ const auth: BearerAuth = { type: "bearer", token: "${BEARER_TOKEN}" };
65
+ const resolved = resolveUpstreamAuth(auth);
66
+ expect(resolved).toEqual({
67
+ type: "bearer",
68
+ token: "bearer-token-123",
69
+ });
70
+ });
71
+
72
+ it("resolves header auth", () => {
73
+ const auth: HeaderAuth = {
74
+ type: "header",
75
+ name: "X-API-Key",
76
+ value: "${CUSTOM_KEY}",
77
+ };
78
+ const resolved = resolveUpstreamAuth(auth);
79
+ expect(resolved).toEqual({
80
+ type: "header",
81
+ name: "X-API-Key",
82
+ value: "custom-key-456",
83
+ });
84
+ });
85
+
86
+ it("resolves oauth auth", () => {
87
+ const auth: OAuthClientCredentials = {
88
+ type: "oauth",
89
+ grant_type: "client_credentials",
90
+ client_id: "${OAUTH_CLIENT_ID}",
91
+ client_secret: "${OAUTH_CLIENT_SECRET}",
92
+ token_url: "${OAUTH_TOKEN_URL}",
93
+ };
94
+ const resolved = resolveUpstreamAuth(auth);
95
+ expect(resolved).toEqual({
96
+ type: "oauth",
97
+ grant_type: "client_credentials",
98
+ client_id: "client-id",
99
+ client_secret: "client-secret",
100
+ token_url: "https://auth.example.com/token",
101
+ });
102
+ });
103
+ });
104
+
105
+ describe("resolveListenAuth", () => {
106
+ beforeEach(() => {
107
+ vi.stubEnv("MCPICO_KEY", "mcplico-key-789");
108
+ });
109
+
110
+ afterEach(() => {
111
+ vi.unstubAllEnvs();
112
+ });
113
+
114
+ it("resolves listen bearer auth", () => {
115
+ const auth: ListenBearerAuth = { type: "bearer", token: "${MCPICO_KEY}" };
116
+ const resolved = resolveListenAuth(auth);
117
+ expect(resolved).toEqual({
118
+ type: "bearer",
119
+ token: "mcplico-key-789",
120
+ });
121
+ });
122
+ });
123
+
124
+ describe("upstreamAuthHeaders", () => {
125
+ it("returns Authorization header for bearer auth", () => {
126
+ const headers = upstreamAuthHeaders({
127
+ type: "bearer",
128
+ token: "my-token",
129
+ });
130
+ expect(headers).toEqual({ Authorization: "Bearer my-token" });
131
+ });
132
+
133
+ it("returns custom header for header auth", () => {
134
+ const headers = upstreamAuthHeaders({
135
+ type: "header",
136
+ name: "X-API-Key",
137
+ value: "key-123",
138
+ });
139
+ expect(headers).toEqual({ "X-API-Key": "key-123" });
140
+ });
141
+
142
+ it("returns empty object for oauth auth (handled by SDK)", () => {
143
+ const headers = upstreamAuthHeaders({
144
+ type: "oauth",
145
+ grant_type: "client_credentials",
146
+ client_id: "id",
147
+ client_secret: "secret",
148
+ token_url: "https://auth.example.com/token",
149
+ });
150
+ expect(headers).toEqual({});
151
+ });
152
+ });
153
+
154
+ describe("extractBearerToken", () => {
155
+ it("extracts token from Authorization header", () => {
156
+ const req = { headers: { authorization: "Bearer my-token" } } as any;
157
+ expect(extractBearerToken(req)).toBe("my-token");
158
+ });
159
+
160
+ it("is case-insensitive for Bearer prefix", () => {
161
+ const req = { headers: { authorization: "bearer my-token" } } as any;
162
+ expect(extractBearerToken(req)).toBe("my-token");
163
+ });
164
+
165
+ it("returns undefined if no Authorization header", () => {
166
+ const req = { headers: {} } as any;
167
+ expect(extractBearerToken(req)).toBeUndefined();
168
+ });
169
+
170
+ it("returns undefined if header is not Bearer", () => {
171
+ const req = { headers: { authorization: "Basic dXNlcjpwYXNz" } } as any;
172
+ expect(extractBearerToken(req)).toBeUndefined();
173
+ });
174
+
175
+ it("returns undefined if Authorization is empty string", () => {
176
+ const req = { headers: { authorization: "" } } as any;
177
+ expect(extractBearerToken(req)).toBeUndefined();
178
+ });
179
+ });
180
+
181
+ describe("validateBearerToken", () => {
182
+ it("returns true when tokens match", () => {
183
+ expect(validateBearerToken("secret", "secret")).toBe(true);
184
+ });
185
+
186
+ it("returns false when tokens differ", () => {
187
+ expect(validateBearerToken("wrong", "secret")).toBe(false);
188
+ });
189
+
190
+ it("returns false when provided token is undefined", () => {
191
+ expect(validateBearerToken(undefined, "secret")).toBe(false);
192
+ });
193
+
194
+ it("returns false when tokens have different length", () => {
195
+ expect(validateBearerToken("short", "longer-token")).toBe(false);
196
+ });
197
+
198
+ it("is case-sensitive", () => {
199
+ expect(validateBearerToken("Secret", "secret")).toBe(false);
200
+ });
201
+ });
202
+
203
+ describe("sendUnauthorized", () => {
204
+ it("sends 401 with WWW-Authenticate header", () => {
205
+ const res = {
206
+ writeHead: vi.fn(),
207
+ end: vi.fn(),
208
+ } as any;
209
+
210
+ sendUnauthorized(res);
211
+
212
+ expect(res.writeHead).toHaveBeenCalledWith(401, {
213
+ "Content-Type": "application/json",
214
+ "WWW-Authenticate": 'Bearer realm="mcplico"',
215
+ });
216
+ expect(res.end).toHaveBeenCalled();
217
+ });
218
+ });
package/src/auth.ts ADDED
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Auth utilities: env var resolution, header generation, listen token validation.
3
+ */
4
+ import type { IncomingMessage, ServerResponse } from "node:http";
5
+ import type {
6
+ UpstreamAuth,
7
+ ListenAuth,
8
+ ResolvedUpstreamAuth,
9
+ ResolvedListenAuth,
10
+ BearerAuth,
11
+ HeaderAuth,
12
+ OAuthClientCredentials,
13
+ } from "./auth-types.js";
14
+
15
+ // ── Env var interpolation ──
16
+
17
+ /**
18
+ * Replace ${VAR} patterns with process.env values.
19
+ * Throws if a referenced env var is not set.
20
+ */
21
+ export function resolveEnvVars(value: string): string {
22
+ return value.replace(/\$\{(\w+)\}/g, (_match, varName: string) => {
23
+ const envValue = process.env[varName];
24
+ if (envValue === undefined) {
25
+ throw new Error(
26
+ `Environment variable "${varName}" is not set. ` +
27
+ `Referenced in auth config. Set it or remove the auth block.`
28
+ );
29
+ }
30
+ return envValue;
31
+ });
32
+ }
33
+
34
+ // ── Auth resolution ──
35
+
36
+ /**
37
+ * Resolve an UpstreamAuth config to a ResolvedUpstreamAuth with env vars interpolated.
38
+ */
39
+ export function resolveUpstreamAuth(
40
+ auth: UpstreamAuth
41
+ ): ResolvedUpstreamAuth {
42
+ switch (auth.type) {
43
+ case "bearer":
44
+ return {
45
+ type: "bearer",
46
+ token: resolveEnvVars(auth.token),
47
+ } as ResolvedUpstreamAuth;
48
+
49
+ case "header":
50
+ return {
51
+ type: "header",
52
+ name: resolveEnvVars(auth.name),
53
+ value: resolveEnvVars(auth.value),
54
+ } as ResolvedUpstreamAuth;
55
+
56
+ case "oauth":
57
+ // OAuth credentials are resolved at request time by the provider
58
+ return {
59
+ type: "oauth",
60
+ grant_type: auth.grant_type,
61
+ client_id: resolveEnvVars(auth.client_id),
62
+ client_secret: resolveEnvVars(auth.client_secret),
63
+ token_url: resolveEnvVars(auth.token_url),
64
+ scopes: auth.scopes,
65
+ authorization_server_url: auth.authorization_server_url
66
+ ? resolveEnvVars(auth.authorization_server_url)
67
+ : undefined,
68
+ } as ResolvedUpstreamAuth;
69
+ }
70
+ }
71
+
72
+ /**
73
+ * Resolve a ListenAuth config to ResolvedListenAuth.
74
+ */
75
+ export function resolveListenAuth(
76
+ auth: ListenAuth
77
+ ): ResolvedListenAuth {
78
+ return {
79
+ type: "bearer",
80
+ token: resolveEnvVars(auth.token),
81
+ };
82
+ }
83
+
84
+ // ── Header generation for upstream requests ──
85
+
86
+ /**
87
+ * Generate HTTP headers from a resolved upstream auth config.
88
+ * For bearer/header types, returns headers to attach to requests.
89
+ * For OAuth, returns empty — the SDK authProvider handles it.
90
+ */
91
+ export function upstreamAuthHeaders(
92
+ auth: ResolvedUpstreamAuth
93
+ ): Record<string, string> {
94
+ if (auth.type === "bearer") {
95
+ return { Authorization: `Bearer ${auth.token}` };
96
+ }
97
+ if (auth.type === "header") {
98
+ return { [auth.name]: auth.value };
99
+ }
100
+ // OAuth is handled by the MCP SDK's authProvider — no static headers
101
+ return {};
102
+ }
103
+
104
+ // ── Listen endpoint auth middleware ──
105
+
106
+ /**
107
+ * Extract bearer token from an Authorization header.
108
+ * Returns undefined if no Bearer token found.
109
+ */
110
+ export function extractBearerToken(req: IncomingMessage): string | undefined {
111
+ const auth = req.headers.authorization;
112
+ if (!auth) return undefined;
113
+ const match = auth.match(/^Bearer\s+(.+)$/i);
114
+ return match ? match[1] : undefined;
115
+ }
116
+
117
+ /**
118
+ * Validate a bearer token against the configured token.
119
+ * Returns true if token is valid, false otherwise.
120
+ */
121
+ export function validateBearerToken(
122
+ providedToken: string | undefined,
123
+ expectedToken: string
124
+ ): boolean {
125
+ if (!providedToken) return false;
126
+ // Constant-time comparison to prevent timing attacks
127
+ return timingSafeEqual(providedToken, expectedToken);
128
+ }
129
+
130
+ /**
131
+ * Send a 401 Unauthorized response with a WWW-Authenticate header.
132
+ */
133
+ export function sendUnauthorized(res: ServerResponse): void {
134
+ res.writeHead(401, {
135
+ "Content-Type": "application/json",
136
+ "WWW-Authenticate": 'Bearer realm="mcplico"',
137
+ });
138
+ res.end(JSON.stringify({ error: "Unauthorized", message: "Bearer token required" }));
139
+ }
140
+
141
+ // ── Constant-time string comparison ──
142
+
143
+ function timingSafeEqual(a: string, b: string): boolean {
144
+ if (a.length !== b.length) {
145
+ // Still compare to avoid leaking length via timing
146
+ const maxLen = Math.max(a.length, b.length);
147
+ let result = 0;
148
+ for (let i = 0; i < maxLen; i++) {
149
+ result |= a.charCodeAt(i % a.length) ^ b.charCodeAt(i % b.length);
150
+ }
151
+ return false;
152
+ }
153
+
154
+ let result = 0;
155
+ for (let i = 0; i < a.length; i++) {
156
+ result |= a.charCodeAt(i) ^ b.charCodeAt(i);
157
+ }
158
+ return result === 0;
159
+ }
package/src/config.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * Transport configuration for connecting to an upstream MCP server.
3
3
  */
4
+ import type { UpstreamAuth, ListenAuth } from "./auth-types.js";
5
+
6
+
4
7
  export type TransportConfig =
5
8
  | {
6
9
  type: "stdio";
@@ -25,6 +28,8 @@ export interface ServerConfig {
25
28
  transport: TransportConfig;
26
29
  /** Connection timeout in milliseconds (default: 30000) */
27
30
  connectTimeoutMs?: number;
31
+ /** Authentication config for this upstream server */
32
+ auth?: UpstreamAuth;
28
33
  }
29
34
 
30
35
  /**
@@ -39,7 +44,7 @@ export interface GroupOverrides {
39
44
  */
40
45
  export type ListenConfig =
41
46
  | { type: "stdio" }
42
- | { type: "sse"; port: number; host?: string };
47
+ | { type: "sse"; port: number; host?: string; auth?: ListenAuth };
43
48
 
44
49
  /**
45
50
  * Full MCPico configuration.