docusaurus-plugin-mcp-server 0.10.0 → 0.10.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.
- package/README.md +17 -7
- package/dist/adapters-entry.d.ts +12 -6
- package/dist/adapters-entry.js +30 -38
- package/dist/adapters-entry.js.map +1 -1
- package/dist/cli/verify.js +36 -44
- package/dist/cli/verify.js.map +1 -1
- package/dist/index.js +50 -86
- package/dist/index.js.map +1 -1
- package/dist/theme/index.js +48 -58
- package/dist/theme/index.js.map +1 -1
- package/package.json +10 -9
- package/dist/adapters-entry.d.mts +0 -225
- package/dist/adapters-entry.mjs +0 -1032
- package/dist/adapters-entry.mjs.map +0 -1
- package/dist/cli/verify.d.mts +0 -1
- package/dist/cli/verify.mjs +0 -705
- package/dist/cli/verify.mjs.map +0 -1
- package/dist/index-j-CdaS6k.d.mts +0 -216
- package/dist/index.d.mts +0 -479
- package/dist/index.mjs +0 -1056
- package/dist/index.mjs.map +0 -1
- package/dist/theme/index.d.mts +0 -90
- package/dist/theme/index.mjs +0 -440
- package/dist/theme/index.mjs.map +0 -1
package/dist/theme/index.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var useGlobalData = require('@docusaurus/useGlobalData');
|
|
8
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
-
|
|
10
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
|
|
12
|
-
var IconCopy__default = /*#__PURE__*/_interopDefault(IconCopy);
|
|
13
|
-
var IconSuccess__default = /*#__PURE__*/_interopDefault(IconSuccess);
|
|
1
|
+
import { useMemo, useState, useRef, useEffect, useCallback } from 'react';
|
|
2
|
+
import { MCPConfigRegistry } from '@gleanwork/mcp-config-schema/browser';
|
|
3
|
+
import IconCopy from '@theme/Icon/Copy';
|
|
4
|
+
import IconSuccess from '@theme/Icon/Success';
|
|
5
|
+
import { usePluginData } from '@docusaurus/useGlobalData';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
14
7
|
|
|
15
8
|
// src/theme/McpInstallButton.tsx
|
|
16
9
|
function createDocsRegistryOptions(config) {
|
|
@@ -22,18 +15,18 @@ function createDocsRegistryOptions(config) {
|
|
|
22
15
|
function createDocsRegistry(config) {
|
|
23
16
|
const options = createDocsRegistryOptions(config);
|
|
24
17
|
return {
|
|
25
|
-
registry: new
|
|
18
|
+
registry: new MCPConfigRegistry(options),
|
|
26
19
|
config
|
|
27
20
|
};
|
|
28
21
|
}
|
|
29
22
|
function useMcpRegistry() {
|
|
30
23
|
let pluginData;
|
|
31
24
|
try {
|
|
32
|
-
pluginData =
|
|
25
|
+
pluginData = usePluginData("docusaurus-plugin-mcp-server");
|
|
33
26
|
} catch {
|
|
34
27
|
return void 0;
|
|
35
28
|
}
|
|
36
|
-
const result =
|
|
29
|
+
const result = useMemo(() => {
|
|
37
30
|
if (!pluginData?.serverUrl || !pluginData?.serverName) {
|
|
38
31
|
return void 0;
|
|
39
32
|
}
|
|
@@ -46,7 +39,7 @@ function useMcpRegistry() {
|
|
|
46
39
|
return result;
|
|
47
40
|
}
|
|
48
41
|
function IconMcp({ size = 16 }) {
|
|
49
|
-
return /* @__PURE__ */
|
|
42
|
+
return /* @__PURE__ */ jsxs(
|
|
50
43
|
"svg",
|
|
51
44
|
{
|
|
52
45
|
viewBox: "0 0 170 195",
|
|
@@ -56,7 +49,7 @@ function IconMcp({ size = 16 }) {
|
|
|
56
49
|
xmlns: "http://www.w3.org/2000/svg",
|
|
57
50
|
style: { display: "block" },
|
|
58
51
|
children: [
|
|
59
|
-
/* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ jsx(
|
|
60
53
|
"path",
|
|
61
54
|
{
|
|
62
55
|
d: "M25 97.8528L92.8823 29.9706C102.255 20.598 117.451 20.598 126.823 29.9706C136.196 39.3431 136.196 54.5391 126.823 63.9117L75.5581 115.177",
|
|
@@ -65,7 +58,7 @@ function IconMcp({ size = 16 }) {
|
|
|
65
58
|
strokeLinecap: "round"
|
|
66
59
|
}
|
|
67
60
|
),
|
|
68
|
-
/* @__PURE__ */
|
|
61
|
+
/* @__PURE__ */ jsx(
|
|
69
62
|
"path",
|
|
70
63
|
{
|
|
71
64
|
d: "M76.2653 114.47L126.823 63.9117C136.196 54.5391 151.392 54.5391 160.765 63.9117L161.118 64.2652C170.491 73.6378 170.491 88.8338 161.118 98.2063L99.7248 159.6C96.6006 162.724 96.6006 167.789 99.7248 170.913L112.331 183.52",
|
|
@@ -74,7 +67,7 @@ function IconMcp({ size = 16 }) {
|
|
|
74
67
|
strokeLinecap: "round"
|
|
75
68
|
}
|
|
76
69
|
),
|
|
77
|
-
/* @__PURE__ */
|
|
70
|
+
/* @__PURE__ */ jsx(
|
|
78
71
|
"path",
|
|
79
72
|
{
|
|
80
73
|
d: "M109.853 46.9411L59.6482 97.1457C50.2757 106.518 50.2757 121.714 59.6482 131.087C69.0208 140.459 84.2168 140.459 93.5894 131.087L143.794 80.8822",
|
|
@@ -88,7 +81,7 @@ function IconMcp({ size = 16 }) {
|
|
|
88
81
|
);
|
|
89
82
|
}
|
|
90
83
|
function IconChevron({ isOpen }) {
|
|
91
|
-
return /* @__PURE__ */
|
|
84
|
+
return /* @__PURE__ */ jsx(
|
|
92
85
|
"svg",
|
|
93
86
|
{
|
|
94
87
|
width: "12",
|
|
@@ -99,7 +92,7 @@ function IconChevron({ isOpen }) {
|
|
|
99
92
|
transform: isOpen ? "rotate(180deg)" : "rotate(0deg)",
|
|
100
93
|
transition: "transform var(--ifm-transition-fast)"
|
|
101
94
|
},
|
|
102
|
-
children: /* @__PURE__ */
|
|
95
|
+
children: /* @__PURE__ */ jsx(
|
|
103
96
|
"path",
|
|
104
97
|
{
|
|
105
98
|
d: "M2.5 4.5L6 8L9.5 4.5",
|
|
@@ -114,7 +107,7 @@ function IconChevron({ isOpen }) {
|
|
|
114
107
|
);
|
|
115
108
|
}
|
|
116
109
|
function IconExternalLink() {
|
|
117
|
-
return /* @__PURE__ */
|
|
110
|
+
return /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", style: { display: "block", marginLeft: "4px" }, children: /* @__PURE__ */ jsx(
|
|
118
111
|
"path",
|
|
119
112
|
{
|
|
120
113
|
fill: "currentColor",
|
|
@@ -128,16 +121,16 @@ function CodeBlock({
|
|
|
128
121
|
isCopied,
|
|
129
122
|
onCopy
|
|
130
123
|
}) {
|
|
131
|
-
return /* @__PURE__ */
|
|
132
|
-
/* @__PURE__ */
|
|
133
|
-
/* @__PURE__ */
|
|
124
|
+
return /* @__PURE__ */ jsxs("div", { className: "mcp-code-block", children: [
|
|
125
|
+
/* @__PURE__ */ jsx("div", { className: "mcp-code-block__content", children: isMultiline ? /* @__PURE__ */ jsx("pre", { className: "mcp-code-block__pre", children: /* @__PURE__ */ jsx("code", { children: code }) }) : /* @__PURE__ */ jsx("code", { children: code }) }),
|
|
126
|
+
/* @__PURE__ */ jsx(
|
|
134
127
|
"button",
|
|
135
128
|
{
|
|
136
129
|
className: "mcp-code-block__copy",
|
|
137
130
|
onClick: onCopy,
|
|
138
131
|
title: isCopied ? "Copied!" : "Copy to clipboard",
|
|
139
132
|
"aria-label": isCopied ? "Copied" : "Copy to clipboard",
|
|
140
|
-
children: isCopied ? /* @__PURE__ */
|
|
133
|
+
children: isCopied ? /* @__PURE__ */ jsx(IconSuccess, { className: "mcp-code-block__icon mcp-code-block__icon--success" }) : /* @__PURE__ */ jsx(IconCopy, { className: "mcp-code-block__icon" })
|
|
141
134
|
}
|
|
142
135
|
)
|
|
143
136
|
] });
|
|
@@ -150,11 +143,11 @@ function McpInstallButton({
|
|
|
150
143
|
clients: clientsProp,
|
|
151
144
|
headerText = "Choose your AI tool:"
|
|
152
145
|
}) {
|
|
153
|
-
const [isOpen, setIsOpen] =
|
|
154
|
-
const [copiedClient, setCopiedClient] =
|
|
155
|
-
const dropdownRef =
|
|
146
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
147
|
+
const [copiedClient, setCopiedClient] = useState(null);
|
|
148
|
+
const dropdownRef = useRef(null);
|
|
156
149
|
const pluginMcp = useMcpRegistry();
|
|
157
|
-
const { registry, config } =
|
|
150
|
+
const { registry, config } = useMemo(() => {
|
|
158
151
|
if (serverUrlProp && serverNameProp) {
|
|
159
152
|
return createDocsRegistry({
|
|
160
153
|
serverUrl: serverUrlProp,
|
|
@@ -165,11 +158,11 @@ function McpInstallButton({
|
|
|
165
158
|
return pluginMcp;
|
|
166
159
|
}
|
|
167
160
|
return {
|
|
168
|
-
registry: new
|
|
161
|
+
registry: new MCPConfigRegistry(),
|
|
169
162
|
config: { serverUrl: "", serverName: "" }
|
|
170
163
|
};
|
|
171
164
|
}, [serverUrlProp, serverNameProp, pluginMcp]);
|
|
172
|
-
|
|
165
|
+
useEffect(() => {
|
|
173
166
|
function handleClickOutside(event) {
|
|
174
167
|
if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
|
|
175
168
|
setIsOpen(false);
|
|
@@ -184,7 +177,7 @@ function McpInstallButton({
|
|
|
184
177
|
);
|
|
185
178
|
return null;
|
|
186
179
|
}
|
|
187
|
-
const clientConfigs =
|
|
180
|
+
const clientConfigs = useMemo(() => {
|
|
188
181
|
let clients;
|
|
189
182
|
if (clientsProp) {
|
|
190
183
|
clients = clientsProp.map((id) => registry.getConfig(id)).filter((c) => c !== void 0);
|
|
@@ -193,7 +186,7 @@ function McpInstallButton({
|
|
|
193
186
|
}
|
|
194
187
|
return clients.sort((a, b) => a.displayName.localeCompare(b.displayName));
|
|
195
188
|
}, [registry, clientsProp]);
|
|
196
|
-
const copyToClipboard =
|
|
189
|
+
const copyToClipboard = useCallback(async (text, clientId) => {
|
|
197
190
|
try {
|
|
198
191
|
await navigator.clipboard.writeText(text);
|
|
199
192
|
setCopiedClient(clientId);
|
|
@@ -202,7 +195,7 @@ function McpInstallButton({
|
|
|
202
195
|
console.error("Failed to copy:", err);
|
|
203
196
|
}
|
|
204
197
|
}, []);
|
|
205
|
-
const getConfigForClient =
|
|
198
|
+
const getConfigForClient = useCallback(
|
|
206
199
|
(clientId) => {
|
|
207
200
|
try {
|
|
208
201
|
const builder = registry.createBuilder(clientId);
|
|
@@ -218,7 +211,7 @@ function McpInstallButton({
|
|
|
218
211
|
},
|
|
219
212
|
[registry, config.serverUrl, config.serverName]
|
|
220
213
|
);
|
|
221
|
-
const getCommandForClient =
|
|
214
|
+
const getCommandForClient = useCallback(
|
|
222
215
|
(clientId) => {
|
|
223
216
|
try {
|
|
224
217
|
const builder = registry.createBuilder(clientId);
|
|
@@ -244,8 +237,8 @@ function McpInstallButton({
|
|
|
244
237
|
"mcp-install-dropdown",
|
|
245
238
|
className
|
|
246
239
|
].filter(Boolean).join(" ");
|
|
247
|
-
return /* @__PURE__ */
|
|
248
|
-
/* @__PURE__ */
|
|
240
|
+
return /* @__PURE__ */ jsxs("div", { ref: dropdownRef, className: dropdownClasses, children: [
|
|
241
|
+
/* @__PURE__ */ jsxs(
|
|
249
242
|
"button",
|
|
250
243
|
{
|
|
251
244
|
className: `button button--primary mcp-install-dropdown__button${label ? "" : " mcp-install-dropdown__button--icon-only"}`,
|
|
@@ -254,14 +247,14 @@ function McpInstallButton({
|
|
|
254
247
|
"aria-haspopup": "true",
|
|
255
248
|
"aria-label": label || "Install MCP",
|
|
256
249
|
children: [
|
|
257
|
-
/* @__PURE__ */
|
|
258
|
-
label && /* @__PURE__ */
|
|
259
|
-
/* @__PURE__ */
|
|
250
|
+
/* @__PURE__ */ jsx(IconMcp, { size: 16 }),
|
|
251
|
+
label && /* @__PURE__ */ jsx("span", { children: label }),
|
|
252
|
+
/* @__PURE__ */ jsx(IconChevron, { isOpen })
|
|
260
253
|
]
|
|
261
254
|
}
|
|
262
255
|
),
|
|
263
|
-
/* @__PURE__ */
|
|
264
|
-
/* @__PURE__ */
|
|
256
|
+
/* @__PURE__ */ jsxs("ul", { className: "dropdown__menu mcp-install-dropdown__menu", children: [
|
|
257
|
+
/* @__PURE__ */ jsx("li", { className: "mcp-install-dropdown__header", children: headerText }),
|
|
265
258
|
clientConfigs.map((client) => {
|
|
266
259
|
const command = getCommandForClient(client.id);
|
|
267
260
|
const clientConfig = getConfigForClient(client.id);
|
|
@@ -269,19 +262,19 @@ function McpInstallButton({
|
|
|
269
262
|
if (!command && !clientConfig) {
|
|
270
263
|
return null;
|
|
271
264
|
}
|
|
272
|
-
return /* @__PURE__ */
|
|
273
|
-
/* @__PURE__ */
|
|
274
|
-
/* @__PURE__ */
|
|
275
|
-
command && /* @__PURE__ */
|
|
265
|
+
return /* @__PURE__ */ jsxs("li", { className: "mcp-install-dropdown__item", children: [
|
|
266
|
+
/* @__PURE__ */ jsxs("div", { className: "mcp-install-dropdown__client-header", children: [
|
|
267
|
+
/* @__PURE__ */ jsx("span", { className: "mcp-install-dropdown__client-name", children: client.displayName }),
|
|
268
|
+
command && /* @__PURE__ */ jsx("span", { className: "badge badge--success", children: "CLI" })
|
|
276
269
|
] }),
|
|
277
|
-
command ? /* @__PURE__ */
|
|
270
|
+
command ? /* @__PURE__ */ jsx(
|
|
278
271
|
CodeBlock,
|
|
279
272
|
{
|
|
280
273
|
code: command,
|
|
281
274
|
isCopied,
|
|
282
275
|
onCopy: () => copyToClipboard(command, client.id)
|
|
283
276
|
}
|
|
284
|
-
) : clientConfig ? /* @__PURE__ */
|
|
277
|
+
) : clientConfig ? /* @__PURE__ */ jsx(
|
|
285
278
|
CodeBlock,
|
|
286
279
|
{
|
|
287
280
|
code: clientConfig,
|
|
@@ -290,10 +283,10 @@ function McpInstallButton({
|
|
|
290
283
|
onCopy: () => copyToClipboard(clientConfig, client.id)
|
|
291
284
|
}
|
|
292
285
|
) : null,
|
|
293
|
-
client.localConfigNotes && /* @__PURE__ */
|
|
286
|
+
client.localConfigNotes && /* @__PURE__ */ jsx("p", { className: "mcp-install-dropdown__notes", children: client.localConfigNotes })
|
|
294
287
|
] }, client.id);
|
|
295
288
|
}),
|
|
296
|
-
/* @__PURE__ */
|
|
289
|
+
/* @__PURE__ */ jsx("li", { className: "mcp-install-dropdown__footer", children: /* @__PURE__ */ jsxs(
|
|
297
290
|
"a",
|
|
298
291
|
{
|
|
299
292
|
href: "https://modelcontextprotocol.io/",
|
|
@@ -302,12 +295,12 @@ function McpInstallButton({
|
|
|
302
295
|
className: "mcp-install-dropdown__learn-more",
|
|
303
296
|
children: [
|
|
304
297
|
"Learn more about MCP",
|
|
305
|
-
/* @__PURE__ */
|
|
298
|
+
/* @__PURE__ */ jsx(IconExternalLink, {})
|
|
306
299
|
]
|
|
307
300
|
}
|
|
308
301
|
) })
|
|
309
302
|
] }),
|
|
310
|
-
/* @__PURE__ */
|
|
303
|
+
/* @__PURE__ */ jsx("style", { children: `
|
|
311
304
|
.mcp-install-dropdown__button {
|
|
312
305
|
display: inline-flex;
|
|
313
306
|
align-items: center;
|
|
@@ -442,9 +435,6 @@ function McpInstallButton({
|
|
|
442
435
|
] });
|
|
443
436
|
}
|
|
444
437
|
|
|
445
|
-
|
|
446
|
-
exports.createDocsRegistry = createDocsRegistry;
|
|
447
|
-
exports.createDocsRegistryOptions = createDocsRegistryOptions;
|
|
448
|
-
exports.useMcpRegistry = useMcpRegistry;
|
|
438
|
+
export { McpInstallButton, createDocsRegistry, createDocsRegistryOptions, useMcpRegistry };
|
|
449
439
|
//# sourceMappingURL=index.js.map
|
|
450
440
|
//# sourceMappingURL=index.js.map
|
package/dist/theme/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/theme/McpRegistryContext.tsx","../../src/theme/McpInstallButton.tsx"],"names":["MCPConfigRegistry","usePluginData","useMemo","jsxs","jsx","IconSuccess","IconCopy","useState","useRef","useEffect","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["import { useMemo } from 'react';\nimport { usePluginData } from '@docusaurus/useGlobalData';\nimport { MCPConfigRegistry, type RegistryOptions } from '@gleanwork/mcp-config-schema/browser';\n\n/**\n * Configuration from the plugin\n */\nexport interface McpConfig {\n /** Full URL to the MCP server endpoint */\n serverUrl: string;\n /** Name of the MCP server for configuration */\n serverName: string;\n}\n\n/**\n * Plugin global data shape\n */\ninterface McpPluginGlobalData {\n serverUrl: string;\n serverName: string;\n}\n\n/**\n * Registry options for the docs MCP server.\n * Similar to GLEAN_REGISTRY_OPTIONS in @gleanwork/mcp-config-glean\n */\nexport function createDocsRegistryOptions(config: McpConfig): RegistryOptions {\n return {\n // Use the serverName from config for naming\n serverNameBuilder: () => config.serverName,\n };\n}\n\n/**\n * Creates an MCPConfigRegistry pre-configured with the docs server settings.\n *\n * Similar to createGleanRegistry() from @gleanwork/mcp-config-glean\n *\n * @param config - The server configuration from plugin\n * @returns Object with registry instance and bound config\n */\nexport function createDocsRegistry(config: McpConfig): {\n registry: MCPConfigRegistry;\n config: McpConfig;\n} {\n const options = createDocsRegistryOptions(config);\n return {\n registry: new MCPConfigRegistry(options),\n config,\n };\n}\n\n/**\n * Hook to access the pre-configured MCP registry and config.\n *\n * Reads configuration from plugin globalData and creates a registry\n * with the serverUrl and serverName pre-bound in the config object.\n *\n * @returns { registry, config } or undefined if plugin not configured\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const mcp = useMcpRegistry();\n * if (!mcp) return null;\n *\n * const { registry, config } = mcp;\n * const builder = registry.createBuilder('claude-code');\n * const json = builder.buildConfiguration({\n * transport: 'http',\n * serverUrl: config.serverUrl,\n * serverName: config.serverName,\n * });\n * }\n * ```\n */\nexport function useMcpRegistry(): { registry: MCPConfigRegistry; config: McpConfig } | undefined {\n // Read plugin globalData\n let pluginData: McpPluginGlobalData | undefined;\n try {\n pluginData = usePluginData('docusaurus-plugin-mcp-server') as McpPluginGlobalData | undefined;\n } catch {\n // Plugin not installed\n return undefined;\n }\n\n // Memoize registry creation\n const result = useMemo(() => {\n if (!pluginData?.serverUrl || !pluginData?.serverName) {\n return undefined;\n }\n const config: McpConfig = {\n serverUrl: pluginData.serverUrl,\n serverName: pluginData.serverName,\n };\n return createDocsRegistry(config);\n }, [pluginData?.serverUrl, pluginData?.serverName]);\n\n return result;\n}\n\nexport default useMcpRegistry;\n","import { useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport {\n MCPConfigRegistry,\n type ClientId,\n type MCPClientConfig,\n} from '@gleanwork/mcp-config-schema/browser';\nimport IconCopy from '@theme/Icon/Copy';\nimport IconSuccess from '@theme/Icon/Success';\nimport { useMcpRegistry, createDocsRegistry, type McpConfig } from './McpRegistryContext.js';\n\n/**\n * MCP Logo icon - extracted from official MCP branding\n */\nfunction IconMcp({ size = 16 }: { size?: number }) {\n return (\n <svg\n viewBox=\"0 0 170 195\"\n width={size}\n height={size}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ display: 'block' }}\n >\n <path\n d=\"M25 97.8528L92.8823 29.9706C102.255 20.598 117.451 20.598 126.823 29.9706C136.196 39.3431 136.196 54.5391 126.823 63.9117L75.5581 115.177\"\n stroke=\"currentColor\"\n strokeWidth=\"12\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M76.2653 114.47L126.823 63.9117C136.196 54.5391 151.392 54.5391 160.765 63.9117L161.118 64.2652C170.491 73.6378 170.491 88.8338 161.118 98.2063L99.7248 159.6C96.6006 162.724 96.6006 167.789 99.7248 170.913L112.331 183.52\"\n stroke=\"currentColor\"\n strokeWidth=\"12\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M109.853 46.9411L59.6482 97.1457C50.2757 106.518 50.2757 121.714 59.6482 131.087C69.0208 140.459 84.2168 140.459 93.5894 131.087L143.794 80.8822\"\n stroke=\"currentColor\"\n strokeWidth=\"12\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n/**\n * Chevron icon for dropdown\n */\nfunction IconChevron({ isOpen }: { isOpen: boolean }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n style={{\n display: 'block',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform var(--ifm-transition-fast)',\n }}\n >\n <path\n d=\"M2.5 4.5L6 8L9.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n );\n}\n\n/**\n * External link icon\n */\nfunction IconExternalLink() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" style={{ display: 'block', marginLeft: '4px' }}>\n <path\n fill=\"currentColor\"\n d=\"M3.5 3C3.22386 3 3 3.22386 3 3.5C3 3.77614 3.22386 4 3.5 4H7.29289L3.14645 8.14645C2.95118 8.34171 2.95118 8.65829 3.14645 8.85355C3.34171 9.04882 3.65829 9.04882 3.85355 8.85355L8 4.70711V8.5C8 8.77614 8.22386 9 8.5 9C8.77614 9 9 8.77614 9 8.5V3.5C9 3.22386 8.77614 3 8.5 3H3.5Z\"\n />\n </svg>\n );\n}\n\n/**\n * Code block with integrated copy button\n */\nfunction CodeBlock({\n code,\n isMultiline = false,\n isCopied,\n onCopy,\n}: {\n code: string;\n isMultiline?: boolean;\n isCopied: boolean;\n onCopy: () => void;\n}) {\n return (\n <div className=\"mcp-code-block\">\n <div className=\"mcp-code-block__content\">\n {isMultiline ? (\n <pre className=\"mcp-code-block__pre\">\n <code>{code}</code>\n </pre>\n ) : (\n <code>{code}</code>\n )}\n </div>\n <button\n className=\"mcp-code-block__copy\"\n onClick={onCopy}\n title={isCopied ? 'Copied!' : 'Copy to clipboard'}\n aria-label={isCopied ? 'Copied' : 'Copy to clipboard'}\n >\n {isCopied ? (\n <IconSuccess className=\"mcp-code-block__icon mcp-code-block__icon--success\" />\n ) : (\n <IconCopy className=\"mcp-code-block__icon\" />\n )}\n </button>\n </div>\n );\n}\n\n/**\n * Props for the McpInstallButton component\n */\nexport interface McpInstallButtonProps {\n /** Server URL. If not provided, uses plugin configuration. */\n serverUrl?: string;\n /** Server name. If not provided, uses plugin configuration. */\n serverName?: string;\n /** Button label. If not provided, shows only the MCP icon. */\n label?: string;\n /** Optional className for styling */\n className?: string;\n /** Clients to show. Defaults to all HTTP-capable clients from registry. */\n clients?: ClientId[];\n /** Header text shown at top of dropdown (default: \"Choose your AI tool:\") */\n headerText?: string;\n}\n\n/**\n * A dropdown button component for installing MCP servers in various AI tools.\n * Uses Docusaurus/Infima CSS classes for consistent theming.\n *\n * @example\n * ```tsx\n * <McpInstallButton\n * serverUrl=\"https://docs.example.com/mcp\"\n * serverName=\"my-docs\"\n * />\n * ```\n */\nexport function McpInstallButton({\n serverUrl: serverUrlProp,\n serverName: serverNameProp,\n label,\n className = '',\n clients: clientsProp,\n headerText = 'Choose your AI tool:',\n}: McpInstallButtonProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [copiedClient, setCopiedClient] = useState<string | null>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Get pre-configured registry from plugin\n const pluginMcp = useMcpRegistry();\n\n // Use props if provided, otherwise fall back to plugin config\n const { registry, config } = useMemo(() => {\n if (serverUrlProp && serverNameProp) {\n return createDocsRegistry({\n serverUrl: serverUrlProp,\n serverName: serverNameProp,\n });\n }\n if (pluginMcp) {\n return pluginMcp;\n }\n return {\n registry: new MCPConfigRegistry(),\n config: { serverUrl: '', serverName: '' } as McpConfig,\n };\n }, [serverUrlProp, serverNameProp, pluginMcp]);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Validate configuration\n if (!config.serverUrl || !config.serverName) {\n console.error(\n '[McpInstallButton] Missing serverUrl or serverName. ' +\n 'Either pass them as props or configure the docusaurus-plugin-mcp-server plugin.'\n );\n return null;\n }\n\n // Get clients to display - dynamic from registry, sorted alphabetically\n const clientConfigs = useMemo(() => {\n let clients: MCPClientConfig[];\n if (clientsProp) {\n clients = clientsProp\n .map((id) => registry.getConfig(id))\n .filter((c): c is MCPClientConfig => c !== undefined);\n } else {\n clients = registry.getNativeHttpClients();\n }\n // Sort alphabetically by display name\n return clients.sort((a, b) => a.displayName.localeCompare(b.displayName));\n }, [registry, clientsProp]);\n\n const copyToClipboard = useCallback(async (text: string, clientId: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopiedClient(clientId);\n setTimeout(() => setCopiedClient(null), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n }, []);\n\n const getConfigForClient = useCallback(\n (clientId: ClientId): string | null => {\n try {\n const builder = registry.createBuilder(clientId);\n const clientConfig = builder.buildConfiguration({\n transport: 'http',\n serverUrl: config.serverUrl,\n serverName: config.serverName,\n });\n return JSON.stringify(clientConfig, null, 2);\n } catch {\n // Client doesn't support local configuration\n return null;\n }\n },\n [registry, config.serverUrl, config.serverName]\n );\n\n const getCommandForClient = useCallback(\n (clientId: ClientId): string | null => {\n try {\n const builder = registry.createBuilder(clientId);\n const cliStatus = builder.supportsCliInstallation();\n if (!cliStatus.supported) {\n return null;\n }\n return builder.buildCommand({\n transport: 'http',\n serverUrl: config.serverUrl,\n serverName: config.serverName,\n });\n } catch {\n return null;\n }\n },\n [registry, config.serverUrl, config.serverName]\n );\n\n // Using Infima dropdown classes\n const dropdownClasses = [\n 'dropdown',\n 'dropdown--right',\n isOpen ? 'dropdown--show' : '',\n 'mcp-install-dropdown',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={dropdownRef} className={dropdownClasses}>\n {/* Infima button classes */}\n <button\n className={`button button--primary mcp-install-dropdown__button${label ? '' : ' mcp-install-dropdown__button--icon-only'}`}\n onClick={() => setIsOpen(!isOpen)}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n aria-label={label || 'Install MCP'}\n >\n <IconMcp size={16} />\n {label && <span>{label}</span>}\n <IconChevron isOpen={isOpen} />\n </button>\n\n {/* Dropdown menu using Infima classes */}\n <ul className=\"dropdown__menu mcp-install-dropdown__menu\">\n <li className=\"mcp-install-dropdown__header\">{headerText}</li>\n\n {clientConfigs.map((client) => {\n const command = getCommandForClient(client.id);\n const clientConfig = getConfigForClient(client.id);\n const isCopied = copiedClient === client.id;\n\n if (!command && !clientConfig) {\n return null;\n }\n\n return (\n <li key={client.id} className=\"mcp-install-dropdown__item\">\n <div className=\"mcp-install-dropdown__client-header\">\n <span className=\"mcp-install-dropdown__client-name\">{client.displayName}</span>\n {command && <span className=\"badge badge--success\">CLI</span>}\n </div>\n\n {command ? (\n <CodeBlock\n code={command}\n isCopied={isCopied}\n onCopy={() => copyToClipboard(command, client.id)}\n />\n ) : clientConfig ? (\n <CodeBlock\n code={clientConfig}\n isMultiline\n isCopied={isCopied}\n onCopy={() => copyToClipboard(clientConfig, client.id)}\n />\n ) : null}\n\n {client.localConfigNotes && (\n <p className=\"mcp-install-dropdown__notes\">{client.localConfigNotes}</p>\n )}\n </li>\n );\n })}\n\n <li className=\"mcp-install-dropdown__footer\">\n <a\n href=\"https://modelcontextprotocol.io/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mcp-install-dropdown__learn-more\"\n >\n Learn more about MCP\n <IconExternalLink />\n </a>\n </li>\n </ul>\n\n {/* Scoped styles using Docusaurus/Infima CSS variables */}\n <style>{`\n .mcp-install-dropdown__button {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n }\n\n .mcp-install-dropdown__button--icon-only {\n padding: 0.5rem 0.75rem;\n gap: 0.25rem;\n }\n\n .mcp-install-dropdown__menu {\n width: 520px;\n padding: 0;\n top: calc(100% + 0.25rem);\n }\n\n .mcp-install-dropdown__header {\n padding: 0.75rem 1rem;\n font-size: var(--ifm-font-size-small);\n font-weight: var(--ifm-font-weight-semibold);\n color: var(--ifm-color-emphasis-700);\n background-color: var(--ifm-background-color);\n border-bottom: 1px solid var(--ifm-toc-border-color);\n }\n\n .mcp-install-dropdown__item {\n padding: 0.875rem 1rem;\n border-bottom: 1px solid var(--ifm-toc-border-color);\n }\n\n .mcp-install-dropdown__client-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 0.625rem;\n }\n\n .mcp-install-dropdown__client-name {\n font-weight: var(--ifm-font-weight-semibold);\n color: var(--ifm-font-color-base);\n }\n\n .mcp-install-dropdown__notes {\n margin: 0.5rem 0 0;\n font-size: var(--ifm-font-size-small);\n color: var(--ifm-color-emphasis-700);\n line-height: 1.4;\n }\n\n .mcp-install-dropdown__footer {\n padding: 0.75rem 1rem;\n text-align: center;\n background-color: var(--ifm-background-color);\n }\n\n .mcp-install-dropdown__learn-more {\n display: inline-flex;\n align-items: center;\n font-size: var(--ifm-font-size-small);\n font-weight: var(--ifm-font-weight-semibold);\n color: var(--ifm-color-primary);\n text-decoration: none;\n }\n\n .mcp-install-dropdown__learn-more:hover {\n color: var(--ifm-color-primary-dark);\n text-decoration: none;\n }\n\n /* Code block styles - uses Docusaurus pre/code variables */\n .mcp-code-block {\n display: flex;\n border-radius: var(--ifm-code-border-radius);\n overflow: hidden;\n }\n\n .mcp-code-block__content {\n flex: 1;\n background-color: var(--ifm-pre-background);\n padding: 0.75rem 1rem;\n overflow-x: auto;\n }\n\n .mcp-code-block__content code {\n font-family: var(--ifm-font-family-monospace);\n font-size: var(--ifm-code-font-size);\n color: var(--ifm-pre-color);\n background: none;\n padding: 0;\n border: none;\n white-space: nowrap;\n }\n\n .mcp-code-block__pre {\n margin: 0;\n background: none;\n max-height: 120px;\n overflow-y: auto;\n }\n\n .mcp-code-block__pre code {\n white-space: pre;\n }\n\n .mcp-code-block__copy {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n background-color: var(--ifm-color-emphasis-200);\n border: none;\n cursor: pointer;\n color: var(--ifm-color-emphasis-700);\n transition: background-color var(--ifm-transition-fast);\n }\n\n .mcp-code-block__copy:hover {\n background-color: var(--ifm-color-emphasis-300);\n }\n\n .mcp-code-block__icon {\n width: 16px;\n height: 16px;\n display: block;\n }\n\n .mcp-code-block__icon--success {\n color: var(--ifm-color-success);\n }\n `}</style>\n </div>\n );\n}\n\nexport default McpInstallButton;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/theme/McpRegistryContext.tsx","../../src/theme/McpInstallButton.tsx"],"names":["useMemo","MCPConfigRegistry"],"mappings":"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","file":"index.js","sourcesContent":["import { useMemo } from 'react';\nimport { usePluginData } from '@docusaurus/useGlobalData';\nimport { MCPConfigRegistry, type RegistryOptions } from '@gleanwork/mcp-config-schema/browser';\n\n/**\n * Configuration from the plugin\n */\nexport interface McpConfig {\n /** Full URL to the MCP server endpoint */\n serverUrl: string;\n /** Name of the MCP server for configuration */\n serverName: string;\n}\n\n/**\n * Plugin global data shape\n */\ninterface McpPluginGlobalData {\n serverUrl: string;\n serverName: string;\n}\n\n/**\n * Registry options for the docs MCP server.\n * Similar to GLEAN_REGISTRY_OPTIONS in @gleanwork/mcp-config-glean\n */\nexport function createDocsRegistryOptions(config: McpConfig): RegistryOptions {\n return {\n // Use the serverName from config for naming\n serverNameBuilder: () => config.serverName,\n };\n}\n\n/**\n * Creates an MCPConfigRegistry pre-configured with the docs server settings.\n *\n * Similar to createGleanRegistry() from @gleanwork/mcp-config-glean\n *\n * @param config - The server configuration from plugin\n * @returns Object with registry instance and bound config\n */\nexport function createDocsRegistry(config: McpConfig): {\n registry: MCPConfigRegistry;\n config: McpConfig;\n} {\n const options = createDocsRegistryOptions(config);\n return {\n registry: new MCPConfigRegistry(options),\n config,\n };\n}\n\n/**\n * Hook to access the pre-configured MCP registry and config.\n *\n * Reads configuration from plugin globalData and creates a registry\n * with the serverUrl and serverName pre-bound in the config object.\n *\n * @returns { registry, config } or undefined if plugin not configured\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const mcp = useMcpRegistry();\n * if (!mcp) return null;\n *\n * const { registry, config } = mcp;\n * const builder = registry.createBuilder('claude-code');\n * const json = builder.buildConfiguration({\n * transport: 'http',\n * serverUrl: config.serverUrl,\n * serverName: config.serverName,\n * });\n * }\n * ```\n */\nexport function useMcpRegistry(): { registry: MCPConfigRegistry; config: McpConfig } | undefined {\n // Read plugin globalData\n let pluginData: McpPluginGlobalData | undefined;\n try {\n pluginData = usePluginData('docusaurus-plugin-mcp-server') as McpPluginGlobalData | undefined;\n } catch {\n // Plugin not installed\n return undefined;\n }\n\n // Memoize registry creation\n const result = useMemo(() => {\n if (!pluginData?.serverUrl || !pluginData?.serverName) {\n return undefined;\n }\n const config: McpConfig = {\n serverUrl: pluginData.serverUrl,\n serverName: pluginData.serverName,\n };\n return createDocsRegistry(config);\n }, [pluginData?.serverUrl, pluginData?.serverName]);\n\n return result;\n}\n\nexport default useMcpRegistry;\n","import { useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport {\n MCPConfigRegistry,\n type ClientId,\n type MCPClientConfig,\n} from '@gleanwork/mcp-config-schema/browser';\nimport IconCopy from '@theme/Icon/Copy';\nimport IconSuccess from '@theme/Icon/Success';\nimport { useMcpRegistry, createDocsRegistry, type McpConfig } from './McpRegistryContext.js';\n\n/**\n * MCP Logo icon - extracted from official MCP branding\n */\nfunction IconMcp({ size = 16 }: { size?: number }) {\n return (\n <svg\n viewBox=\"0 0 170 195\"\n width={size}\n height={size}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ display: 'block' }}\n >\n <path\n d=\"M25 97.8528L92.8823 29.9706C102.255 20.598 117.451 20.598 126.823 29.9706C136.196 39.3431 136.196 54.5391 126.823 63.9117L75.5581 115.177\"\n stroke=\"currentColor\"\n strokeWidth=\"12\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M76.2653 114.47L126.823 63.9117C136.196 54.5391 151.392 54.5391 160.765 63.9117L161.118 64.2652C170.491 73.6378 170.491 88.8338 161.118 98.2063L99.7248 159.6C96.6006 162.724 96.6006 167.789 99.7248 170.913L112.331 183.52\"\n stroke=\"currentColor\"\n strokeWidth=\"12\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M109.853 46.9411L59.6482 97.1457C50.2757 106.518 50.2757 121.714 59.6482 131.087C69.0208 140.459 84.2168 140.459 93.5894 131.087L143.794 80.8822\"\n stroke=\"currentColor\"\n strokeWidth=\"12\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n/**\n * Chevron icon for dropdown\n */\nfunction IconChevron({ isOpen }: { isOpen: boolean }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n style={{\n display: 'block',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform var(--ifm-transition-fast)',\n }}\n >\n <path\n d=\"M2.5 4.5L6 8L9.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n );\n}\n\n/**\n * External link icon\n */\nfunction IconExternalLink() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" style={{ display: 'block', marginLeft: '4px' }}>\n <path\n fill=\"currentColor\"\n d=\"M3.5 3C3.22386 3 3 3.22386 3 3.5C3 3.77614 3.22386 4 3.5 4H7.29289L3.14645 8.14645C2.95118 8.34171 2.95118 8.65829 3.14645 8.85355C3.34171 9.04882 3.65829 9.04882 3.85355 8.85355L8 4.70711V8.5C8 8.77614 8.22386 9 8.5 9C8.77614 9 9 8.77614 9 8.5V3.5C9 3.22386 8.77614 3 8.5 3H3.5Z\"\n />\n </svg>\n );\n}\n\n/**\n * Code block with integrated copy button\n */\nfunction CodeBlock({\n code,\n isMultiline = false,\n isCopied,\n onCopy,\n}: {\n code: string;\n isMultiline?: boolean;\n isCopied: boolean;\n onCopy: () => void;\n}) {\n return (\n <div className=\"mcp-code-block\">\n <div className=\"mcp-code-block__content\">\n {isMultiline ? (\n <pre className=\"mcp-code-block__pre\">\n <code>{code}</code>\n </pre>\n ) : (\n <code>{code}</code>\n )}\n </div>\n <button\n className=\"mcp-code-block__copy\"\n onClick={onCopy}\n title={isCopied ? 'Copied!' : 'Copy to clipboard'}\n aria-label={isCopied ? 'Copied' : 'Copy to clipboard'}\n >\n {isCopied ? (\n <IconSuccess className=\"mcp-code-block__icon mcp-code-block__icon--success\" />\n ) : (\n <IconCopy className=\"mcp-code-block__icon\" />\n )}\n </button>\n </div>\n );\n}\n\n/**\n * Props for the McpInstallButton component\n */\nexport interface McpInstallButtonProps {\n /** Server URL. If not provided, uses plugin configuration. */\n serverUrl?: string;\n /** Server name. If not provided, uses plugin configuration. */\n serverName?: string;\n /** Button label. If not provided, shows only the MCP icon. */\n label?: string;\n /** Optional className for styling */\n className?: string;\n /** Clients to show. Defaults to all HTTP-capable clients from registry. */\n clients?: ClientId[];\n /** Header text shown at top of dropdown (default: \"Choose your AI tool:\") */\n headerText?: string;\n}\n\n/**\n * A dropdown button component for installing MCP servers in various AI tools.\n * Uses Docusaurus/Infima CSS classes for consistent theming.\n *\n * @example\n * ```tsx\n * <McpInstallButton\n * serverUrl=\"https://docs.example.com/mcp\"\n * serverName=\"my-docs\"\n * />\n * ```\n */\nexport function McpInstallButton({\n serverUrl: serverUrlProp,\n serverName: serverNameProp,\n label,\n className = '',\n clients: clientsProp,\n headerText = 'Choose your AI tool:',\n}: McpInstallButtonProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [copiedClient, setCopiedClient] = useState<string | null>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Get pre-configured registry from plugin\n const pluginMcp = useMcpRegistry();\n\n // Use props if provided, otherwise fall back to plugin config\n const { registry, config } = useMemo(() => {\n if (serverUrlProp && serverNameProp) {\n return createDocsRegistry({\n serverUrl: serverUrlProp,\n serverName: serverNameProp,\n });\n }\n if (pluginMcp) {\n return pluginMcp;\n }\n return {\n registry: new MCPConfigRegistry(),\n config: { serverUrl: '', serverName: '' } as McpConfig,\n };\n }, [serverUrlProp, serverNameProp, pluginMcp]);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Validate configuration\n if (!config.serverUrl || !config.serverName) {\n console.error(\n '[McpInstallButton] Missing serverUrl or serverName. ' +\n 'Either pass them as props or configure the docusaurus-plugin-mcp-server plugin.'\n );\n return null;\n }\n\n // Get clients to display - dynamic from registry, sorted alphabetically\n const clientConfigs = useMemo(() => {\n let clients: MCPClientConfig[];\n if (clientsProp) {\n clients = clientsProp\n .map((id) => registry.getConfig(id))\n .filter((c): c is MCPClientConfig => c !== undefined);\n } else {\n clients = registry.getNativeHttpClients();\n }\n // Sort alphabetically by display name\n return clients.sort((a, b) => a.displayName.localeCompare(b.displayName));\n }, [registry, clientsProp]);\n\n const copyToClipboard = useCallback(async (text: string, clientId: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopiedClient(clientId);\n setTimeout(() => setCopiedClient(null), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n }, []);\n\n const getConfigForClient = useCallback(\n (clientId: ClientId): string | null => {\n try {\n const builder = registry.createBuilder(clientId);\n const clientConfig = builder.buildConfiguration({\n transport: 'http',\n serverUrl: config.serverUrl,\n serverName: config.serverName,\n });\n return JSON.stringify(clientConfig, null, 2);\n } catch {\n // Client doesn't support local configuration\n return null;\n }\n },\n [registry, config.serverUrl, config.serverName]\n );\n\n const getCommandForClient = useCallback(\n (clientId: ClientId): string | null => {\n try {\n const builder = registry.createBuilder(clientId);\n const cliStatus = builder.supportsCliInstallation();\n if (!cliStatus.supported) {\n return null;\n }\n return builder.buildCommand({\n transport: 'http',\n serverUrl: config.serverUrl,\n serverName: config.serverName,\n });\n } catch {\n return null;\n }\n },\n [registry, config.serverUrl, config.serverName]\n );\n\n // Using Infima dropdown classes\n const dropdownClasses = [\n 'dropdown',\n 'dropdown--right',\n isOpen ? 'dropdown--show' : '',\n 'mcp-install-dropdown',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={dropdownRef} className={dropdownClasses}>\n {/* Infima button classes */}\n <button\n className={`button button--primary mcp-install-dropdown__button${label ? '' : ' mcp-install-dropdown__button--icon-only'}`}\n onClick={() => setIsOpen(!isOpen)}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n aria-label={label || 'Install MCP'}\n >\n <IconMcp size={16} />\n {label && <span>{label}</span>}\n <IconChevron isOpen={isOpen} />\n </button>\n\n {/* Dropdown menu using Infima classes */}\n <ul className=\"dropdown__menu mcp-install-dropdown__menu\">\n <li className=\"mcp-install-dropdown__header\">{headerText}</li>\n\n {clientConfigs.map((client) => {\n const command = getCommandForClient(client.id);\n const clientConfig = getConfigForClient(client.id);\n const isCopied = copiedClient === client.id;\n\n if (!command && !clientConfig) {\n return null;\n }\n\n return (\n <li key={client.id} className=\"mcp-install-dropdown__item\">\n <div className=\"mcp-install-dropdown__client-header\">\n <span className=\"mcp-install-dropdown__client-name\">{client.displayName}</span>\n {command && <span className=\"badge badge--success\">CLI</span>}\n </div>\n\n {command ? (\n <CodeBlock\n code={command}\n isCopied={isCopied}\n onCopy={() => copyToClipboard(command, client.id)}\n />\n ) : clientConfig ? (\n <CodeBlock\n code={clientConfig}\n isMultiline\n isCopied={isCopied}\n onCopy={() => copyToClipboard(clientConfig, client.id)}\n />\n ) : null}\n\n {client.localConfigNotes && (\n <p className=\"mcp-install-dropdown__notes\">{client.localConfigNotes}</p>\n )}\n </li>\n );\n })}\n\n <li className=\"mcp-install-dropdown__footer\">\n <a\n href=\"https://modelcontextprotocol.io/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mcp-install-dropdown__learn-more\"\n >\n Learn more about MCP\n <IconExternalLink />\n </a>\n </li>\n </ul>\n\n {/* Scoped styles using Docusaurus/Infima CSS variables */}\n <style>{`\n .mcp-install-dropdown__button {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n }\n\n .mcp-install-dropdown__button--icon-only {\n padding: 0.5rem 0.75rem;\n gap: 0.25rem;\n }\n\n .mcp-install-dropdown__menu {\n width: 520px;\n padding: 0;\n top: calc(100% + 0.25rem);\n }\n\n .mcp-install-dropdown__header {\n padding: 0.75rem 1rem;\n font-size: var(--ifm-font-size-small);\n font-weight: var(--ifm-font-weight-semibold);\n color: var(--ifm-color-emphasis-700);\n background-color: var(--ifm-background-color);\n border-bottom: 1px solid var(--ifm-toc-border-color);\n }\n\n .mcp-install-dropdown__item {\n padding: 0.875rem 1rem;\n border-bottom: 1px solid var(--ifm-toc-border-color);\n }\n\n .mcp-install-dropdown__client-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 0.625rem;\n }\n\n .mcp-install-dropdown__client-name {\n font-weight: var(--ifm-font-weight-semibold);\n color: var(--ifm-font-color-base);\n }\n\n .mcp-install-dropdown__notes {\n margin: 0.5rem 0 0;\n font-size: var(--ifm-font-size-small);\n color: var(--ifm-color-emphasis-700);\n line-height: 1.4;\n }\n\n .mcp-install-dropdown__footer {\n padding: 0.75rem 1rem;\n text-align: center;\n background-color: var(--ifm-background-color);\n }\n\n .mcp-install-dropdown__learn-more {\n display: inline-flex;\n align-items: center;\n font-size: var(--ifm-font-size-small);\n font-weight: var(--ifm-font-weight-semibold);\n color: var(--ifm-color-primary);\n text-decoration: none;\n }\n\n .mcp-install-dropdown__learn-more:hover {\n color: var(--ifm-color-primary-dark);\n text-decoration: none;\n }\n\n /* Code block styles - uses Docusaurus pre/code variables */\n .mcp-code-block {\n display: flex;\n border-radius: var(--ifm-code-border-radius);\n overflow: hidden;\n }\n\n .mcp-code-block__content {\n flex: 1;\n background-color: var(--ifm-pre-background);\n padding: 0.75rem 1rem;\n overflow-x: auto;\n }\n\n .mcp-code-block__content code {\n font-family: var(--ifm-font-family-monospace);\n font-size: var(--ifm-code-font-size);\n color: var(--ifm-pre-color);\n background: none;\n padding: 0;\n border: none;\n white-space: nowrap;\n }\n\n .mcp-code-block__pre {\n margin: 0;\n background: none;\n max-height: 120px;\n overflow-y: auto;\n }\n\n .mcp-code-block__pre code {\n white-space: pre;\n }\n\n .mcp-code-block__copy {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n background-color: var(--ifm-color-emphasis-200);\n border: none;\n cursor: pointer;\n color: var(--ifm-color-emphasis-700);\n transition: background-color var(--ifm-transition-fast);\n }\n\n .mcp-code-block__copy:hover {\n background-color: var(--ifm-color-emphasis-300);\n }\n\n .mcp-code-block__icon {\n width: 16px;\n height: 16px;\n display: block;\n }\n\n .mcp-code-block__icon--success {\n color: var(--ifm-color-success);\n }\n `}</style>\n </div>\n );\n}\n\nexport default McpInstallButton;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "docusaurus-plugin-mcp-server",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"description": "A Docusaurus plugin that exposes an MCP server endpoint for AI agents to search and retrieve documentation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"docusaurus",
|
|
@@ -24,28 +24,29 @@
|
|
|
24
24
|
},
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"author": "Steve Calvert",
|
|
27
|
+
"type": "module",
|
|
27
28
|
"exports": {
|
|
28
29
|
".": {
|
|
29
30
|
"types": "./dist/index.d.ts",
|
|
30
|
-
"import": "./dist/index.
|
|
31
|
-
"
|
|
31
|
+
"import": "./dist/index.js",
|
|
32
|
+
"default": "./dist/index.js"
|
|
32
33
|
},
|
|
33
34
|
"./adapters": {
|
|
34
35
|
"types": "./dist/adapters-entry.d.ts",
|
|
35
|
-
"import": "./dist/adapters-entry.
|
|
36
|
-
"
|
|
36
|
+
"import": "./dist/adapters-entry.js",
|
|
37
|
+
"default": "./dist/adapters-entry.js"
|
|
37
38
|
},
|
|
38
39
|
"./theme": {
|
|
39
40
|
"types": "./dist/theme/index.d.ts",
|
|
40
|
-
"import": "./dist/theme/index.
|
|
41
|
-
"
|
|
41
|
+
"import": "./dist/theme/index.js",
|
|
42
|
+
"default": "./dist/theme/index.js"
|
|
42
43
|
}
|
|
43
44
|
},
|
|
44
45
|
"main": "./dist/index.js",
|
|
45
|
-
"module": "./dist/index.
|
|
46
|
+
"module": "./dist/index.js",
|
|
46
47
|
"types": "./dist/index.d.ts",
|
|
47
48
|
"bin": {
|
|
48
|
-
"docusaurus-mcp-verify": "./dist/cli/verify.
|
|
49
|
+
"docusaurus-mcp-verify": "./dist/cli/verify.js"
|
|
49
50
|
},
|
|
50
51
|
"files": [
|
|
51
52
|
"dist"
|