Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file removed .gitmodules
Empty file.
25 changes: 25 additions & 0 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: " +
Expand All @@ -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),
);

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 <svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU" style="margin-left:6px;opacity:0.6;"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>',
Expand Down
129 changes: 129 additions & 0 deletions mcp_docs/index.md
Original file line number Diff line number Diff line change
@@ -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 <YOUR_ACCESS_TOKEN>"
}
}
}
}
```

## Resources

- [Model Context Protocol specification](https://modelcontextprotocol.io/)
- [Seqera MCP repository](https://github.com/seqeralabs/seqera-mcp)
5 changes: 5 additions & 0 deletions mcp_docs/sidebar.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"sidebar": [
"index"
]
}
1 change: 1 addition & 0 deletions src/theme/DocSidebar/Desktop/ProductSwitcher/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 }) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,12 @@ const NavItems = ({ isDark = false, hideMenu }) => {
Fusion
</ActiveLink>
</li>
</ul>
<li>
<ActiveLink url="/mcp" customClasses={styles.navItemSpacing}>
MCP
</ActiveLink>
</li>
</ul>
<ul className={styles.navList} style={{marginRight: '0.5rem'}}>
<li>
<a className={styles.linkContainer} href="https://training.nextflow.io/latest/">
Expand Down