@payloadcms/plugin-mcp 4.0.0-canary.1 → 4.0.0-canary.2

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 (278) hide show
  1. package/dist/collection/getAccessField.d.ts.map +1 -1
  2. package/dist/collection/getAccessField.js +24 -9
  3. package/dist/collection/getAccessField.js.map +1 -1
  4. package/dist/collection/index.d.ts.map +1 -1
  5. package/dist/collection/index.js +71 -26
  6. package/dist/collection/index.js.map +1 -1
  7. package/dist/components/APIKeyField/index.client.d.ts +9 -0
  8. package/dist/components/APIKeyField/index.client.d.ts.map +1 -0
  9. package/dist/components/APIKeyField/index.client.js +85 -0
  10. package/dist/components/APIKeyField/index.client.js.map +1 -0
  11. package/dist/components/APIKeyField/index.css +105 -0
  12. package/dist/components/APIKeysEmptyState/index.client.d.ts +4 -0
  13. package/dist/components/APIKeysEmptyState/index.client.d.ts.map +1 -0
  14. package/dist/components/APIKeysEmptyState/index.client.js +21 -0
  15. package/dist/components/APIKeysEmptyState/index.client.js.map +1 -0
  16. package/dist/components/AccessField/index.client.d.ts.map +1 -1
  17. package/dist/components/AccessField/index.client.js +139 -197
  18. package/dist/components/AccessField/index.client.js.map +1 -1
  19. package/dist/components/AccessField/index.css +50 -44
  20. package/dist/components/SettingsMenu/index.client.d.ts +8 -0
  21. package/dist/components/SettingsMenu/index.client.d.ts.map +1 -0
  22. package/dist/components/SettingsMenu/index.client.js +29 -0
  23. package/dist/components/SettingsMenu/index.client.js.map +1 -0
  24. package/dist/endpoint/access.js +16 -0
  25. package/dist/endpoint/access.js.map +1 -1
  26. package/dist/exports/client.d.ts +3 -0
  27. package/dist/exports/client.d.ts.map +1 -1
  28. package/dist/exports/client.js +3 -0
  29. package/dist/exports/client.js.map +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +46 -3
  32. package/dist/index.js.map +1 -1
  33. package/dist/translations/index.d.ts +11 -0
  34. package/dist/translations/index.d.ts.map +1 -0
  35. package/dist/translations/index.js +92 -0
  36. package/dist/translations/index.js.map +1 -0
  37. package/dist/translations/languages/ar.d.ts +31 -0
  38. package/dist/translations/languages/ar.d.ts.map +1 -0
  39. package/dist/translations/languages/ar.js +34 -0
  40. package/dist/translations/languages/ar.js.map +1 -0
  41. package/dist/translations/languages/az.d.ts +31 -0
  42. package/dist/translations/languages/az.d.ts.map +1 -0
  43. package/dist/translations/languages/az.js +34 -0
  44. package/dist/translations/languages/az.js.map +1 -0
  45. package/dist/translations/languages/bg.d.ts +31 -0
  46. package/dist/translations/languages/bg.d.ts.map +1 -0
  47. package/dist/translations/languages/bg.js +34 -0
  48. package/dist/translations/languages/bg.js.map +1 -0
  49. package/dist/translations/languages/bnBd.d.ts +31 -0
  50. package/dist/translations/languages/bnBd.d.ts.map +1 -0
  51. package/dist/translations/languages/bnBd.js +34 -0
  52. package/dist/translations/languages/bnBd.js.map +1 -0
  53. package/dist/translations/languages/bnIn.d.ts +31 -0
  54. package/dist/translations/languages/bnIn.d.ts.map +1 -0
  55. package/dist/translations/languages/bnIn.js +34 -0
  56. package/dist/translations/languages/bnIn.js.map +1 -0
  57. package/dist/translations/languages/ca.d.ts +31 -0
  58. package/dist/translations/languages/ca.d.ts.map +1 -0
  59. package/dist/translations/languages/ca.js +34 -0
  60. package/dist/translations/languages/ca.js.map +1 -0
  61. package/dist/translations/languages/cs.d.ts +31 -0
  62. package/dist/translations/languages/cs.d.ts.map +1 -0
  63. package/dist/translations/languages/cs.js +34 -0
  64. package/dist/translations/languages/cs.js.map +1 -0
  65. package/dist/translations/languages/da.d.ts +31 -0
  66. package/dist/translations/languages/da.d.ts.map +1 -0
  67. package/dist/translations/languages/da.js +34 -0
  68. package/dist/translations/languages/da.js.map +1 -0
  69. package/dist/translations/languages/de.d.ts +31 -0
  70. package/dist/translations/languages/de.d.ts.map +1 -0
  71. package/dist/translations/languages/de.js +34 -0
  72. package/dist/translations/languages/de.js.map +1 -0
  73. package/dist/translations/languages/en.d.ts +31 -0
  74. package/dist/translations/languages/en.d.ts.map +1 -0
  75. package/dist/translations/languages/en.js +34 -0
  76. package/dist/translations/languages/en.js.map +1 -0
  77. package/dist/translations/languages/es.d.ts +31 -0
  78. package/dist/translations/languages/es.d.ts.map +1 -0
  79. package/dist/translations/languages/es.js +34 -0
  80. package/dist/translations/languages/es.js.map +1 -0
  81. package/dist/translations/languages/et.d.ts +31 -0
  82. package/dist/translations/languages/et.d.ts.map +1 -0
  83. package/dist/translations/languages/et.js +34 -0
  84. package/dist/translations/languages/et.js.map +1 -0
  85. package/dist/translations/languages/fa.d.ts +31 -0
  86. package/dist/translations/languages/fa.d.ts.map +1 -0
  87. package/dist/translations/languages/fa.js +34 -0
  88. package/dist/translations/languages/fa.js.map +1 -0
  89. package/dist/translations/languages/fr.d.ts +31 -0
  90. package/dist/translations/languages/fr.d.ts.map +1 -0
  91. package/dist/translations/languages/fr.js +34 -0
  92. package/dist/translations/languages/fr.js.map +1 -0
  93. package/dist/translations/languages/he.d.ts +31 -0
  94. package/dist/translations/languages/he.d.ts.map +1 -0
  95. package/dist/translations/languages/he.js +34 -0
  96. package/dist/translations/languages/he.js.map +1 -0
  97. package/dist/translations/languages/hr.d.ts +31 -0
  98. package/dist/translations/languages/hr.d.ts.map +1 -0
  99. package/dist/translations/languages/hr.js +34 -0
  100. package/dist/translations/languages/hr.js.map +1 -0
  101. package/dist/translations/languages/hu.d.ts +31 -0
  102. package/dist/translations/languages/hu.d.ts.map +1 -0
  103. package/dist/translations/languages/hu.js +34 -0
  104. package/dist/translations/languages/hu.js.map +1 -0
  105. package/dist/translations/languages/hy.d.ts +31 -0
  106. package/dist/translations/languages/hy.d.ts.map +1 -0
  107. package/dist/translations/languages/hy.js +34 -0
  108. package/dist/translations/languages/hy.js.map +1 -0
  109. package/dist/translations/languages/id.d.ts +31 -0
  110. package/dist/translations/languages/id.d.ts.map +1 -0
  111. package/dist/translations/languages/id.js +34 -0
  112. package/dist/translations/languages/id.js.map +1 -0
  113. package/dist/translations/languages/is.d.ts +31 -0
  114. package/dist/translations/languages/is.d.ts.map +1 -0
  115. package/dist/translations/languages/is.js +34 -0
  116. package/dist/translations/languages/is.js.map +1 -0
  117. package/dist/translations/languages/it.d.ts +31 -0
  118. package/dist/translations/languages/it.d.ts.map +1 -0
  119. package/dist/translations/languages/it.js +34 -0
  120. package/dist/translations/languages/it.js.map +1 -0
  121. package/dist/translations/languages/ja.d.ts +31 -0
  122. package/dist/translations/languages/ja.d.ts.map +1 -0
  123. package/dist/translations/languages/ja.js +34 -0
  124. package/dist/translations/languages/ja.js.map +1 -0
  125. package/dist/translations/languages/ko.d.ts +31 -0
  126. package/dist/translations/languages/ko.d.ts.map +1 -0
  127. package/dist/translations/languages/ko.js +34 -0
  128. package/dist/translations/languages/ko.js.map +1 -0
  129. package/dist/translations/languages/lt.d.ts +31 -0
  130. package/dist/translations/languages/lt.d.ts.map +1 -0
  131. package/dist/translations/languages/lt.js +34 -0
  132. package/dist/translations/languages/lt.js.map +1 -0
  133. package/dist/translations/languages/lv.d.ts +31 -0
  134. package/dist/translations/languages/lv.d.ts.map +1 -0
  135. package/dist/translations/languages/lv.js +34 -0
  136. package/dist/translations/languages/lv.js.map +1 -0
  137. package/dist/translations/languages/my.d.ts +31 -0
  138. package/dist/translations/languages/my.d.ts.map +1 -0
  139. package/dist/translations/languages/my.js +34 -0
  140. package/dist/translations/languages/my.js.map +1 -0
  141. package/dist/translations/languages/nb.d.ts +31 -0
  142. package/dist/translations/languages/nb.d.ts.map +1 -0
  143. package/dist/translations/languages/nb.js +34 -0
  144. package/dist/translations/languages/nb.js.map +1 -0
  145. package/dist/translations/languages/nl.d.ts +31 -0
  146. package/dist/translations/languages/nl.d.ts.map +1 -0
  147. package/dist/translations/languages/nl.js +34 -0
  148. package/dist/translations/languages/nl.js.map +1 -0
  149. package/dist/translations/languages/pl.d.ts +31 -0
  150. package/dist/translations/languages/pl.d.ts.map +1 -0
  151. package/dist/translations/languages/pl.js +34 -0
  152. package/dist/translations/languages/pl.js.map +1 -0
  153. package/dist/translations/languages/pt.d.ts +31 -0
  154. package/dist/translations/languages/pt.d.ts.map +1 -0
  155. package/dist/translations/languages/pt.js +34 -0
  156. package/dist/translations/languages/pt.js.map +1 -0
  157. package/dist/translations/languages/ro.d.ts +31 -0
  158. package/dist/translations/languages/ro.d.ts.map +1 -0
  159. package/dist/translations/languages/ro.js +34 -0
  160. package/dist/translations/languages/ro.js.map +1 -0
  161. package/dist/translations/languages/rs.d.ts +31 -0
  162. package/dist/translations/languages/rs.d.ts.map +1 -0
  163. package/dist/translations/languages/rs.js +34 -0
  164. package/dist/translations/languages/rs.js.map +1 -0
  165. package/dist/translations/languages/rsLatin.d.ts +31 -0
  166. package/dist/translations/languages/rsLatin.d.ts.map +1 -0
  167. package/dist/translations/languages/rsLatin.js +34 -0
  168. package/dist/translations/languages/rsLatin.js.map +1 -0
  169. package/dist/translations/languages/ru.d.ts +31 -0
  170. package/dist/translations/languages/ru.d.ts.map +1 -0
  171. package/dist/translations/languages/ru.js +34 -0
  172. package/dist/translations/languages/ru.js.map +1 -0
  173. package/dist/translations/languages/sk.d.ts +31 -0
  174. package/dist/translations/languages/sk.d.ts.map +1 -0
  175. package/dist/translations/languages/sk.js +34 -0
  176. package/dist/translations/languages/sk.js.map +1 -0
  177. package/dist/translations/languages/sl.d.ts +31 -0
  178. package/dist/translations/languages/sl.d.ts.map +1 -0
  179. package/dist/translations/languages/sl.js +34 -0
  180. package/dist/translations/languages/sl.js.map +1 -0
  181. package/dist/translations/languages/sv.d.ts +31 -0
  182. package/dist/translations/languages/sv.d.ts.map +1 -0
  183. package/dist/translations/languages/sv.js +34 -0
  184. package/dist/translations/languages/sv.js.map +1 -0
  185. package/dist/translations/languages/ta.d.ts +31 -0
  186. package/dist/translations/languages/ta.d.ts.map +1 -0
  187. package/dist/translations/languages/ta.js +34 -0
  188. package/dist/translations/languages/ta.js.map +1 -0
  189. package/dist/translations/languages/th.d.ts +31 -0
  190. package/dist/translations/languages/th.d.ts.map +1 -0
  191. package/dist/translations/languages/th.js +34 -0
  192. package/dist/translations/languages/th.js.map +1 -0
  193. package/dist/translations/languages/tr.d.ts +31 -0
  194. package/dist/translations/languages/tr.d.ts.map +1 -0
  195. package/dist/translations/languages/tr.js +34 -0
  196. package/dist/translations/languages/tr.js.map +1 -0
  197. package/dist/translations/languages/uk.d.ts +31 -0
  198. package/dist/translations/languages/uk.d.ts.map +1 -0
  199. package/dist/translations/languages/uk.js +34 -0
  200. package/dist/translations/languages/uk.js.map +1 -0
  201. package/dist/translations/languages/vi.d.ts +31 -0
  202. package/dist/translations/languages/vi.d.ts.map +1 -0
  203. package/dist/translations/languages/vi.js +34 -0
  204. package/dist/translations/languages/vi.js.map +1 -0
  205. package/dist/translations/languages/zh.d.ts +31 -0
  206. package/dist/translations/languages/zh.d.ts.map +1 -0
  207. package/dist/translations/languages/zh.js +34 -0
  208. package/dist/translations/languages/zh.js.map +1 -0
  209. package/dist/translations/languages/zhTw.d.ts +31 -0
  210. package/dist/translations/languages/zhTw.d.ts.map +1 -0
  211. package/dist/translations/languages/zhTw.js +34 -0
  212. package/dist/translations/languages/zhTw.js.map +1 -0
  213. package/dist/translations/types.d.ts +32 -0
  214. package/dist/translations/types.d.ts.map +1 -0
  215. package/dist/translations/types.js +3 -0
  216. package/dist/translations/types.js.map +1 -0
  217. package/dist/types.d.ts +6 -1
  218. package/dist/types.d.ts.map +1 -1
  219. package/dist/types.js.map +1 -1
  220. package/package.json +7 -6
  221. package/src/collection/getAccessField.ts +33 -13
  222. package/src/collection/index.ts +63 -22
  223. package/src/components/APIKeyField/index.client.tsx +73 -0
  224. package/src/components/APIKeyField/index.css +105 -0
  225. package/src/components/APIKeysEmptyState/index.client.tsx +36 -0
  226. package/src/components/AccessField/index.client.tsx +163 -211
  227. package/src/components/AccessField/index.css +50 -44
  228. package/src/components/SettingsMenu/index.client.tsx +34 -0
  229. package/src/endpoint/access.ts +12 -0
  230. package/src/exports/client.ts +3 -0
  231. package/src/index.ts +49 -3
  232. package/src/translations/index.ts +108 -0
  233. package/src/translations/languages/ar.ts +35 -0
  234. package/src/translations/languages/az.ts +35 -0
  235. package/src/translations/languages/bg.ts +35 -0
  236. package/src/translations/languages/bnBd.ts +35 -0
  237. package/src/translations/languages/bnIn.ts +35 -0
  238. package/src/translations/languages/ca.ts +35 -0
  239. package/src/translations/languages/cs.ts +35 -0
  240. package/src/translations/languages/da.ts +35 -0
  241. package/src/translations/languages/de.ts +35 -0
  242. package/src/translations/languages/en.ts +35 -0
  243. package/src/translations/languages/es.ts +35 -0
  244. package/src/translations/languages/et.ts +35 -0
  245. package/src/translations/languages/fa.ts +35 -0
  246. package/src/translations/languages/fr.ts +35 -0
  247. package/src/translations/languages/he.ts +35 -0
  248. package/src/translations/languages/hr.ts +35 -0
  249. package/src/translations/languages/hu.ts +35 -0
  250. package/src/translations/languages/hy.ts +35 -0
  251. package/src/translations/languages/id.ts +35 -0
  252. package/src/translations/languages/is.ts +35 -0
  253. package/src/translations/languages/it.ts +35 -0
  254. package/src/translations/languages/ja.ts +35 -0
  255. package/src/translations/languages/ko.ts +35 -0
  256. package/src/translations/languages/lt.ts +35 -0
  257. package/src/translations/languages/lv.ts +35 -0
  258. package/src/translations/languages/my.ts +35 -0
  259. package/src/translations/languages/nb.ts +35 -0
  260. package/src/translations/languages/nl.ts +35 -0
  261. package/src/translations/languages/pl.ts +35 -0
  262. package/src/translations/languages/pt.ts +35 -0
  263. package/src/translations/languages/ro.ts +35 -0
  264. package/src/translations/languages/rs.ts +35 -0
  265. package/src/translations/languages/rsLatin.ts +35 -0
  266. package/src/translations/languages/ru.ts +35 -0
  267. package/src/translations/languages/sk.ts +35 -0
  268. package/src/translations/languages/sl.ts +35 -0
  269. package/src/translations/languages/sv.ts +35 -0
  270. package/src/translations/languages/ta.ts +35 -0
  271. package/src/translations/languages/th.ts +35 -0
  272. package/src/translations/languages/tr.ts +35 -0
  273. package/src/translations/languages/uk.ts +35 -0
  274. package/src/translations/languages/vi.ts +35 -0
  275. package/src/translations/languages/zh.ts +35 -0
  276. package/src/translations/languages/zhTw.ts +35 -0
  277. package/src/translations/types.ts +34 -0
  278. package/src/types.ts +6 -1
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { PopupList, useConfig, useTranslation } from '@payloadcms/ui';
4
+ import { formatAdminURL } from 'payload/shared';
5
+ import React from 'react';
6
+ /**
7
+ * Entry in the user menu's Settings sub-popup linking to the API keys
8
+ * collection. The collection is excluded from the main nav
9
+ * (`admin.group: false`) and managed from here instead.
10
+ */ export const MCPSettingsMenu = ()=>{
11
+ const { config } = useConfig();
12
+ const { t } = useTranslation();
13
+ return /*#__PURE__*/ _jsxs(PopupList.MenuItem, {
14
+ children: [
15
+ /*#__PURE__*/ _jsx(PopupList.GroupLabel, {
16
+ label: t('plugin-mcp:mcp')
17
+ }),
18
+ /*#__PURE__*/ _jsx(PopupList.Button, {
19
+ href: formatAdminURL({
20
+ adminRoute: config.routes.admin,
21
+ path: '/collections/payload-mcp-api-keys'
22
+ }),
23
+ children: t('plugin-mcp:manageAPIKeys')
24
+ })
25
+ ]
26
+ });
27
+ };
28
+
29
+ //# sourceMappingURL=index.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/SettingsMenu/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { PopupList, useConfig, useTranslation } from '@payloadcms/ui'\nimport { formatAdminURL } from 'payload/shared'\nimport React from 'react'\n\nimport type {\n PluginMCPTranslationKeys,\n PluginMCPTranslations,\n} from '../../translations/index.js'\n\n/**\n * Entry in the user menu's Settings sub-popup linking to the API keys\n * collection. The collection is excluded from the main nav\n * (`admin.group: false`) and managed from here instead.\n */\nexport const MCPSettingsMenu: React.FC = () => {\n const { config } = useConfig()\n const { t } = useTranslation<PluginMCPTranslations, PluginMCPTranslationKeys>()\n\n return (\n <PopupList.MenuItem>\n <PopupList.GroupLabel label={t('plugin-mcp:mcp')} />\n <PopupList.Button\n href={formatAdminURL({\n adminRoute: config.routes.admin,\n path: '/collections/payload-mcp-api-keys',\n })}\n >\n {t('plugin-mcp:manageAPIKeys')}\n </PopupList.Button>\n </PopupList.MenuItem>\n )\n}\n"],"names":["PopupList","useConfig","useTranslation","formatAdminURL","React","MCPSettingsMenu","config","t","MenuItem","GroupLabel","label","Button","href","adminRoute","routes","admin","path"],"mappings":"AAAA;;AAEA,SAASA,SAAS,EAAEC,SAAS,EAAEC,cAAc,QAAQ,iBAAgB;AACrE,SAASC,cAAc,QAAQ,iBAAgB;AAC/C,OAAOC,WAAW,QAAO;AAOzB;;;;CAIC,GACD,OAAO,MAAMC,kBAA4B;IACvC,MAAM,EAAEC,MAAM,EAAE,GAAGL;IACnB,MAAM,EAAEM,CAAC,EAAE,GAAGL;IAEd,qBACE,MAACF,UAAUQ,QAAQ;;0BACjB,KAACR,UAAUS,UAAU;gBAACC,OAAOH,EAAE;;0BAC/B,KAACP,UAAUW,MAAM;gBACfC,MAAMT,eAAe;oBACnBU,YAAYP,OAAOQ,MAAM,CAACC,KAAK;oBAC/BC,MAAM;gBACR;0BAECT,EAAE;;;;AAIX,EAAC"}
@@ -93,6 +93,22 @@ const getAPIKeyDoc = async ({ logger, overrideApiKey, pluginConfig, req })=>{
93
93
  if (!user) {
94
94
  throw new UnauthorizedError();
95
95
  }
96
+ try {
97
+ await req.payload.db.updateOne({
98
+ id: doc.id,
99
+ collection: 'payload-mcp-api-keys',
100
+ data: {
101
+ lastUsed: new Date().toISOString()
102
+ },
103
+ req,
104
+ returning: false
105
+ });
106
+ } catch (err) {
107
+ logger.warn({
108
+ err,
109
+ msg: 'Failed to update MCP API key last-used timestamp'
110
+ });
111
+ }
96
112
  return {
97
113
  ...doc,
98
114
  user: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/endpoint/access.ts"],"sourcesContent":["import type { DefaultDocumentIDType, PayloadRequest, TypedUser } from 'payload'\n\nimport crypto from 'crypto'\nimport { UnauthorizedError } from 'payload'\n\nimport type { AuthorizedMCP, MCPAPIKeysDoc } from '../types.js'\n\nimport { getLogger } from '../utils/getLogger.js'\nimport { getPluginConfig } from '../utils/getPluginConfig.js'\n\n/**\n * Resolves the API key (or dev-mode session) and returns the items the caller\n * may use. Denied items are dropped from the array.\n */\nexport const getAuthorizedMCP: (args: { req: PayloadRequest }) => Promise<AuthorizedMCP> = async ({\n req,\n}) => {\n const logger = getLogger({ payload: req.payload })\n const pluginConfig = getPluginConfig({ config: req.payload.config })\n\n const authHeader = req.headers.get('Authorization')\n const hasBearerToken = authHeader?.startsWith('Bearer ')\n\n const buildAuthorized = (apiKeyDoc: MCPAPIKeysDoc): AuthorizedMCP => ({\n items: pluginConfig.items.filter((item) => {\n switch (item.type) {\n case 'collectionTool':\n return apiKeyDoc.access.collections?.[item.collectionSlug]?.[item.configKey] !== false\n case 'globalTool':\n return apiKeyDoc.access.globals?.[item.globalSlug]?.[item.configKey] !== false\n case 'prompt':\n return apiKeyDoc.access.prompts?.[item.configKey] !== false\n case 'resource':\n return apiKeyDoc.access.resources?.[item.configKey] !== false\n case 'tool':\n return apiKeyDoc.access.tools?.[item.configKey] !== false\n }\n }),\n overrideAccess:\n typeof apiKeyDoc.overrideAccess === 'boolean' ? apiKeyDoc.overrideAccess : false,\n user: apiKeyDoc.user,\n })\n\n if (pluginConfig.overrideAuth) {\n return await pluginConfig.overrideAuth({\n getAPIKeyDoc: (overrideApiKey) => getAPIKeyDoc({ logger, overrideApiKey, pluginConfig, req }),\n getAuthorizedMCP: ({ apiKeyDoc }) => buildAuthorized(apiKeyDoc),\n pluginConfig,\n req,\n })\n }\n\n if (process.env.NODE_ENV === 'development' && !hasBearerToken) {\n logger.info('Dev mode: skipping API key check, using session user')\n return buildAuthorized({\n id: -1,\n access: {},\n overrideAccess: true,\n user: req.user ?? null,\n })\n }\n\n return buildAuthorized(await getAPIKeyDoc({ logger, pluginConfig, req }))\n}\n\nconst getAPIKeyDoc = async ({\n logger,\n overrideApiKey,\n pluginConfig,\n req,\n}: {\n logger: ReturnType<typeof getLogger>\n overrideApiKey?: string\n pluginConfig: ReturnType<typeof getPluginConfig>\n req: PayloadRequest\n}): Promise<MCPAPIKeysDoc> => {\n const authHeader = req.headers.get('Authorization')\n const hasBearerToken = authHeader?.startsWith('Bearer ')\n\n const apiKey =\n overrideApiKey ?? (hasBearerToken ? authHeader?.replace('Bearer ', '').trim() || null : null)\n\n if (!apiKey) {\n throw new UnauthorizedError()\n }\n\n const sha256APIKeyIndex = crypto\n .createHmac('sha256', req.payload.secret)\n .update(apiKey)\n .digest('hex')\n\n const doc = await req.payload.db.findOne<MCPAPIKeysDoc>({\n collection: 'payload-mcp-api-keys',\n req,\n where: {\n apiKeyIndex: { equals: sha256APIKeyIndex },\n },\n })\n\n if (!doc || !doc.user) {\n throw new UnauthorizedError()\n }\n\n logger.info('API Key is valid')\n\n const userRef = doc.user\n const userID =\n typeof userRef === 'object' && userRef !== null && 'id' in userRef\n ? userRef.id\n : (userRef as unknown as DefaultDocumentIDType)\n\n const user = (await req.payload.findByID({\n id: userID,\n collection: pluginConfig.userCollection,\n depth: 0,\n disableErrors: true,\n req,\n })) as null | TypedUser\n\n if (!user) {\n throw new UnauthorizedError()\n }\n\n return {\n ...doc,\n user: {\n ...user,\n _strategy: 'mcp-api-key' as const,\n collection: pluginConfig.userCollection,\n },\n }\n}\n"],"names":["crypto","UnauthorizedError","getLogger","getPluginConfig","getAuthorizedMCP","req","logger","payload","pluginConfig","config","authHeader","headers","get","hasBearerToken","startsWith","buildAuthorized","apiKeyDoc","items","filter","item","type","access","collections","collectionSlug","configKey","globals","globalSlug","prompts","resources","tools","overrideAccess","user","overrideAuth","getAPIKeyDoc","overrideApiKey","process","env","NODE_ENV","info","id","apiKey","replace","trim","sha256APIKeyIndex","createHmac","secret","update","digest","doc","db","findOne","collection","where","apiKeyIndex","equals","userRef","userID","findByID","userCollection","depth","disableErrors","_strategy"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/endpoint/access.ts"],"sourcesContent":["import type { DefaultDocumentIDType, PayloadRequest, TypedUser } from 'payload'\n\nimport crypto from 'crypto'\nimport { UnauthorizedError } from 'payload'\n\nimport type { AuthorizedMCP, MCPAPIKeysDoc } from '../types.js'\n\nimport { getLogger } from '../utils/getLogger.js'\nimport { getPluginConfig } from '../utils/getPluginConfig.js'\n\n/**\n * Resolves the API key (or dev-mode session) and returns the items the caller\n * may use. Denied items are dropped from the array.\n */\nexport const getAuthorizedMCP: (args: { req: PayloadRequest }) => Promise<AuthorizedMCP> = async ({\n req,\n}) => {\n const logger = getLogger({ payload: req.payload })\n const pluginConfig = getPluginConfig({ config: req.payload.config })\n\n const authHeader = req.headers.get('Authorization')\n const hasBearerToken = authHeader?.startsWith('Bearer ')\n\n const buildAuthorized = (apiKeyDoc: MCPAPIKeysDoc): AuthorizedMCP => ({\n items: pluginConfig.items.filter((item) => {\n switch (item.type) {\n case 'collectionTool':\n return apiKeyDoc.access.collections?.[item.collectionSlug]?.[item.configKey] !== false\n case 'globalTool':\n return apiKeyDoc.access.globals?.[item.globalSlug]?.[item.configKey] !== false\n case 'prompt':\n return apiKeyDoc.access.prompts?.[item.configKey] !== false\n case 'resource':\n return apiKeyDoc.access.resources?.[item.configKey] !== false\n case 'tool':\n return apiKeyDoc.access.tools?.[item.configKey] !== false\n }\n }),\n overrideAccess:\n typeof apiKeyDoc.overrideAccess === 'boolean' ? apiKeyDoc.overrideAccess : false,\n user: apiKeyDoc.user,\n })\n\n if (pluginConfig.overrideAuth) {\n return await pluginConfig.overrideAuth({\n getAPIKeyDoc: (overrideApiKey) => getAPIKeyDoc({ logger, overrideApiKey, pluginConfig, req }),\n getAuthorizedMCP: ({ apiKeyDoc }) => buildAuthorized(apiKeyDoc),\n pluginConfig,\n req,\n })\n }\n\n if (process.env.NODE_ENV === 'development' && !hasBearerToken) {\n logger.info('Dev mode: skipping API key check, using session user')\n return buildAuthorized({\n id: -1,\n access: {},\n overrideAccess: true,\n user: req.user ?? null,\n })\n }\n\n return buildAuthorized(await getAPIKeyDoc({ logger, pluginConfig, req }))\n}\n\nconst getAPIKeyDoc = async ({\n logger,\n overrideApiKey,\n pluginConfig,\n req,\n}: {\n logger: ReturnType<typeof getLogger>\n overrideApiKey?: string\n pluginConfig: ReturnType<typeof getPluginConfig>\n req: PayloadRequest\n}): Promise<MCPAPIKeysDoc> => {\n const authHeader = req.headers.get('Authorization')\n const hasBearerToken = authHeader?.startsWith('Bearer ')\n\n const apiKey =\n overrideApiKey ?? (hasBearerToken ? authHeader?.replace('Bearer ', '').trim() || null : null)\n\n if (!apiKey) {\n throw new UnauthorizedError()\n }\n\n const sha256APIKeyIndex = crypto\n .createHmac('sha256', req.payload.secret)\n .update(apiKey)\n .digest('hex')\n\n const doc = await req.payload.db.findOne<MCPAPIKeysDoc>({\n collection: 'payload-mcp-api-keys',\n req,\n where: {\n apiKeyIndex: { equals: sha256APIKeyIndex },\n },\n })\n\n if (!doc || !doc.user) {\n throw new UnauthorizedError()\n }\n\n logger.info('API Key is valid')\n\n const userRef = doc.user\n const userID =\n typeof userRef === 'object' && userRef !== null && 'id' in userRef\n ? userRef.id\n : (userRef as unknown as DefaultDocumentIDType)\n\n const user = (await req.payload.findByID({\n id: userID,\n collection: pluginConfig.userCollection,\n depth: 0,\n disableErrors: true,\n req,\n })) as null | TypedUser\n\n if (!user) {\n throw new UnauthorizedError()\n }\n\n try {\n await req.payload.db.updateOne({\n id: doc.id,\n collection: 'payload-mcp-api-keys',\n data: { lastUsed: new Date().toISOString() },\n req,\n returning: false,\n })\n } catch (err) {\n logger.warn({ err, msg: 'Failed to update MCP API key last-used timestamp' })\n }\n\n return {\n ...doc,\n user: {\n ...user,\n _strategy: 'mcp-api-key' as const,\n collection: pluginConfig.userCollection,\n },\n }\n}\n"],"names":["crypto","UnauthorizedError","getLogger","getPluginConfig","getAuthorizedMCP","req","logger","payload","pluginConfig","config","authHeader","headers","get","hasBearerToken","startsWith","buildAuthorized","apiKeyDoc","items","filter","item","type","access","collections","collectionSlug","configKey","globals","globalSlug","prompts","resources","tools","overrideAccess","user","overrideAuth","getAPIKeyDoc","overrideApiKey","process","env","NODE_ENV","info","id","apiKey","replace","trim","sha256APIKeyIndex","createHmac","secret","update","digest","doc","db","findOne","collection","where","apiKeyIndex","equals","userRef","userID","findByID","userCollection","depth","disableErrors","updateOne","data","lastUsed","Date","toISOString","returning","err","warn","msg","_strategy"],"mappings":"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"}
@@ -1,2 +1,5 @@
1
1
  export { AccessField } from '../components/AccessField/index.client.js';
2
+ export { APIKeyField } from '../components/APIKeyField/index.client.js';
3
+ export { APIKeysEmptyState } from '../components/APIKeysEmptyState/index.client.js';
4
+ export { MCPSettingsMenu } from '../components/SettingsMenu/index.client.js';
2
5
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAA;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAA;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA"}
@@ -1,4 +1,7 @@
1
1
  'use client';
2
2
  export { AccessField } from '../components/AccessField/index.client.js';
3
+ export { APIKeyField } from '../components/APIKeyField/index.client.js';
4
+ export { APIKeysEmptyState } from '../components/APIKeysEmptyState/index.client.js';
5
+ export { MCPSettingsMenu } from '../components/SettingsMenu/index.client.js';
3
6
 
4
7
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["'use client'\nexport { AccessField } from '../components/AccessField/index.client.js'\n"],"names":["AccessField"],"mappings":"AAAA;AACA,SAASA,WAAW,QAAQ,4CAA2C"}
1
+ {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["'use client'\nexport { AccessField } from '../components/AccessField/index.client.js'\nexport { APIKeyField } from '../components/APIKeyField/index.client.js'\nexport { APIKeysEmptyState } from '../components/APIKeysEmptyState/index.client.js'\nexport { MCPSettingsMenu } from '../components/SettingsMenu/index.client.js'\n"],"names":["AccessField","APIKeyField","APIKeysEmptyState","MCPSettingsMenu"],"mappings":"AAAA;AACA,SAASA,WAAW,QAAQ,4CAA2C;AACvE,SAASC,WAAW,QAAQ,4CAA2C;AACvE,SAASC,iBAAiB,QAAQ,kDAAiD;AACnF,SAASC,eAAe,QAAQ,6CAA4C"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAM1F,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAiB,cAAc;QAC7B,UAAU,EAAE,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;KACjD;IACD,UAAU,iBAAiB;QACzB,uFAAuF;QACvF,wBAAwB,EAAE,eAAe,CAAA;KAC1C;CACF;AAED,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,CAAA;AAExE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAElG,eAAO,MAAM,SAAS,wDAwCpB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAO1F,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAiB,cAAc;QAC7B,UAAU,EAAE,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;KACjD;IACD,UAAU,iBAAiB;QACzB,uFAAuF;QACvF,wBAAwB,EAAE,eAAe,CAAA;KAC1C;CACF;AAED,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,CAAA;AAExE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAElG,eAAO,MAAM,SAAS,wDAkFpB,CAAA"}
package/dist/index.js CHANGED
@@ -2,14 +2,14 @@ import { defaultUserCollection, definePlugin } from 'payload';
2
2
  import { getAPIKeysCollection } from './collection/index.js';
3
3
  import { mcpEndpoint } from './endpoint/index.js';
4
4
  import { sanitizeMCPConfig } from './mcp/sanitizeMCPConfig.js';
5
+ import { translations } from './translations/index.js';
5
6
  export { defineCollectionTool, defineGlobalTool, definePrompt, defineTool } from './defineTool.js';
6
7
  export const mcpPlugin = definePlugin({
7
8
  slug: '@payloadcms/plugin-mcp',
8
9
  order: 10,
9
10
  plugin: ({ config, plugins, ...rawConfig })=>{
10
- // Our `payload-mcp-api-keys` is auth-enabled; if it'd be the only auth
11
- // collection, Payload's later sanitize would pick it as `admin.user`.
12
- // Pre-seed the default user collection to prevent that.
11
+ // If a project has no auth collection yet, add the default users collection
12
+ // so the relationship target and default `userCollection` exist.
13
13
  if (!config.admin?.user) {
14
14
  const firstCollectionWithAuth = (config.collections ?? []).find(({ auth })=>Boolean(auth));
15
15
  if (!firstCollectionWithAuth) {
@@ -31,6 +31,27 @@ export const mcpPlugin = definePlugin({
31
31
  (config.collections ??= []).push(getAPIKeysCollection({
32
32
  pluginConfig
33
33
  }));
34
+ if (!config.i18n) {
35
+ config.i18n = {};
36
+ }
37
+ if (!config.i18n.translations) {
38
+ config.i18n.translations = {};
39
+ }
40
+ const supportedLanguageKeys = config.i18n.supportedLanguages ? Object.keys(config.i18n.supportedLanguages) : [
41
+ 'en'
42
+ ];
43
+ for (const lang of supportedLanguageKeys){
44
+ const pluginEntry = translations[lang];
45
+ if (!pluginEntry) {
46
+ continue;
47
+ }
48
+ const typedLocale = lang;
49
+ const existing = config.i18n.translations[typedLocale] ?? {};
50
+ config.i18n.translations[typedLocale] = {
51
+ ...existing,
52
+ 'plugin-mcp': pluginEntry.translations['plugin-mcp']
53
+ };
54
+ }
34
55
  // Keep the API-keys collection registered even when disabled, so DB schema
35
56
  // and generated types don't drift between enabled/disabled environments.
36
57
  if (pluginConfig.disabled) {
@@ -38,6 +59,16 @@ export const mcpPlugin = definePlugin({
38
59
  }
39
60
  return {
40
61
  ...config,
62
+ admin: {
63
+ ...config.admin,
64
+ components: {
65
+ ...config.admin?.components,
66
+ userMenuSettingsItems: [
67
+ ...config.admin?.components?.userMenuSettingsItems ?? [],
68
+ '@payloadcms/plugin-mcp/client#MCPSettingsMenu'
69
+ ]
70
+ }
71
+ },
41
72
  endpoints: [
42
73
  ...config.endpoints ?? [],
43
74
  // Payload prefixes /api, so the full path is /api/mcp.
@@ -45,6 +76,18 @@ export const mcpPlugin = definePlugin({
45
76
  handler: mcpEndpoint,
46
77
  method: 'post',
47
78
  path: '/mcp'
79
+ },
80
+ // Streamable HTTP's optional server=>client GET stream. We don't offer
81
+ // one, so answer 405 per spec-— clients then skip it cleanly
82
+ {
83
+ handler: ()=>new Response(null, {
84
+ headers: {
85
+ Allow: 'POST'
86
+ },
87
+ status: 405
88
+ }),
89
+ method: 'get',
90
+ path: '/mcp'
48
91
  }
49
92
  ]
50
93
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { defaultUserCollection, definePlugin } from 'payload'\n\nimport type { AuthorizedMCP, MCPPluginConfig, SanitizedMCPPluginConfig } from './types.js'\n\nimport { getAPIKeysCollection } from './collection/index.js'\nimport { mcpEndpoint } from './endpoint/index.js'\nimport { sanitizeMCPConfig } from './mcp/sanitizeMCPConfig.js'\n\ndeclare module 'payload' {\n export interface PayloadRequest {\n payloadAPI: 'GraphQL' | 'local' | 'MCP' | 'REST'\n }\n interface RegisteredPlugins {\n /** After the plugin's `plugin` callback runs, `options` holds the sanitized config. */\n '@payloadcms/plugin-mcp': MCPPluginConfig\n }\n}\n\nexport type { AuthorizedMCP, MCPPluginConfig, SanitizedMCPPluginConfig }\n\nexport { defineCollectionTool, defineGlobalTool, definePrompt, defineTool } from './defineTool.js'\n\nexport const mcpPlugin = definePlugin<MCPPluginConfig>({\n slug: '@payloadcms/plugin-mcp',\n order: 10,\n plugin: ({ config, plugins, ...rawConfig }) => {\n // Our `payload-mcp-api-keys` is auth-enabled; if it'd be the only auth\n // collection, Payload's later sanitize would pick it as `admin.user`.\n // Pre-seed the default user collection to prevent that.\n if (!config.admin?.user) {\n const firstCollectionWithAuth = (config.collections ?? []).find(({ auth }) => Boolean(auth))\n if (!firstCollectionWithAuth) {\n ;(config.collections ??= []).push(defaultUserCollection)\n }\n }\n\n const pluginConfig = sanitizeMCPConfig({ config, pluginConfig: rawConfig })\n\n // Stash the sanitized config on plugin options so `getPluginConfig()` reads it.\n const registered = plugins['@payloadcms/plugin-mcp']\n if (registered) {\n // @ts-expect-error\n registered.sanitizedOptions = pluginConfig as unknown as typeof registered.options\n }\n\n ;(config.collections ??= []).push(getAPIKeysCollection({ pluginConfig }))\n\n // Keep the API-keys collection registered even when disabled, so DB schema\n // and generated types don't drift between enabled/disabled environments.\n if (pluginConfig.disabled) {\n return config\n }\n\n return {\n ...config,\n endpoints: [\n ...(config.endpoints ?? []),\n // Payload prefixes /api, so the full path is /api/mcp.\n { handler: mcpEndpoint, method: 'post', path: '/mcp' },\n ],\n }\n },\n})\n"],"names":["defaultUserCollection","definePlugin","getAPIKeysCollection","mcpEndpoint","sanitizeMCPConfig","defineCollectionTool","defineGlobalTool","definePrompt","defineTool","mcpPlugin","slug","order","plugin","config","plugins","rawConfig","admin","user","firstCollectionWithAuth","collections","find","auth","Boolean","push","pluginConfig","registered","sanitizedOptions","disabled","endpoints","handler","method","path"],"mappings":"AAAA,SAASA,qBAAqB,EAAEC,YAAY,QAAQ,UAAS;AAI7D,SAASC,oBAAoB,QAAQ,wBAAuB;AAC5D,SAASC,WAAW,QAAQ,sBAAqB;AACjD,SAASC,iBAAiB,QAAQ,6BAA4B;AAc9D,SAASC,oBAAoB,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,UAAU,QAAQ,kBAAiB;AAElG,OAAO,MAAMC,YAAYR,aAA8B;IACrDS,MAAM;IACNC,OAAO;IACPC,QAAQ,CAAC,EAAEC,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAW;QACxC,uEAAuE;QACvE,sEAAsE;QACtE,wDAAwD;QACxD,IAAI,CAACF,OAAOG,KAAK,EAAEC,MAAM;YACvB,MAAMC,0BAA0B,AAACL,CAAAA,OAAOM,WAAW,IAAI,EAAE,AAAD,EAAGC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKC,QAAQD;YACtF,IAAI,CAACH,yBAAyB;;gBAC1BL,CAAAA,OAAOM,WAAW,KAAK,EAAE,AAAD,EAAGI,IAAI,CAACvB;YACpC;QACF;QAEA,MAAMwB,eAAepB,kBAAkB;YAAES;YAAQW,cAAcT;QAAU;QAEzE,gFAAgF;QAChF,MAAMU,aAAaX,OAAO,CAAC,yBAAyB;QACpD,IAAIW,YAAY;YACd,mBAAmB;YACnBA,WAAWC,gBAAgB,GAAGF;QAChC;;QAEEX,CAAAA,OAAOM,WAAW,KAAK,EAAE,AAAD,EAAGI,IAAI,CAACrB,qBAAqB;YAAEsB;QAAa;QAEtE,2EAA2E;QAC3E,yEAAyE;QACzE,IAAIA,aAAaG,QAAQ,EAAE;YACzB,OAAOd;QACT;QAEA,OAAO;YACL,GAAGA,MAAM;YACTe,WAAW;mBACLf,OAAOe,SAAS,IAAI,EAAE;gBAC1B,uDAAuD;gBACvD;oBAAEC,SAAS1B;oBAAa2B,QAAQ;oBAAQC,MAAM;gBAAO;aACtD;QACH;IACF;AACF,GAAE"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\n\nimport { defaultUserCollection, definePlugin } from 'payload'\n\nimport type { PluginDefaultTranslationsObject } from './translations/types.js'\nimport type { AuthorizedMCP, MCPPluginConfig, SanitizedMCPPluginConfig } from './types.js'\n\nimport { getAPIKeysCollection } from './collection/index.js'\nimport { mcpEndpoint } from './endpoint/index.js'\nimport { sanitizeMCPConfig } from './mcp/sanitizeMCPConfig.js'\nimport { translations } from './translations/index.js'\n\ndeclare module 'payload' {\n export interface PayloadRequest {\n payloadAPI: 'GraphQL' | 'local' | 'MCP' | 'REST'\n }\n interface RegisteredPlugins {\n /** After the plugin's `plugin` callback runs, `options` holds the sanitized config. */\n '@payloadcms/plugin-mcp': MCPPluginConfig\n }\n}\n\nexport type { AuthorizedMCP, MCPPluginConfig, SanitizedMCPPluginConfig }\n\nexport { defineCollectionTool, defineGlobalTool, definePrompt, defineTool } from './defineTool.js'\n\nexport const mcpPlugin = definePlugin<MCPPluginConfig>({\n slug: '@payloadcms/plugin-mcp',\n order: 10,\n plugin: ({ config, plugins, ...rawConfig }) => {\n // If a project has no auth collection yet, add the default users collection\n // so the relationship target and default `userCollection` exist.\n if (!config.admin?.user) {\n const firstCollectionWithAuth = (config.collections ?? []).find(({ auth }) => Boolean(auth))\n if (!firstCollectionWithAuth) {\n ;(config.collections ??= []).push(defaultUserCollection)\n }\n }\n\n const pluginConfig = sanitizeMCPConfig({ config, pluginConfig: rawConfig })\n\n // Stash the sanitized config on plugin options so `getPluginConfig()` reads it.\n const registered = plugins['@payloadcms/plugin-mcp']\n if (registered) {\n // @ts-expect-error\n registered.sanitizedOptions = pluginConfig as unknown as typeof registered.options\n }\n\n ;(config.collections ??= []).push(getAPIKeysCollection({ pluginConfig }))\n\n if (!config.i18n) {\n config.i18n = {}\n }\n\n if (!config.i18n.translations) {\n config.i18n.translations = {}\n }\n\n const supportedLanguageKeys = config.i18n.supportedLanguages\n ? Object.keys(config.i18n.supportedLanguages)\n : ['en']\n\n for (const lang of supportedLanguageKeys) {\n const pluginEntry = translations[lang as keyof typeof translations]\n if (!pluginEntry) {\n continue\n }\n\n const typedLocale = lang as AcceptedLanguages\n const existing = (config.i18n.translations[typedLocale] ?? {}) as Record<string, unknown>\n config.i18n.translations[typedLocale] = {\n ...existing,\n 'plugin-mcp': pluginEntry.translations['plugin-mcp'],\n } as PluginDefaultTranslationsObject\n }\n\n // Keep the API-keys collection registered even when disabled, so DB schema\n // and generated types don't drift between enabled/disabled environments.\n if (pluginConfig.disabled) {\n return config\n }\n\n return {\n ...config,\n admin: {\n ...config.admin,\n components: {\n ...config.admin?.components,\n userMenuSettingsItems: [\n ...(config.admin?.components?.userMenuSettingsItems ?? []),\n '@payloadcms/plugin-mcp/client#MCPSettingsMenu',\n ],\n },\n },\n endpoints: [\n ...(config.endpoints ?? []),\n // Payload prefixes /api, so the full path is /api/mcp.\n { handler: mcpEndpoint, method: 'post', path: '/mcp' },\n // Streamable HTTP's optional server=>client GET stream. We don't offer\n // one, so answer 405 per spec-— clients then skip it cleanly\n {\n handler: () => new Response(null, { headers: { Allow: 'POST' }, status: 405 }),\n method: 'get',\n path: '/mcp',\n },\n ],\n }\n },\n})\n"],"names":["defaultUserCollection","definePlugin","getAPIKeysCollection","mcpEndpoint","sanitizeMCPConfig","translations","defineCollectionTool","defineGlobalTool","definePrompt","defineTool","mcpPlugin","slug","order","plugin","config","plugins","rawConfig","admin","user","firstCollectionWithAuth","collections","find","auth","Boolean","push","pluginConfig","registered","sanitizedOptions","i18n","supportedLanguageKeys","supportedLanguages","Object","keys","lang","pluginEntry","typedLocale","existing","disabled","components","userMenuSettingsItems","endpoints","handler","method","path","Response","headers","Allow","status"],"mappings":"AAEA,SAASA,qBAAqB,EAAEC,YAAY,QAAQ,UAAS;AAK7D,SAASC,oBAAoB,QAAQ,wBAAuB;AAC5D,SAASC,WAAW,QAAQ,sBAAqB;AACjD,SAASC,iBAAiB,QAAQ,6BAA4B;AAC9D,SAASC,YAAY,QAAQ,0BAAyB;AActD,SAASC,oBAAoB,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,UAAU,QAAQ,kBAAiB;AAElG,OAAO,MAAMC,YAAYT,aAA8B;IACrDU,MAAM;IACNC,OAAO;IACPC,QAAQ,CAAC,EAAEC,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAW;QACxC,4EAA4E;QAC5E,iEAAiE;QACjE,IAAI,CAACF,OAAOG,KAAK,EAAEC,MAAM;YACvB,MAAMC,0BAA0B,AAACL,CAAAA,OAAOM,WAAW,IAAI,EAAE,AAAD,EAAGC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKC,QAAQD;YACtF,IAAI,CAACH,yBAAyB;;gBAC1BL,CAAAA,OAAOM,WAAW,KAAK,EAAE,AAAD,EAAGI,IAAI,CAACxB;YACpC;QACF;QAEA,MAAMyB,eAAerB,kBAAkB;YAAEU;YAAQW,cAAcT;QAAU;QAEzE,gFAAgF;QAChF,MAAMU,aAAaX,OAAO,CAAC,yBAAyB;QACpD,IAAIW,YAAY;YACd,mBAAmB;YACnBA,WAAWC,gBAAgB,GAAGF;QAChC;;QAEEX,CAAAA,OAAOM,WAAW,KAAK,EAAE,AAAD,EAAGI,IAAI,CAACtB,qBAAqB;YAAEuB;QAAa;QAEtE,IAAI,CAACX,OAAOc,IAAI,EAAE;YAChBd,OAAOc,IAAI,GAAG,CAAC;QACjB;QAEA,IAAI,CAACd,OAAOc,IAAI,CAACvB,YAAY,EAAE;YAC7BS,OAAOc,IAAI,CAACvB,YAAY,GAAG,CAAC;QAC9B;QAEA,MAAMwB,wBAAwBf,OAAOc,IAAI,CAACE,kBAAkB,GACxDC,OAAOC,IAAI,CAAClB,OAAOc,IAAI,CAACE,kBAAkB,IAC1C;YAAC;SAAK;QAEV,KAAK,MAAMG,QAAQJ,sBAAuB;YACxC,MAAMK,cAAc7B,YAAY,CAAC4B,KAAkC;YACnE,IAAI,CAACC,aAAa;gBAChB;YACF;YAEA,MAAMC,cAAcF;YACpB,MAAMG,WAAYtB,OAAOc,IAAI,CAACvB,YAAY,CAAC8B,YAAY,IAAI,CAAC;YAC5DrB,OAAOc,IAAI,CAACvB,YAAY,CAAC8B,YAAY,GAAG;gBACtC,GAAGC,QAAQ;gBACX,cAAcF,YAAY7B,YAAY,CAAC,aAAa;YACtD;QACF;QAEA,2EAA2E;QAC3E,yEAAyE;QACzE,IAAIoB,aAAaY,QAAQ,EAAE;YACzB,OAAOvB;QACT;QAEA,OAAO;YACL,GAAGA,MAAM;YACTG,OAAO;gBACL,GAAGH,OAAOG,KAAK;gBACfqB,YAAY;oBACV,GAAGxB,OAAOG,KAAK,EAAEqB,UAAU;oBAC3BC,uBAAuB;2BACjBzB,OAAOG,KAAK,EAAEqB,YAAYC,yBAAyB,EAAE;wBACzD;qBACD;gBACH;YACF;YACAC,WAAW;mBACL1B,OAAO0B,SAAS,IAAI,EAAE;gBAC1B,uDAAuD;gBACvD;oBAAEC,SAAStC;oBAAauC,QAAQ;oBAAQC,MAAM;gBAAO;gBACrD,uEAAuE;gBACvE,6DAA6D;gBAC7D;oBACEF,SAAS,IAAM,IAAIG,SAAS,MAAM;4BAAEC,SAAS;gCAAEC,OAAO;4BAAO;4BAAGC,QAAQ;wBAAI;oBAC5EL,QAAQ;oBACRC,MAAM;gBACR;aACD;QACH;IACF;AACF,GAAE"}
@@ -0,0 +1,11 @@
1
+ import type { NestedKeysStripped, SupportedLanguages } from '@payloadcms/translations';
2
+ import type { PluginDefaultTranslationsObject } from './types.js';
3
+ export declare const translations: SupportedLanguages<PluginDefaultTranslationsObject>;
4
+ export type PluginMCPTranslations = PluginDefaultTranslationsObject;
5
+ export type PluginMCPTranslationKeys = NestedKeysStripped<PluginMCPTranslations>;
6
+ declare module '@payloadcms/translations' {
7
+ interface CustomTranslationKeys {
8
+ 'plugin-mcp': PluginMCPTranslationKeys;
9
+ }
10
+ }
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAA;AA+CjE,eAAO,MAAM,YAAY,EA6CpB,kBAAkB,CAAC,+BAA+B,CAAC,CAAA;AAExD,MAAM,MAAM,qBAAqB,GAAG,+BAA+B,CAAA;AAEnE,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAA;AAEhF,OAAO,QAAQ,0BAA0B,CAAC;IACxC,UAAU,qBAAqB;QAC7B,YAAY,EAAE,wBAAwB,CAAA;KACvC;CACF"}
@@ -0,0 +1,92 @@
1
+ import { ar } from './languages/ar.js';
2
+ import { az } from './languages/az.js';
3
+ import { bg } from './languages/bg.js';
4
+ import { bnBd } from './languages/bnBd.js';
5
+ import { bnIn } from './languages/bnIn.js';
6
+ import { ca } from './languages/ca.js';
7
+ import { cs } from './languages/cs.js';
8
+ import { da } from './languages/da.js';
9
+ import { de } from './languages/de.js';
10
+ import { en } from './languages/en.js';
11
+ import { es } from './languages/es.js';
12
+ import { et } from './languages/et.js';
13
+ import { fa } from './languages/fa.js';
14
+ import { fr } from './languages/fr.js';
15
+ import { he } from './languages/he.js';
16
+ import { hr } from './languages/hr.js';
17
+ import { hu } from './languages/hu.js';
18
+ import { hy } from './languages/hy.js';
19
+ import { id } from './languages/id.js';
20
+ import { is } from './languages/is.js';
21
+ import { it } from './languages/it.js';
22
+ import { ja } from './languages/ja.js';
23
+ import { ko } from './languages/ko.js';
24
+ import { lt } from './languages/lt.js';
25
+ import { lv } from './languages/lv.js';
26
+ import { my } from './languages/my.js';
27
+ import { nb } from './languages/nb.js';
28
+ import { nl } from './languages/nl.js';
29
+ import { pl } from './languages/pl.js';
30
+ import { pt } from './languages/pt.js';
31
+ import { ro } from './languages/ro.js';
32
+ import { rs } from './languages/rs.js';
33
+ import { rsLatin } from './languages/rsLatin.js';
34
+ import { ru } from './languages/ru.js';
35
+ import { sk } from './languages/sk.js';
36
+ import { sl } from './languages/sl.js';
37
+ import { sv } from './languages/sv.js';
38
+ import { ta } from './languages/ta.js';
39
+ import { th } from './languages/th.js';
40
+ import { tr } from './languages/tr.js';
41
+ import { uk } from './languages/uk.js';
42
+ import { vi } from './languages/vi.js';
43
+ import { zh } from './languages/zh.js';
44
+ import { zhTw } from './languages/zhTw.js';
45
+ export const translations = {
46
+ id,
47
+ ar,
48
+ az,
49
+ bg,
50
+ 'bn-BD': bnBd,
51
+ 'bn-IN': bnIn,
52
+ ca,
53
+ cs,
54
+ da,
55
+ de,
56
+ en,
57
+ es,
58
+ et,
59
+ fa,
60
+ fr,
61
+ he,
62
+ hr,
63
+ hu,
64
+ hy,
65
+ is,
66
+ it,
67
+ ja,
68
+ ko,
69
+ lt,
70
+ lv,
71
+ my,
72
+ nb,
73
+ nl,
74
+ pl,
75
+ pt,
76
+ ro,
77
+ rs,
78
+ 'rs-latin': rsLatin,
79
+ ru,
80
+ sk,
81
+ sl,
82
+ sv,
83
+ ta,
84
+ th,
85
+ tr,
86
+ uk,
87
+ vi,
88
+ zh,
89
+ 'zh-TW': zhTw
90
+ };
91
+
92
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translations/index.ts"],"sourcesContent":["import type {\n NestedKeysStripped,\n SupportedLanguages,\n} from '@payloadcms/translations'\n\nimport type { PluginDefaultTranslationsObject } from './types.js'\n\nimport { ar } from './languages/ar.js'\nimport { az } from './languages/az.js'\nimport { bg } from './languages/bg.js'\nimport { bnBd } from './languages/bnBd.js'\nimport { bnIn } from './languages/bnIn.js'\nimport { ca } from './languages/ca.js'\nimport { cs } from './languages/cs.js'\nimport { da } from './languages/da.js'\nimport { de } from './languages/de.js'\nimport { en } from './languages/en.js'\nimport { es } from './languages/es.js'\nimport { et } from './languages/et.js'\nimport { fa } from './languages/fa.js'\nimport { fr } from './languages/fr.js'\nimport { he } from './languages/he.js'\nimport { hr } from './languages/hr.js'\nimport { hu } from './languages/hu.js'\nimport { hy } from './languages/hy.js'\nimport { id } from './languages/id.js'\nimport { is } from './languages/is.js'\nimport { it } from './languages/it.js'\nimport { ja } from './languages/ja.js'\nimport { ko } from './languages/ko.js'\nimport { lt } from './languages/lt.js'\nimport { lv } from './languages/lv.js'\nimport { my } from './languages/my.js'\nimport { nb } from './languages/nb.js'\nimport { nl } from './languages/nl.js'\nimport { pl } from './languages/pl.js'\nimport { pt } from './languages/pt.js'\nimport { ro } from './languages/ro.js'\nimport { rs } from './languages/rs.js'\nimport { rsLatin } from './languages/rsLatin.js'\nimport { ru } from './languages/ru.js'\nimport { sk } from './languages/sk.js'\nimport { sl } from './languages/sl.js'\nimport { sv } from './languages/sv.js'\nimport { ta } from './languages/ta.js'\nimport { th } from './languages/th.js'\nimport { tr } from './languages/tr.js'\nimport { uk } from './languages/uk.js'\nimport { vi } from './languages/vi.js'\nimport { zh } from './languages/zh.js'\nimport { zhTw } from './languages/zhTw.js'\n\nexport const translations = {\n id,\n ar,\n az,\n bg,\n 'bn-BD': bnBd,\n 'bn-IN': bnIn,\n ca,\n cs,\n da,\n de,\n en,\n es,\n et,\n fa,\n fr,\n he,\n hr,\n hu,\n hy,\n is,\n it,\n ja,\n ko,\n lt,\n lv,\n my,\n nb,\n nl,\n pl,\n pt,\n ro,\n rs,\n 'rs-latin': rsLatin,\n ru,\n sk,\n sl,\n sv,\n ta,\n th,\n tr,\n uk,\n vi,\n zh,\n 'zh-TW': zhTw,\n} as SupportedLanguages<PluginDefaultTranslationsObject>\n\nexport type PluginMCPTranslations = PluginDefaultTranslationsObject\n\nexport type PluginMCPTranslationKeys = NestedKeysStripped<PluginMCPTranslations>\n\ndeclare module '@payloadcms/translations' {\n interface CustomTranslationKeys {\n 'plugin-mcp': PluginMCPTranslationKeys\n }\n}\n"],"names":["ar","az","bg","bnBd","bnIn","ca","cs","da","de","en","es","et","fa","fr","he","hr","hu","hy","id","is","it","ja","ko","lt","lv","my","nb","nl","pl","pt","ro","rs","rsLatin","ru","sk","sl","sv","ta","th","tr","uk","vi","zh","zhTw","translations"],"mappings":"AAOA,SAASA,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,IAAI,QAAQ,sBAAqB;AAC1C,SAASC,IAAI,QAAQ,sBAAqB;AAC1C,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,OAAO,QAAQ,yBAAwB;AAChD,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,EAAE,QAAQ,oBAAmB;AACtC,SAASC,IAAI,QAAQ,sBAAqB;AAE1C,OAAO,MAAMC,eAAe;IAC1B1B;IACAlB;IACAC;IACAC;IACA,SAASC;IACT,SAASC;IACTC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAE;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACA,YAAYC;IACZC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACA,SAASC;AACX,EAAwD"}
@@ -0,0 +1,31 @@
1
+ import type { PluginLanguage } from '../types.js';
2
+ export declare const arTranslations: {
3
+ 'plugin-mcp': {
4
+ apiKeyDescription: string;
5
+ apiKeys: string;
6
+ authentication: string;
7
+ description: string;
8
+ descriptionDescription: string;
9
+ dismiss: string;
10
+ keepKeyPrivate: string;
11
+ keyPrivateDescription: string;
12
+ lastUsed: string;
13
+ manageAPIKeys: string;
14
+ mcp: string;
15
+ noAPIKeys: string;
16
+ operations: string;
17
+ overrideAccess: string;
18
+ overrideAccessDescription: string;
19
+ permissions: string;
20
+ permissionsDescription: string;
21
+ prompts: string;
22
+ resources: string;
23
+ server: string;
24
+ title: string;
25
+ titleDescription: string;
26
+ tools: string;
27
+ userDescription: string;
28
+ };
29
+ };
30
+ export declare const ar: PluginLanguage;
31
+ //# sourceMappingURL=ar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B1B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
@@ -0,0 +1,34 @@
1
+ export const arTranslations = {
2
+ 'plugin-mcp': {
3
+ apiKeyDescription: 'تتحكم مفاتيح API في المجموعات والموارد والأدوات والمطالبات التي يمكن لعملاء MCP الوصول إليها.',
4
+ apiKeys: 'مفاتيح API',
5
+ authentication: 'المصادقة',
6
+ description: 'الوصف',
7
+ descriptionDescription: 'صف الغرض من مفتاح API.',
8
+ dismiss: 'إغلاق',
9
+ keepKeyPrivate: 'حافظ على سرية مفتاحك.',
10
+ keyPrivateDescription: 'هذا المفتاح يمنح MCP إمكانية الوصول إلى محتواك. لا تشاركه مع الآخرين!',
11
+ lastUsed: 'آخر استخدام',
12
+ manageAPIKeys: 'إدارة مفاتيح API',
13
+ mcp: 'MCP',
14
+ noAPIKeys: 'لا توجد مفاتيح API',
15
+ operations: 'العمليات',
16
+ overrideAccess: 'تجاوز التحكم في الوصول',
17
+ overrideAccessDescription: 'عند تفعيله، يتجاوز هذا المفتاح تحكم Payload في الوصول لكل عملية ينفذها. اتركه غير مفعل ما لم يكن لديك سبب محدد.',
18
+ permissions: 'الأذونات',
19
+ permissionsDescription: 'اسمح لعملاء MCP بالوصول إلى المجموعات والأدوات والموارد والمطالبات التالية.',
20
+ prompts: 'المطالبات',
21
+ resources: 'الموارد',
22
+ server: 'الخادم',
23
+ title: 'العنوان',
24
+ titleDescription: 'اسم مستعار مفيد لمفتاح API.',
25
+ tools: 'الأدوات',
26
+ userDescription: 'المستخدم الذي سيعمل MCP بصفته.'
27
+ }
28
+ };
29
+ export const ar = {
30
+ dateFNSKey: 'ar',
31
+ translations: arTranslations
32
+ };
33
+
34
+ //# sourceMappingURL=ar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/translations/languages/ar.ts"],"sourcesContent":["import type { PluginLanguage } from '../types.js'\n\nexport const arTranslations = {\n 'plugin-mcp': {\n apiKeyDescription: 'تتحكم مفاتيح API في المجموعات والموارد والأدوات والمطالبات التي يمكن لعملاء MCP الوصول إليها.',\n apiKeys: 'مفاتيح API',\n authentication: 'المصادقة',\n description: 'الوصف',\n descriptionDescription: 'صف الغرض من مفتاح API.',\n dismiss: 'إغلاق',\n keepKeyPrivate: 'حافظ على سرية مفتاحك.',\n keyPrivateDescription: 'هذا المفتاح يمنح MCP إمكانية الوصول إلى محتواك. لا تشاركه مع الآخرين!',\n lastUsed: 'آخر استخدام',\n manageAPIKeys: 'إدارة مفاتيح API',\n mcp: 'MCP',\n noAPIKeys: 'لا توجد مفاتيح API',\n operations: 'العمليات',\n overrideAccess: 'تجاوز التحكم في الوصول',\n overrideAccessDescription: 'عند تفعيله، يتجاوز هذا المفتاح تحكم Payload في الوصول لكل عملية ينفذها. اتركه غير مفعل ما لم يكن لديك سبب محدد.',\n permissions: 'الأذونات',\n permissionsDescription: 'اسمح لعملاء MCP بالوصول إلى المجموعات والأدوات والموارد والمطالبات التالية.',\n prompts: 'المطالبات',\n resources: 'الموارد',\n server: 'الخادم',\n title: 'العنوان',\n titleDescription: 'اسم مستعار مفيد لمفتاح API.',\n tools: 'الأدوات',\n userDescription: 'المستخدم الذي سيعمل MCP بصفته.',\n },\n}\n\nexport const ar: PluginLanguage = {\n dateFNSKey: 'ar',\n translations: arTranslations,\n}\n"],"names":["arTranslations","apiKeyDescription","apiKeys","authentication","description","descriptionDescription","dismiss","keepKeyPrivate","keyPrivateDescription","lastUsed","manageAPIKeys","mcp","noAPIKeys","operations","overrideAccess","overrideAccessDescription","permissions","permissionsDescription","prompts","resources","server","title","titleDescription","tools","userDescription","ar","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,iBAAiB;IAC5B,cAAc;QACZC,mBAAmB;QACnBC,SAAS;QACTC,gBAAgB;QAChBC,aAAa;QACbC,wBAAwB;QACxBC,SAAS;QACTC,gBAAgB;QAChBC,uBAAuB;QACvBC,UAAU;QACVC,eAAe;QACfC,KAAK;QACLC,WAAW;QACXC,YAAY;QACZC,gBAAgB;QAChBC,2BAA2B;QAC3BC,aAAa;QACbC,wBAAwB;QACxBC,SAAS;QACTC,WAAW;QACXC,QAAQ;QACRC,OAAO;QACPC,kBAAkB;QAClBC,OAAO;QACPC,iBAAiB;IACnB;AACF,EAAC;AAED,OAAO,MAAMC,KAAqB;IAChCC,YAAY;IACZC,cAAc3B;AAChB,EAAC"}
@@ -0,0 +1,31 @@
1
+ import type { PluginLanguage } from '../types.js';
2
+ export declare const azTranslations: {
3
+ 'plugin-mcp': {
4
+ apiKeyDescription: string;
5
+ apiKeys: string;
6
+ authentication: string;
7
+ description: string;
8
+ descriptionDescription: string;
9
+ dismiss: string;
10
+ keepKeyPrivate: string;
11
+ keyPrivateDescription: string;
12
+ lastUsed: string;
13
+ manageAPIKeys: string;
14
+ mcp: string;
15
+ noAPIKeys: string;
16
+ operations: string;
17
+ overrideAccess: string;
18
+ overrideAccessDescription: string;
19
+ permissions: string;
20
+ permissionsDescription: string;
21
+ prompts: string;
22
+ resources: string;
23
+ server: string;
24
+ title: string;
25
+ titleDescription: string;
26
+ tools: string;
27
+ userDescription: string;
28
+ };
29
+ };
30
+ export declare const az: PluginLanguage;
31
+ //# sourceMappingURL=az.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"az.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/az.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B1B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
@@ -0,0 +1,34 @@
1
+ export const azTranslations = {
2
+ 'plugin-mcp': {
3
+ apiKeyDescription: 'API açarları MCP müştərilərinin hansı kolleksiyalara, resurslara, alətlərə və promptlara daxil ola biləcəyini idarə edir.',
4
+ apiKeys: 'API açarları',
5
+ authentication: 'Autentifikasiya',
6
+ description: 'Təsvir',
7
+ descriptionDescription: 'API açarının məqsədini təsvir edin.',
8
+ dismiss: 'Bağla',
9
+ keepKeyPrivate: 'Açarınızı məxfi saxlayın.',
10
+ keyPrivateDescription: 'Bu açar MCP-yə məzmununuza giriş verir. Onu başqaları ilə paylaşmayın!',
11
+ lastUsed: 'Son istifadə',
12
+ manageAPIKeys: 'API açarlarını idarə et',
13
+ mcp: 'MCP',
14
+ noAPIKeys: 'API açarı yoxdur',
15
+ operations: 'Əməliyyatlar',
16
+ overrideAccess: 'Giriş nəzarətini keç',
17
+ overrideAccessDescription: 'İşarələndikdə bu açar icra etdiyi hər əməliyyatda Payload giriş qaydalarını keçir. Xüsusi səbəbiniz yoxdursa işarələməyin.',
18
+ permissions: 'İcazələr',
19
+ permissionsDescription: 'MCP müştərilərinə aşağıdakı kolleksiyalara, alətlərə, resurslara və promptlara giriş icazəsi verin.',
20
+ prompts: 'Promptlar',
21
+ resources: 'Resurslar',
22
+ server: 'Server',
23
+ title: 'Başlıq',
24
+ titleDescription: 'API açarı üçün faydalı qısa ad.',
25
+ tools: 'Alətlər',
26
+ userDescription: 'MCP-nin adından işləyəcəyi istifadəçi.'
27
+ }
28
+ };
29
+ export const az = {
30
+ dateFNSKey: 'az',
31
+ translations: azTranslations
32
+ };
33
+
34
+ //# sourceMappingURL=az.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/translations/languages/az.ts"],"sourcesContent":["import type { PluginLanguage } from '../types.js'\n\nexport const azTranslations = {\n 'plugin-mcp': {\n apiKeyDescription: 'API açarları MCP müştərilərinin hansı kolleksiyalara, resurslara, alətlərə və promptlara daxil ola biləcəyini idarə edir.',\n apiKeys: 'API açarları',\n authentication: 'Autentifikasiya',\n description: 'Təsvir',\n descriptionDescription: 'API açarının məqsədini təsvir edin.',\n dismiss: 'Bağla',\n keepKeyPrivate: 'Açarınızı məxfi saxlayın.',\n keyPrivateDescription: 'Bu açar MCP-yə məzmununuza giriş verir. Onu başqaları ilə paylaşmayın!',\n lastUsed: 'Son istifadə',\n manageAPIKeys: 'API açarlarını idarə et',\n mcp: 'MCP',\n noAPIKeys: 'API açarı yoxdur',\n operations: 'Əməliyyatlar',\n overrideAccess: 'Giriş nəzarətini keç',\n overrideAccessDescription: 'İşarələndikdə bu açar icra etdiyi hər əməliyyatda Payload giriş qaydalarını keçir. Xüsusi səbəbiniz yoxdursa işarələməyin.',\n permissions: 'İcazələr',\n permissionsDescription: 'MCP müştərilərinə aşağıdakı kolleksiyalara, alətlərə, resurslara və promptlara giriş icazəsi verin.',\n prompts: 'Promptlar',\n resources: 'Resurslar',\n server: 'Server',\n title: 'Başlıq',\n titleDescription: 'API açarı üçün faydalı qısa ad.',\n tools: 'Alətlər',\n userDescription: 'MCP-nin adından işləyəcəyi istifadəçi.',\n },\n}\n\nexport const az: PluginLanguage = {\n dateFNSKey: 'az',\n translations: azTranslations,\n}\n"],"names":["azTranslations","apiKeyDescription","apiKeys","authentication","description","descriptionDescription","dismiss","keepKeyPrivate","keyPrivateDescription","lastUsed","manageAPIKeys","mcp","noAPIKeys","operations","overrideAccess","overrideAccessDescription","permissions","permissionsDescription","prompts","resources","server","title","titleDescription","tools","userDescription","az","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,iBAAiB;IAC5B,cAAc;QACZC,mBAAmB;QACnBC,SAAS;QACTC,gBAAgB;QAChBC,aAAa;QACbC,wBAAwB;QACxBC,SAAS;QACTC,gBAAgB;QAChBC,uBAAuB;QACvBC,UAAU;QACVC,eAAe;QACfC,KAAK;QACLC,WAAW;QACXC,YAAY;QACZC,gBAAgB;QAChBC,2BAA2B;QAC3BC,aAAa;QACbC,wBAAwB;QACxBC,SAAS;QACTC,WAAW;QACXC,QAAQ;QACRC,OAAO;QACPC,kBAAkB;QAClBC,OAAO;QACPC,iBAAiB;IACnB;AACF,EAAC;AAED,OAAO,MAAMC,KAAqB;IAChCC,YAAY;IACZC,cAAc3B;AAChB,EAAC"}
@@ -0,0 +1,31 @@
1
+ import type { PluginLanguage } from '../types.js';
2
+ export declare const bgTranslations: {
3
+ 'plugin-mcp': {
4
+ apiKeyDescription: string;
5
+ apiKeys: string;
6
+ authentication: string;
7
+ description: string;
8
+ descriptionDescription: string;
9
+ dismiss: string;
10
+ keepKeyPrivate: string;
11
+ keyPrivateDescription: string;
12
+ lastUsed: string;
13
+ manageAPIKeys: string;
14
+ mcp: string;
15
+ noAPIKeys: string;
16
+ operations: string;
17
+ overrideAccess: string;
18
+ overrideAccessDescription: string;
19
+ permissions: string;
20
+ permissionsDescription: string;
21
+ prompts: string;
22
+ resources: string;
23
+ server: string;
24
+ title: string;
25
+ titleDescription: string;
26
+ tools: string;
27
+ userDescription: string;
28
+ };
29
+ };
30
+ export declare const bg: PluginLanguage;
31
+ //# sourceMappingURL=bg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bg.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/bg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B1B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
@@ -0,0 +1,34 @@
1
+ export const bgTranslations = {
2
+ 'plugin-mcp': {
3
+ apiKeyDescription: 'API ключовете контролират до кои колекции, ресурси, инструменти и подкани имат достъп MCP клиентите.',
4
+ apiKeys: 'API ключове',
5
+ authentication: 'Удостоверяване',
6
+ description: 'Описание',
7
+ descriptionDescription: 'Опишете предназначението на API ключа.',
8
+ dismiss: 'Затвори',
9
+ keepKeyPrivate: 'Пазете ключа си поверителен.',
10
+ keyPrivateDescription: 'Този ключ дава на MCP достъп до съдържанието ви. Не го споделяйте с други!',
11
+ lastUsed: 'Последно използван',
12
+ manageAPIKeys: 'Управление на API ключове',
13
+ mcp: 'MCP',
14
+ noAPIKeys: 'Няма API ключове',
15
+ operations: 'Операции',
16
+ overrideAccess: 'Заобикаляне на контрола за достъп',
17
+ overrideAccessDescription: 'Когато е отметнато, този ключ заобикаля контрола за достъп на Payload при всяка операция. Оставете изключено, освен ако нямате конкретна причина.',
18
+ permissions: 'Разрешения',
19
+ permissionsDescription: 'Разрешете на MCP клиентите достъп до следните колекции, инструменти, ресурси и подкани.',
20
+ prompts: 'Подкани',
21
+ resources: 'Ресурси',
22
+ server: 'Сървър',
23
+ title: 'Заглавие',
24
+ titleDescription: 'Полезно име за API ключа.',
25
+ tools: 'Инструменти',
26
+ userDescription: 'Потребителят, от чието име ще действа MCP.'
27
+ }
28
+ };
29
+ export const bg = {
30
+ dateFNSKey: 'bg',
31
+ translations: bgTranslations
32
+ };
33
+
34
+ //# sourceMappingURL=bg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/translations/languages/bg.ts"],"sourcesContent":["import type { PluginLanguage } from '../types.js'\n\nexport const bgTranslations = {\n 'plugin-mcp': {\n apiKeyDescription: 'API ключовете контролират до кои колекции, ресурси, инструменти и подкани имат достъп MCP клиентите.',\n apiKeys: 'API ключове',\n authentication: 'Удостоверяване',\n description: 'Описание',\n descriptionDescription: 'Опишете предназначението на API ключа.',\n dismiss: 'Затвори',\n keepKeyPrivate: 'Пазете ключа си поверителен.',\n keyPrivateDescription: 'Този ключ дава на MCP достъп до съдържанието ви. Не го споделяйте с други!',\n lastUsed: 'Последно използван',\n manageAPIKeys: 'Управление на API ключове',\n mcp: 'MCP',\n noAPIKeys: 'Няма API ключове',\n operations: 'Операции',\n overrideAccess: 'Заобикаляне на контрола за достъп',\n overrideAccessDescription: 'Когато е отметнато, този ключ заобикаля контрола за достъп на Payload при всяка операция. Оставете изключено, освен ако нямате конкретна причина.',\n permissions: 'Разрешения',\n permissionsDescription: 'Разрешете на MCP клиентите достъп до следните колекции, инструменти, ресурси и подкани.',\n prompts: 'Подкани',\n resources: 'Ресурси',\n server: 'Сървър',\n title: 'Заглавие',\n titleDescription: 'Полезно име за API ключа.',\n tools: 'Инструменти',\n userDescription: 'Потребителят, от чието име ще действа MCP.',\n },\n}\n\nexport const bg: PluginLanguage = {\n dateFNSKey: 'bg',\n translations: bgTranslations,\n}\n"],"names":["bgTranslations","apiKeyDescription","apiKeys","authentication","description","descriptionDescription","dismiss","keepKeyPrivate","keyPrivateDescription","lastUsed","manageAPIKeys","mcp","noAPIKeys","operations","overrideAccess","overrideAccessDescription","permissions","permissionsDescription","prompts","resources","server","title","titleDescription","tools","userDescription","bg","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,iBAAiB;IAC5B,cAAc;QACZC,mBAAmB;QACnBC,SAAS;QACTC,gBAAgB;QAChBC,aAAa;QACbC,wBAAwB;QACxBC,SAAS;QACTC,gBAAgB;QAChBC,uBAAuB;QACvBC,UAAU;QACVC,eAAe;QACfC,KAAK;QACLC,WAAW;QACXC,YAAY;QACZC,gBAAgB;QAChBC,2BAA2B;QAC3BC,aAAa;QACbC,wBAAwB;QACxBC,SAAS;QACTC,WAAW;QACXC,QAAQ;QACRC,OAAO;QACPC,kBAAkB;QAClBC,OAAO;QACPC,iBAAiB;IACnB;AACF,EAAC;AAED,OAAO,MAAMC,KAAqB;IAChCC,YAAY;IACZC,cAAc3B;AAChB,EAAC"}