GW MCP Server
Allows LangChain agents to use the MCP server's tools for querying gravitational wave data from GraceDB and GWOSC.
Provides access to gravitational wave alerts from NASA's GCN (General Coordinates Network) system, requiring Earthdata credentials for full real-time access.
Supports local LLMs like Ollama to access gravitational wave data through direct function calling or MCP-compatible clients.
Enables OpenAI language models to query gravitational wave databases via LangChain integration using the MCP server's tools.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GW MCP ServerWhat's the GPS time of GW150914?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GW MCP Server
An MCP (Model Context Protocol) server providing tools to query Gravitational Wave (GW) data from GraceDB and GWOSC.
What is MCP?
MCP (Model Context Protocol) allows AI assistants like Claude to use external tools. This server gives Claude the ability to query gravitational wave databases in real-time, so you can ask questions about GW events in natural language.
Related MCP server: Google Cloud MCP Server
Sample Questions
Once connected, you can ask Claude questions like:
"What was the GPS time of GW150914?"
"Show me all events in the GWTC-3 catalog"
"Get strain data from the Hanford detector around GW150914"
"Search for gravitational wave events with FAR less than 1e-10"
"What files are available for a specific GraceDB event?"
Example
Access Levels
Source | Public Access | Authenticated Access |
GWOSC | Full (strain data, catalogs) | N/A |
GraceDB | Released events only | Full access to current observing run |
GCN Kafka | No | Requires NASA Earthdata credentials |
This server works out-of-the-box with public data only.
Installation
Step 1: Create Conda Environment
# Create new conda environment with Python 3.11
conda create -n opticsGPT python=3.11 -y
# Activate the environment
conda activate opticsGPTStep 2: Install Dependencies
cd C:\Users\Asus\Desktop\OpticsGPT\GW_MCP
# Install from requirements.txt
pip install -r requirements.txtStep 3: Verify Installation
# Test GWOSC (should print GPS time)
python -c "from gwosc.datasets import event_gps; print('GW150914 GPS:', event_gps('GW150914'))"Usage with Claude Desktop
Add to claude_desktop_config.json:
Or create the file
{
"mcpServers": {
"GW-Data": {
"command": "C:/Users/Asus/anaconda3/envs/mcp/python.exe",
"args": ["C:/Users/Asus/Desktop/GW_MCP/server.py"]
}
}
}WARNING: You must update the paths below to match your system. Change:
The Python executable path to your conda environment location
The server.py path to where you cloned this repository
Find your Python path with:
conda activate mcp && where python
Using with Other LLMs and Frameworks
LangChain Integration
You can use this MCP server with LangChain using the langchain-mcp-adapters package:
pip install langchain-mcp-adaptersfrom langchain_mcp_adapters.client import MCPClient
from langchain_openai import ChatOpenAI
# Connect to the MCP server
client = MCPClient(
command="python",
args=["path/to/GW_MCP/server.py"]
)
# Get tools from MCP server
tools = client.get_tools()
# Use with any LangChain-compatible LLM
llm = ChatOpenAI(model="gpt-4")
llm_with_tools = llm.bind_tools(tools)Open Source LLMs
For open source LLMs (Ollama, LMStudio, etc.), you can:
Use MCP-compatible clients: Some open source projects like MCP CLI support connecting MCP servers to local LLMs.
Direct function calling: Import the service classes directly in your Python code:
from services.gracedb_service import get_gracedb_service
from services.gwosc_service import get_gwosc_service
# Use services directly
gwosc = get_gwosc_service()
gps_time = gwosc.get_event_gps("GW150914")
print(f"GPS time: {gps_time}")Build a REST API: Wrap the services in a FastAPI/Flask server for any LLM that supports function calling via HTTP.
Available Tools
Tool | Source | Description |
| GraceDB | Search events by FAR, GPS time, pipeline |
| GraceDB | Get full metadata for an event |
| GraceDB | Get superevent information |
| GraceDB | List files (skymaps, PSD, etc.) |
| GraceDB | Get event labels (DQV, PE_READY, etc.) |
| GWOSC | Get GPS time for named event (GW150914, etc.) |
| GWOSC | Query GWTC-1/2/3 catalogs |
| GWOSC | Get strain time-series by GPS range |
| GWOSC | Get strain centered on a named event |
For LIGO/Virgo Collaboration Members
If you have LIGO credentials, you can access real-time alerts from the current observing run.
How GraceDB Authentication Works
By default, the ligo-gracedb client searches for credentials in this order:
SciToken at
/tmp/bt_u${UID}orSCITOKEN_FILEenvironment variableX.509 credentials from the
credparameter (cert/key pair or proxy file)Environment variables:
X509_USER_CERT+X509_USER_KEYEnvironment variable:
X509_USER_PROXYProxy from ligo-proxy-init:
/tmp/x509up_u${UID}Default location:
~/.globus/usercert.pemand~/.globus/userkey.pemNo credentials (public access only)
Option 1: Using Environment Variables (Recommended)
Set these before running the MCP server:
# For SciToken
export SCITOKEN_FILE=/path/to/your/scitoken
# OR for X.509 certificate
export X509_USER_CERT=/path/to/usercert.pem
export X509_USER_KEY=/path/to/userkey.pem
# OR for proxy file
export X509_USER_PROXY=/tmp/x509up_u${UID}Option 2: Modify the Service Code
Edit src/gw_mcp_server/services/gracedb_service.py:
# For X.509 cert/key pair:
self._client = GraceDb(
cred=('/path/to/cert.pem', '/path/to/key.pem')
)
# For combined proxy file:
self._client = GraceDb(
cred='/path/to/proxy.pem'
)
# To explicitly use only SciToken:
self._client = GraceDb(use_auth='scitoken')
# To explicitly use only X.509:
self._client = GraceDb(use_auth='x509')Option 3: Force Public Access Only
If you want to explicitly disable authentication attempts:
self._client = GraceDb(force_noauth=True)Getting Credentials
ligo-proxy-init: Run
ligo-proxy-initto create a short-lived proxy from your certificatehtgettoken: Use
htgettokento obtain a SciTokenCILogon: Get certificates from https://cilogon.org
Test Your Authentication
from ligo.gracedb.rest import GraceDb
client = GraceDb()
client.show_credentials() # Prints auth type and info
# Test access to current run superevents
try:
for se in client.superevents('category: Production', max_results=5):
print(se['superevent_id'])
except Exception as e:
print(f"Auth required: {e}")Useful GraceDb Client Options
GraceDb(
service_url='https://gracedb.ligo.org/api/', # Production server
# service_url='https://gracedb-playground.ligo.org/api/', # Test server
cred=None, # Path to credentials
force_noauth=False, # Skip credential lookup
fail_if_noauth=False, # Fail if no credentials found
reload_cred=False, # Auto-reload expiring credentials
reload_buffer=300, # Seconds before expiry to reload
use_auth='all', # 'all', 'scitoken', or 'x509'
retries=5, # Max retries on server error
)For full documentation: https://ligo-gracedb.readthedocs.io/en/latest/
Data Sources
Source | URL | Auth Required |
GWOSC | No | |
GraceDB | For current run | |
GCN | Yes (Earthdata) |
Citation
If you use this software in your research, please cite:
@software{gw_mcp,
title={GW MCP Server: Gravitational Wave Data Access for AI Agents},
author={Adam Zacharia Anil},
year={2025},
url={https://github.com/adamzacharia/GW_MCP}
}License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/adamzacharia/GW_MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server