diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e69de29bb..000000000 diff --git a/docusaurus.config.js b/docusaurus.config.js index 65e67a41e..b4a335190 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -148,6 +148,24 @@ export default async function createConfigAsync() { }, ]; + const docs_mcp = [ + "@docusaurus/plugin-content-docs", + { + id: "mcp", + routeBasePath: "/mcp", + path: "mcp_docs", + remarkPlugins: [ + (await import("remark-code-import")).default, + (await require("remark-math")).default, + (await import("docusaurus-remark-plugin-tab-blocks")).default, + (await require("remark-yaml-to-table")).default, + ], + rehypePlugins: [(await require("rehype-katex")).default], + editUrl: "https://github.com/seqeralabs/docs/tree/master/", + sidebarPath: "./mcp_docs/sidebar.json", + }, + ]; + console.log( "\n EXCLUDE_CHANGELOG: " + (process.env.EXCLUDE_CHANGELOG ? true : false), "\n EXCLUDE_PLATFORM_ENTERPRISE: " + @@ -161,6 +179,7 @@ export default async function createConfigAsync() { "\n EXCLUDE_MULTIQC: " + (process.env.EXCLUDE_MULTIQC ? true : false), "\n EXCLUDE_FUSION: " + (process.env.EXCLUDE_FUSION ? true : false), "\n EXCLUDE_WAVE: " + (process.env.EXCLUDE_WAVE ? true : false), + "\n EXCLUDE_MCP: " + (process.env.EXCLUDE_MCP ? true : false), "\n INCLUDE_NEXT: " + (process.env.INCLUDE_NEXT ? true : false), ); @@ -265,6 +284,7 @@ export default async function createConfigAsync() { process.env.EXCLUDE_MULTIQC ? null : docs_multiqc, process.env.EXCLUDE_FUSION ? null : docs_fusion, process.env.EXCLUDE_WAVE ? null : docs_wave, + process.env.EXCLUDE_MCP ? null : docs_mcp, // Disable expensive bundler options. // https://github.com/facebook/docusaurus/pull/11176 @@ -367,6 +387,11 @@ export default async function createConfigAsync() { label: "Fusion", position: "left", }, + { + to: "/mcp", + label: "MCP", + position: "left", + }, { to: "https://training.nextflow.io/latest/", html: 'Nextflow Training ', diff --git a/mcp_docs/index.md b/mcp_docs/index.md new file mode 100644 index 000000000..5d3af4372 --- /dev/null +++ b/mcp_docs/index.md @@ -0,0 +1,129 @@ +--- +title: Seqera MCP +description: "Connect AI assistants to Seqera Platform using the Model Context Protocol" +date: "09 Dec 2024" +tags: [mcp, ai, integration] +--- + +Seqera MCP is a [Model Context Protocol](https://modelcontextprotocol.io/) server that enables AI assistants to interact with the Seqera ecosystem. It provides access to Seqera Platform, Wave containers, nf-core modules, and bioinformatics data resources. + +## Features + +- **Seqera Platform integration**: Launch, monitor, and manage Nextflow pipelines +- **Wave container service**: Create containerized environments with conda/pip packages +- **nf-core modules**: Search and execute 1000+ standardized bioinformatics modules +- **Data resources**: Access reference genomes, sequencing data, and scientific literature + +## Remote server + +The hosted Seqera MCP server is available at: + +```console +https://mcp.seqera.io/mcp +``` + +## Authentication + +Seqera MCP supports two authentication methods: + +- **OAuth 2.1** (recommended): Interactive login through Seqera Platform. Your browser opens automatically to authenticate when connecting. +- **Personal Access Token**: Use your Seqera Platform [access token](https://docs.seqera.io/platform-cloud/credentials/overview) as a Bearer token. Useful for clients that don't support OAuth. + +## Client setup + +### Cursor + +Create or edit `~/.cursor/mcp.json`: + +```json +{ + "mcpServers": { + "seqera": { + "url": "https://mcp.seqera.io/mcp" + } + } +} +``` + +Restart Cursor to apply the configuration. On first use, your browser will open for authentication. + +### VS Code + +Create or edit `~/Library/Application Support/Code/User/mcp.json` (macOS) or `%APPDATA%\Code\User\mcp.json` (Windows): + +```json +{ + "servers": { + "seqera": { + "url": "https://mcp.seqera.io/mcp", + "type": "http" + } + } +} +``` + +### Windsurf + +Create or edit `~/.codeium/windsurf/mcp_config.json`: + +```json +{ + "mcpServers": { + "seqera": { + "serverUrl": "https://mcp.seqera.io/mcp" + } + } +} +``` + +### Claude Code + +```bash +claude mcp add seqera --url https://mcp.seqera.io/mcp +``` + +### Claude Desktop + +1. Open Claude Desktop settings +2. Select **Add connectors** +3. Click **Add custom connector** +4. Enter the URL: `https://mcp.seqera.io/mcp` +5. Select **OAuth** as the authentication method + +### OpenAI Codex + +First, enable the MCP client feature in `~/.codex/config.toml`: + +```toml +[features] +rmcp_client = true +``` + +Then add the Seqera MCP server and authenticate: + +```bash +codex mcp add seqera --url https://mcp.seqera.io/mcp +codex mcp login seqera +``` + +### Using Personal Access Token + +For clients that don't support OAuth, add your access token as a header: + +```json +{ + "mcpServers": { + "seqera": { + "url": "https://mcp.seqera.io/mcp", + "headers": { + "Authorization": "Bearer " + } + } + } +} +``` + +## Resources + +- [Model Context Protocol specification](https://modelcontextprotocol.io/) +- [Seqera MCP repository](https://github.com/seqeralabs/seqera-mcp) diff --git a/mcp_docs/sidebar.json b/mcp_docs/sidebar.json new file mode 100644 index 000000000..26d7ff64b --- /dev/null +++ b/mcp_docs/sidebar.json @@ -0,0 +1,5 @@ +{ + "sidebar": [ + "index" + ] +} diff --git a/src/theme/DocSidebar/Desktop/ProductSwitcher/index.jsx b/src/theme/DocSidebar/Desktop/ProductSwitcher/index.jsx index 28008d1ce..d7641fd02 100644 --- a/src/theme/DocSidebar/Desktop/ProductSwitcher/index.jsx +++ b/src/theme/DocSidebar/Desktop/ProductSwitcher/index.jsx @@ -25,6 +25,7 @@ const products = [ { name: "MultiQC", url: "/multiqc" }, { name: "Wave", url: "/wave" }, { name: "Fusion", url: "/fusion" }, + { name: "MCP", url: "/mcp" }, ]; const ProductSwitcher = ({ isDropdown }) => { diff --git a/src/theme/Navbar/Layout/SeqeraHeader/HeaderDesktop/NavItems/index.jsx b/src/theme/Navbar/Layout/SeqeraHeader/HeaderDesktop/NavItems/index.jsx index 1d5a77f9e..04b889fbb 100644 --- a/src/theme/Navbar/Layout/SeqeraHeader/HeaderDesktop/NavItems/index.jsx +++ b/src/theme/Navbar/Layout/SeqeraHeader/HeaderDesktop/NavItems/index.jsx @@ -86,7 +86,12 @@ const NavItems = ({ isDark = false, hideMenu }) => { Fusion - +
  • + + MCP + +
  • +