@softure-ai/mcp-access 0.2.6 → 0.2.9

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.
Files changed (79) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +141 -10
  3. package/dist/index.d.ts +16 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +8 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/messages/en.d.ts +10 -1
  8. package/dist/messages/en.d.ts.map +1 -1
  9. package/dist/messages/en.js +10 -1
  10. package/dist/messages/en.js.map +1 -1
  11. package/dist/messages/index.d.ts +10 -1
  12. package/dist/messages/index.d.ts.map +1 -1
  13. package/dist/next/oauth-page.d.ts +6 -1
  14. package/dist/next/oauth-page.d.ts.map +1 -1
  15. package/dist/next/oauth-page.js +6 -5
  16. package/dist/next/oauth-page.js.map +1 -1
  17. package/dist/server/endpoint.d.ts.map +1 -1
  18. package/dist/server/endpoint.js +6 -4
  19. package/dist/server/endpoint.js.map +1 -1
  20. package/dist/server/index.d.ts +5 -0
  21. package/dist/server/index.d.ts.map +1 -1
  22. package/dist/server/index.js +5 -0
  23. package/dist/server/index.js.map +1 -1
  24. package/dist/server/oauth-http.d.ts +5 -0
  25. package/dist/server/oauth-http.d.ts.map +1 -1
  26. package/dist/server/oauth-http.js +11 -7
  27. package/dist/server/oauth-http.js.map +1 -1
  28. package/dist/server/server-factory.d.ts +31 -0
  29. package/dist/server/server-factory.d.ts.map +1 -0
  30. package/dist/server/server-factory.js +49 -0
  31. package/dist/server/server-factory.js.map +1 -0
  32. package/dist/server/server-info.d.ts +34 -0
  33. package/dist/server/server-info.d.ts.map +1 -0
  34. package/dist/server/server-info.js +30 -0
  35. package/dist/server/server-info.js.map +1 -0
  36. package/dist/server/strict-input.d.ts +17 -0
  37. package/dist/server/strict-input.d.ts.map +1 -0
  38. package/dist/server/strict-input.js +157 -0
  39. package/dist/server/strict-input.js.map +1 -0
  40. package/dist/server/tool-list.d.ts +35 -0
  41. package/dist/server/tool-list.d.ts.map +1 -0
  42. package/dist/server/tool-list.js +68 -0
  43. package/dist/server/tool-list.js.map +1 -0
  44. package/dist/server/writes-switch.d.ts +8 -0
  45. package/dist/server/writes-switch.d.ts.map +1 -0
  46. package/dist/server/writes-switch.js +25 -0
  47. package/dist/server/writes-switch.js.map +1 -0
  48. package/dist/stdio/serve.d.ts.map +1 -1
  49. package/dist/stdio/serve.js +5 -7
  50. package/dist/stdio/serve.js.map +1 -1
  51. package/dist/testing/catalog.d.ts +8 -0
  52. package/dist/testing/catalog.d.ts.map +1 -1
  53. package/dist/testing/catalog.js +8 -19
  54. package/dist/testing/catalog.js.map +1 -1
  55. package/dist/testing/index.d.ts +1 -1
  56. package/dist/testing/index.d.ts.map +1 -1
  57. package/dist/testing/index.js +1 -1
  58. package/dist/testing/index.js.map +1 -1
  59. package/dist/ui/consent-form.d.ts +2 -2
  60. package/dist/ui/consent-form.d.ts.map +1 -1
  61. package/dist/ui/consent-form.js +3 -2
  62. package/dist/ui/consent-form.js.map +1 -1
  63. package/module.json +2 -2
  64. package/package.json +1 -1
  65. package/src/index.ts +9 -2
  66. package/src/messages/en.ts +11 -1
  67. package/src/next/oauth-page.tsx +12 -6
  68. package/src/server/endpoint.ts +6 -4
  69. package/src/server/index.ts +23 -0
  70. package/src/server/oauth-http.ts +16 -7
  71. package/src/server/server-factory.ts +78 -0
  72. package/src/server/server-info.ts +76 -0
  73. package/src/server/strict-input.ts +191 -0
  74. package/src/server/tool-list.ts +105 -0
  75. package/src/server/writes-switch.ts +24 -0
  76. package/src/stdio/serve.ts +5 -7
  77. package/src/testing/catalog.ts +14 -23
  78. package/src/testing/index.ts +7 -1
  79. package/src/ui/consent-form.tsx +12 -8
@@ -2,13 +2,13 @@ import { formatMessage } from "@softure-ai/core";
2
2
  import { Button, Checkbox, type ClassNames, createSlotClassGetter } from "@softure-ai/ui";
3
3
  import type { McpAccessMessages } from "../messages/index.js";
4
4
 
5
- // The OAuth consent screen's body: which app (its registered name and where the code goes, which
6
- // the app cannot fake), which account (two accounts in one browser happen) and what access (read
5
+ // The OAuth consent screen's body: which app (its self-declared name), where the code goes (its own
6
+ // row: the one part the app cannot fake), which account (two accounts in one browser happen) and what access (read
7
7
  // always, change only when the client asked, the app allows it and the person ticks it). A plain
8
8
  // HTML form posting to the decision route, so the `303` to the client works without JavaScript and
9
9
  // with native app schemes. Server-safe: no hooks.
10
10
 
11
- export type ConsentFormSlot = "root" | "details" | "term" | "value" | "note" | "actions" | "text" | "link";
11
+ export type ConsentFormSlot = "root" | "details" | "term" | "value" | "target" | "note" | "actions" | "text" | "link";
12
12
 
13
13
  export interface ConsentFormProps {
14
14
  /** The decision route the form posts to. */
@@ -19,7 +19,7 @@ export interface ConsentFormProps {
19
19
  /** Where the code goes: the host for http(s), the whole URI for a native scheme. */
20
20
  readonly redirectTarget: string;
21
21
  readonly accountEmail: string;
22
- /** Offer the change checkbox: the client asked for `mcp:write` and the app allows writes. */
22
+ /** Offer the change checkbox: the client asked for `mcp:write` and the app allows writes right now. */
23
23
  readonly isWriteOffered: boolean;
24
24
  readonly messages: McpAccessMessages;
25
25
  readonly classNames?: ClassNames<ConsentFormSlot>;
@@ -31,7 +31,8 @@ const DEFAULT_CLASSES: Readonly<Record<ConsentFormSlot, string>> = {
31
31
  details: "sft:m-0 sft:flex sft:flex-col sft:gap-3 sft:text-sm",
32
32
  term: "sft:text-muted",
33
33
  value: "sft:m-0 sft:font-medium sft:text-foreground",
34
- note: "sft:font-normal sft:text-muted",
34
+ target: "sft:m-0 sft:font-mono sft:font-medium sft:text-foreground sft:break-words",
35
+ note: "sft:m-0 sft:mt-1 sft:text-xs sft:font-normal sft:text-muted",
35
36
  actions: "sft:flex sft:flex-col sft:gap-3",
36
37
  text: "sft:m-0 sft:text-sm sft:text-muted",
37
38
  link: "sft:font-medium sft:text-accent",
@@ -48,9 +49,12 @@ export function ConsentForm({ action, params, clientName, redirectTarget, accoun
48
49
  <dl className={slot("details")}>
49
50
  <div>
50
51
  <dt className={slot("term")}>{copy.app}</dt>
51
- <dd className={slot("value")}>
52
- {clientName} <span className={slot("note")}>({formatMessage(copy.returnsTo, { target: redirectTarget })})</span>
53
- </dd>
52
+ <dd className={slot("value")}>{clientName}</dd>
53
+ </div>
54
+ <div>
55
+ <dt className={slot("term")}>{copy.redirectLabel}</dt>
56
+ <dd className={slot("target")}>{redirectTarget}</dd>
57
+ <dd className={slot("note")}>{copy.redirectHint}</dd>
54
58
  </div>
55
59
  <div>
56
60
  <dt className={slot("term")}>{copy.account}</dt>