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
| Name | Required | Description | Default |
|---|---|---|---|
| project_accession | Yes | PRIDE project accession (e.g., 'PRD000001') | |
| include_files | No | Include file information (limited to first 20 files) | |
| include_similar_projects | No | Include 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:
- src/biocontext_kb/app.py:35-40 (registration)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.")
- src/biocontext_kb/core/_server.py:3-6 (registration)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.", )
- src/biocontext_kb/core/pride/__init__.py:1-9 (registration)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", ]