Neurosnap Model Context Protocol (MCP) Tutorial | The MCP Server For Bioinformatics

Written by Keaun Amani | Published 2026-5-26

Introduction

We are excited to announce the official release of the Neurosnap MCP server. MCP, short for Model Context Protocol, allows LLMs and agentic tools such as Codex, Claude, and other compatible clients to interact directly with the Neurosnap platform in a structured and secure way.

With the Neurosnap MCP server, bots can browse your jobs, inspect job data and files, submit new jobs, review pipelines, and access team and account information using the same Neurosnap account they already use today. This makes it much easier to build automated research workflows, agent-driven analysis pipelines, and AI-assisted lab tooling on top of Neurosnap.

Please keep in mind that this tutorial and the Neurosnap MCP server are designed to be used by those with at least a basic understanding of programming, APIs, and agent tooling.

Accessing The MCP Server

To access the Neurosnap MCP server you will first need to generate an API key for your account. The same API key used for the Neurosnap HTTP API is also used to authenticate MCP access.

  1. Visit your overview page's API tab.
  2. Click on the Generate API Key button.
  3. Save the resulting API key and make sure not to share it. Anybody that has access to your API key can access everything on your Neurosnap account, including the MCP server. Treat your API key as confidential (similar to how you would treat a password) and never share your API key or post it online. Screenshot of the Neurosnap API tab on the overview page.

MCP Endpoint

The Neurosnap MCP server is available at:

https://neurosnap.ai/mcp

Authentication is performed using your Neurosnap API key. Most MCP clients should use the standard bearer token format:

Authorization: Bearer YOUR_API_KEY

Some tools may also support passing the key as an X-API-KEY header.

Connecting With A Client

The easiest way to use the Neurosnap MCP server is with an MCP-compatible client.

Example: Codex CLI

The following example adds the Neurosnap MCP server to Codex locally:

export NEUROSNAP_API_KEY="YOUR_API_KEY"
codex mcp add neurosnap --url https://neurosnap.ai/mcp --bearer-token-env-var NEUROSNAP_API_KEY
codex

Once connected, Codex can list Neurosnap tools, browse resources, read job files, inspect pipelines, and submit jobs on your behalf.

Example: MCP Inspector

If you want to inspect the server manually, the MCP Inspector is a good place to start:

npx -y @modelcontextprotocol/inspector

Then connect it to:

https://neurosnap.ai/mcp

and provide your API key as a bearer token.

MCP Primitives

The Neurosnap MCP server exposes three main primitive types:

MCP Workflow

Most MCP clients follow the same general flow:

  1. Initialize the connection.
  2. List available tools, resources, and prompts.
  3. Read resources or invoke tools as needed.

Below are some example JSON-RPC requests for working directly with the MCP endpoint.

Example: Initialize

import requests

headers = {
  "Authorization": "Bearer YOUR_API_KEY",
  "Content-Type": "application/json",
}

payload = {
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "capabilities": {},
    "clientInfo": {
      "name": "example-client",
      "version": "1.0"
    }
  }
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Tools

Neurosnap MCP tools are primarily used to submit jobs. One MCP tool is exposed for each available Neurosnap service.

Example: List Tools

payload = {
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list",
  "params": {}
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

The result will contain a list of available Neurosnap service tools such as:

{
  "name": "submit_alphafold2",
  "title": "AlphaFold2",
  "description": "..."
}

Example: Submit A Job

To submit a job, call the appropriate service tool. Scalar inputs are supplied in inputs using the exact Neurosnap form field titles as keys. File uploads are supplied in files.

payload = {
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "submit_alphafold2",
    "arguments": {
      "note": "Example MCP submission",
      "inputs": {
        "Sequence": "MVLSPADKTNVKAAW"
      }
    }
  }
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())
# {
#   "jsonrpc": "2.0",
#   "id": 3,
#   "result": {
#     "structuredContent": {
#       "job_id": "682f0d0f9f4b2d47b53e1234",
#       "service": "AlphaFold2",
#       "job_uri": "neurosnap://jobs/682f0d0f9f4b2d47b53e1234",
#       "data_uri": "neurosnap://jobs/682f0d0f9f4b2d47b53e1234/data"
#     }
#   }
# }

Example: Submit A Job With File Inputs

For tools that require uploaded files, place them under files. Text-based files can be passed using content, while binary data should be passed using content_base64.

import base64

with open("input.fasta", "rb") as f:
  fasta_b64 = base64.b64encode(f.read()).decode()

payload = {
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "submit_mafft_msa_generation",
    "arguments": {
      "inputs": {},
      "files": {
        "Input File": {
          "name": "input.fasta",
          "content_base64": fasta_b64
        }
      }
    }
  }
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Resources

Resources provide structured, read-only access to Neurosnap account data, jobs, pipelines, and files.

Example: List Resources

payload = {
  "jsonrpc": "2.0",
  "id": 5,
  "method": "resources/list",
  "params": {}
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Example: List Resource Templates

payload = {
  "jsonrpc": "2.0",
  "id": 6,
  "method": "resources/templates/list",
  "params": {}
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Available Resources

The Neurosnap MCP server currently exposes the following resources:

neurosnap://jobs

Lists your accessible Neurosnap jobs.

neurosnap://jobs/JOB_ID

Returns metadata for a specific job.

neurosnap://jobs/JOB_ID/data

Returns the submission configuration and file inventory for a job.

neurosnap://jobs/JOB_ID/file/[in/out]/PATH

Returns the contents of a specific input or output file from a job.

neurosnap://pipelines

Lists your accessible pipelines.

neurosnap://pipelines/PIPELINE_ID

Returns the current status of a specific pipeline, including jobs and pipeline errors.

neurosnap://account/credits

Returns information about your current personal credits and account plan.

neurosnap://team/members

Returns your team member list if you are part of a Neurosnap Team.

neurosnap://team/credits

Returns your team credit balance if you are part of a Neurosnap Team.

Example: Read Job List

payload = {
  "jsonrpc": "2.0",
  "id": 7,
  "method": "resources/read",
  "params": {
    "uri": "neurosnap://jobs"
  }
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Example: Read Job Data

payload = {
  "jsonrpc": "2.0",
  "id": 8,
  "method": "resources/read",
  "params": {
    "uri": "neurosnap://jobs/682f0d0f9f4b2d47b53e1234/data"
  }
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Example: Read A Job File

payload = {
  "jsonrpc": "2.0",
  "id": 9,
  "method": "resources/read",
  "params": {
    "uri": "neurosnap://jobs/682f0d0f9f4b2d47b53e1234/file/out/output.json"
  }
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Example: Read Pipeline List

payload = {
  "jsonrpc": "2.0",
  "id": 10,
  "method": "resources/read",
  "params": {
    "uri": "neurosnap://pipelines"
  }
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Example: Read Pipeline Status

payload = {
  "jsonrpc": "2.0",
  "id": 11,
  "method": "resources/read",
  "params": {
    "uri": "neurosnap://pipelines/683010ae9f4b2d47b53e9876"
  }
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Prompts

Prompts provide reusable instructions for MCP-compatible assistants. They are especially useful when working with agentic clients that can combine Neurosnap tools and resources automatically.

Example: List Prompts

payload = {
  "jsonrpc": "2.0",
  "id": 12,
  "method": "prompts/list",
  "params": {}
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Available Prompts

The Neurosnap MCP server currently includes prompts such as:

Example: Get A Prompt

payload = {
  "jsonrpc": "2.0",
  "id": 13,
  "method": "prompts/get",
  "params": {
    "name": "submit_job_with_tool",
    "arguments": {
      "tool_name": "submit_alphafold2",
      "user_request": "Predict the structure of this protein: MVLSPADKTNVKAAW"
    }
  }
}

r = requests.post("https://neurosnap.ai/mcp", headers=headers, json=payload)
print(r.json())

Security Notes

Neurosnap MCP access is authenticated using the same API key as the Neurosnap HTTP API. Because of this, your API key should be treated as highly sensitive.

Please keep the following in mind:

For best practices, store your API key in an environment variable or your MCP client’s secret configuration system.

Conclusion

Congrats on making it this far! You should now have everything you need to start using the Neurosnap MCP server with compatible clients and agent frameworks.

The MCP server makes it much easier to connect LLM-powered workflows directly to Neurosnap, whether you want to automate job submission, inspect results, browse files, or build more advanced AI-assisted research tooling.

Please keep in mind that we have plans to continue expanding the capabilities of the Neurosnap MCP server and that changes to the available tools, prompts, and resources are certainly possible. Make sure to keep referencing this page for updates.

Explore more posts

Interpreting Chai-1 (AlphaFold3) Metrics and Visualizations on Neurosnap

By Danial Gharaie Amirabadi

Revolutionizing Medicine: The Remarkable Stories of Imatinib and Oseltamivir

By Amélie Lagacé-O'Connor

From AlphaFold3 to Protenix: Making Biomolecular Modeling More Practical

By Danial Gharaie Amirabadi

Creating Next Generation Fluorescent Proteins Using AlphaFold2 and ProteinMPNN

By Keaun Amani

What Is Affinity Maturation? A Deep Dive into Optimizing Protein Binders

By Keaun Amani

Unlock the Power of PyMOL: Elevate Your Protein Visualizations with Expert Tips and Tricks

By Keaun Amani

Making Scientific Research
Faster & Easier

Register for free — upgrade anytime.

Interested in getting a license? Contact Sales.

Try Free