Skip to main content
Glama
biocontext-ai

BioContextAI Knowledgebase MCP

Official

bc_get_pride_project

Retrieve detailed metadata and experimental information for PRIDE mass spectrometry proteomics projects using project accession numbers.

Instructions

Retrieve detailed information about a specific PRIDE mass spectrometry proteomics project. Returns metadata and experimental details.

Returns: dict: Project details with accession, title, description, organisms, instruments, publications, optionally files/similar_projects or error message.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_accessionYesPRIDE project accession (e.g., 'PRD000001')
include_filesNoInclude file information (limited to first 20 files)
include_similar_projectsNoInclude similar projects based on metadata (limited to 10)

Implementation Reference

  • The handler function for the 'bc_get_pride_project' tool (registered as 'get_pride_project' on core_mcp, prefixed to 'bc_' in main app). Fetches PRIDE project metadata, optional files and similar projects from EBI API.
    @core_mcp.tool()
    def get_pride_project(
        project_accession: Annotated[
            str,
            Field(description="PRIDE project accession (e.g., 'PRD000001')"),
        ],
        include_files: Annotated[
            bool,
            Field(description="Include file information (limited to first 20 files)"),
        ] = False,
        include_similar_projects: Annotated[
            bool,
            Field(description="Include similar projects based on metadata (limited to 10)"),
        ] = False,
    ) -> dict:
        """Retrieve detailed information about a specific PRIDE mass spectrometry proteomics project. Returns metadata and experimental details.
    
        Returns:
            dict: Project details with accession, title, description, organisms, instruments, publications, optionally files/similar_projects or error message.
        """
        base_url = "https://www.ebi.ac.uk/pride/ws/archive/v3"
    
        try:
            # Get basic project information
            project_url = f"{base_url}/projects/{project_accession}"
            response = requests.get(project_url)
            response.raise_for_status()
    
            project_data = response.json()
    
            if not project_data:
                return {"error": f"No data found for PRIDE project {project_accession}"}
    
            result = project_data
    
            # Optionally include file information
            if include_files:
                try:
                    files_url = f"{base_url}/projects/{project_accession}/files"
                    files_response = requests.get(files_url, params={"pageSize": 20})
                    if files_response.status_code == 200:
                        files_data = files_response.json()
                        result["files"] = files_data[:20]  # Limit to first 20 files
    
                        # Get file count
                        count_url = f"{base_url}/projects/{project_accession}/files/count"
                        count_response = requests.get(count_url)
                        if count_response.status_code == 200:
                            result["total_files"] = count_response.json()
    
                except Exception:
                    result["files"] = {"error": "Could not fetch file information"}
    
            # Optionally include similar projects
            if include_similar_projects:
                try:
                    similar_url = f"{base_url}/projects/{project_accession}/similarProjects"
                    similar_response = requests.get(similar_url, params={"pageSize": 10})
                    if similar_response.status_code == 200:
                        similar_data = similar_response.json()
                        result["similar_projects"] = similar_data[:10]  # Limit to first 10
                except Exception:
                    result["similar_projects"] = {"error": "Could not fetch similar projects"}
    
            return result
    
        except requests.exceptions.HTTPError as e:
            if e.response.status_code == 404:
                return {"error": f"PRIDE project {project_accession} not found"}
            return {"error": f"HTTP error: {e}"}
        except Exception as e:
            return {"error": f"Exception occurred: {e!s}"}
  • Pydantic schema definition for tool inputs using Annotated and Field, output is dict.
    def get_pride_project(
        project_accession: Annotated[
            str,
            Field(description="PRIDE project accession (e.g., 'PRD000001')"),
        ],
        include_files: Annotated[
            bool,
            Field(description="Include file information (limited to first 20 files)"),
        ] = False,
        include_similar_projects: Annotated[
            bool,
            Field(description="Include similar projects based on metadata (limited to 10)"),
        ] = False,
    ) -> dict:
  • Registers the core_mcp server (containing get_pride_project tool) into the main mcp_app with prefix slugify('BC') = 'bc', making tool name 'bc_get_pride_project'.
    for mcp in [core_mcp, *(await get_openapi_mcps())]:
        await mcp_app.import_server(
            mcp,
            slugify(mcp.name),
        )
    logger.info("MCP server setup complete.")
  • Defines the core_mcp FastMCP instance named 'BC' where tools like get_pride_project are registered via decorators.
    core_mcp = FastMCP(  # type: ignore
        "BC",
        instructions="Provides access to biomedical knowledge bases.",
    )
  • Imports the get_pride_project function, triggering registration via its @core_mcp.tool() decorator when the module is imported.
    from ._get_pride_project import get_pride_project
    from ._search_pride_projects import search_pride_projects
    from ._search_pride_proteins import search_pride_proteins
    
    __all__ = [
        "get_pride_project",
        "search_pride_projects",
        "search_pride_proteins",
    ]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/biocontext-ai/knowledgebase-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server