seismic-waveform-processing
$
npx mdskill add InternScience/scp/seismic-waveform-processingProcesses seismic waveform data from MinISEED/SAC files and visualizes earthquake signals
- Enables analysis of seismic data by extracting metadata and visualizing signals
- Uses MinISEED/SAC file formats and MCP server communication for data handling
- Processes input files to identify and isolate earthquake waveforms
- Delivers processed data and visualizations through an asynchronous client interface
SKILL.md
.github/skills/seismic-waveform-processingView on GitHub ↗
---
name: seismic-waveform-processing
description: Process seismic waveform data including reading MinISEED/SAC files, extracting metadata, and visualizing earthquake signals.
license: MIT license
metadata:
skill-author: PJLab
---
# Seismic Waveform Processing
## Usage
### 1. MCP Server Definition
```python
import asyncio
import json
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
class SeismicClient:
"""SeisOBS-Tool MCP Client"""
def __init__(self, server_url: str, api_key: str):
self.server_url = server_url
self.api_key = api_key
self.session = None
async def connect(self):
"""Establish connection and initialize session"""
try:
self.transport = streamablehttp_client(
url=self.server_url,
headers={"SCP-HUB-API-KEY": self.api_key}
)
self.read, self.write, self.get_session_id = await self.transport.__aenter__()
self.session_ctx = ClientSession(self.read, self.write)
self.session = await self.session_ctx.__aenter__()
await self.session.initialize()
return True
except Exception as e:
print(f"✗ connect failure: {e}")
return False
async def disconnect(self):
"""Disconnect from server"""
try:
if self.session:
await self.session_ctx.__aexit__(None, None, None)
if hasattr(self, 'transport'):
await self.transport.__aexit__(None, None, None)
except Exception as e:
print(f"✗ disconnect error: {e}")
def parse_result(self, result):
"""Parse MCP tool call result"""
try:
if hasattr(result, 'content') and result.content:
content = result.content[0]
if hasattr(content, 'text'):
return json.loads(content.text)
return str(result)
except Exception as e:
return {"error": f"parse error: {e}", "raw": str(result)}
```
### 2. Seismic Waveform Processing Workflow
This workflow processes seismic waveform data from MinISEED or SAC files.
**Workflow Steps:**
1. **Read Waveform Data** - Load seismic data from file
2. **Extract Metadata** - Retrieve station and instrument information
3. **Visualize Waveform** - Generate time-series plot
**Implementation:**
```python
## Initialize client
client = SeismicClient(
"https://scp.intern-ai.org.cn/api/v1/mcp/33/SeisOBS-Tool",
"<your-api-key>"
)
if not await client.connect():
print("connection failed")
exit()
## Input: Path to seismic data file (URL or local path)
data_path = "https://example.com/seismic_data.mseed"
channel_idx = 0 # Channel index to process
## Step 1: Read waveform data
result = await client.session.call_tool(
"read_mseed_file",
arguments={
"data_path": data_path,
"channel_idx": channel_idx
}
)
waveform_data = client.parse_result(result)
print(f"Waveform data shape: {len(waveform_data['st'])} samples")
## Step 2: Extract metadata
result = await client.session.call_tool(
"read_mseed_file_stats",
arguments={
"data_path": data_path,
"channel_idx": channel_idx,
"outfile": None
}
)
metadata = client.parse_result(result)
print(f"Station: {metadata.get('station', 'N/A')}")
print(f"Sampling rate: {metadata.get('sampling_rate', 'N/A')} Hz")
## Step 3: Visualize waveform
result = await client.session.call_tool(
"plot_single_waveform",
arguments={
"data_path": data_path,
"channel_idx": channel_idx,
"outfile": None,
"starttime": None,
"endtime": None
}
)
plot_result = client.parse_result(result)
print(f"Waveform plot saved to: {plot_result['st']}")
await client.disconnect()
```
### Tool Descriptions
**SeisOBS-Tool Server:**
- `read_mseed_file`: Read waveform data from MinISEED file
- Args:
- `data_path` (str): Path or URL to MinISEED file
- `channel_idx` (int): Channel index to read
- Returns: Waveform time series data
- `read_mseed_file_stats`: Extract metadata from MinISEED file
- Args:
- `data_path` (str): Path or URL to MinISEED file
- `channel_idx` (int): Channel index
- `outfile` (str, optional): Output file path
- Returns: Station metadata and instrument information
- `plot_single_waveform`: Generate waveform plot
- Args:
- `data_path` (str): Path or URL to MinISEED file
- `channel_idx` (int): Channel index
- `outfile` (str, optional): Output image path
- `starttime` (str, optional): Plot start time
- `endtime` (str, optional): Plot end time
- Returns: Path to generated plot image
### Input/Output
**Input:**
- `data_path`: Path or URL to seismic data file (MinISEED or SAC format)
- `channel_idx`: Index of the channel to process (0-based)
- `starttime`/`endtime`: Optional time window for plotting
**Output:**
- Waveform data array
- Metadata including station, sampling rate, start time
- Visualization image (PNG format)
### Use Cases
- Earthquake signal analysis
- Seismic station quality control
- Waveform data preprocessing
- P-wave and S-wave identification
- Ground motion visualization
### Performance Notes
- **File formats**: MinISEED (.mseed), SAC (.sac)
- **Execution time**: <5 seconds for typical earthquake recordings
- **Data size**: Handles files up to 100 MB efficiently
More from InternScience/scp
- admet_druglikeness_reportADMET & Drug-Likeness Report - Generate comprehensive ADMET and drug-likeness report: molecular properties, H-bond analysis, hydrophobicity, topology, and ADMET prediction. Use this skill for medicinal chemistry tasks involving calculate mol basic info calculate mol hbond calculate mol hydrophobicity calculate mol topology pred molecule admet. Combines 5 tools from 2 SCP server(s).
- affinity_maturationAffinity Maturation Pipeline - Affinity maturation: compute binding affinity, predict mutations, compute hydrophilicity, and predict drug-target interaction. Use this skill for antibody engineering tasks involving ComputeAffinityCalculator zero shot sequence prediction ComputeHydrophilicity PredictDrugTargetInteraction. Combines 4 tools from 3 SCP server(s).
- alanine_scanning_pipelineAlanine Scanning Mutagenesis Pipeline - Alanine scanning: design scan, compute properties for each mutant, predict interactions, and compare. Use this skill for protein biochemistry tasks involving AlanineScanningDesigner ComputeProtPara PredictDrugTargetInteraction calculate protein sequence properties. Combines 4 tools from 3 SCP server(s).
- aliphatic_ring_analysisRing System Analysis - Analyze ring systems: count aliphatic carbocycles, analyze aromaticity, compute topology, and structure complexity. Use this skill for organic chemistry tasks involving GetAliphaticCarbocyclesNum AromaticityAnalyzer calculate mol topology calculate mol structure complexity. Combines 4 tools from 3 SCP server(s).
- alphafold_structure_pipelineAlphaFold Structure Analysis Pipeline - AlphaFold pipeline: download predicted structure, predict pockets, extract sequence, and compute properties. Use this skill for computational biology tasks involving download alphafold structure run fpocket extract pdb sequence calculate pdb basic info. Combines 4 tools from 3 SCP server(s).
- antibody_drug_developmentAntibody Drug Development - Develop antibody drug: target protein analysis, biotherapeutic lookup, protein properties, and interaction prediction. Use this skill for biologics tasks involving get uniprotkb entry by accession get biotherapeutic by name ComputeProtPara ComputeHydrophilicity. Combines 4 tools from 3 SCP server(s).
- antibody_target_analysisAntibody-Target Analysis - Analyze an antibody target: UniProt protein info, InterPro domains, protein properties, and biotherapeutic data from ChEMBL. Use this skill for immunology tasks involving get uniprotkb entry by accession query interpro ComputeProtPara get biotherapeutic by name. Combines 4 tools from 4 SCP server(s).
- atc_drug_classificationATC Drug Classification Lookup - Look up drug in ATC classification: ChEMBL ATC class, FDA drug info, PubChem compound, and mechanism of action. Use this skill for pharmacology tasks involving get atc class by level5 get mechanism of action by drug name get compound by name get drug by name. Combines 4 tools from 3 SCP server(s).
- atmospheric-science-calculationsCalculate atmospheric parameters including Coriolis parameter, geostrophic wind, heat index, potential temperature, and dewpoint for meteorology and climate science.
- binding_site_characterizationBinding Site Characterization - Characterize binding sites: predict pockets with fpocket and P2Rank, get binding site info from ChEMBL, and visualize. Use this skill for structural biology tasks involving run fpocket pred pocket prank get binding site by id visualize protein. Combines 4 tools from 3 SCP server(s).