Skip to content

Commit 2ae9fbc

Browse files
Tony Bentleyclaude
authored andcommitted
Add blog post: Introducing SignalK MCP Server
Introduces the signalk-mcp-server project, a Model Context Protocol server that enables AI assistants like Claude to interact with SignalK marine data systems through natural language. Key features: - Real-world usage examples from the Satori project - 89 conversations and 252 tool calls analyzed - Demonstrates conversational boat monitoring approach - Tutorial-style guide for getting started - Emphasizes read-only safety and security Includes context document with research findings and conversation analysis for future reference. Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 95d73a6 commit 2ae9fbc

File tree

2 files changed

+563
-0
lines changed

2 files changed

+563
-0
lines changed

BLOG_CONTEXT.md

Lines changed: 334 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,334 @@
1+
# Blog Post Context: SignalK MCP Server
2+
3+
## Project Overview
4+
5+
This document contains research findings for creating a blog post about the SignalK MCP Server project.
6+
7+
## Repository Information
8+
9+
### Upstream Repository
10+
11+
- **URL**: https://github.com/SignalK/signalk.github.io
12+
- **Owner**: SignalK organization
13+
- **Current Fork**: https://github.com/tonybentley/signalk.github.io.git
14+
15+
### Contributing Process
16+
17+
1. Website built with Astro and hosted on GitHub Pages
18+
2. Local development requires Node.js
19+
3. Run locally: `npm install` then `npm start` (serves at localhost:4321)
20+
4. Code quality: `npm run fix` to auto-fix errors and check for issues
21+
5. Blog posts are created using: `script/generate "Title of the new post"`
22+
- Creates file in `_posts` with current date
23+
- Uses template from `docs/blog-template.md`
24+
- Generates `.mdx` files (not `.md`)
25+
6. Workflow: Write draft → Open pull request → Get reviewed
26+
27+
## Blog Post Template Structure
28+
29+
```yaml
30+
---
31+
publishDate: { date }
32+
title: { title }
33+
author: Your Full Name
34+
# image: ~/assets/images/your-image.png or full URL (e.g., from unsplash.com)
35+
category: Release | Tutorial | Case Study
36+
tags: [tag1, tag2]
37+
description: '1-2 sentence headline that becomes the first paragraph'
38+
---
39+
```
40+
41+
## Example Blog Post Analysis
42+
43+
### Recent Posts Reviewed
44+
45+
1. **KIP 3.0.0** (\_posts/2025/kip-3.0.0.md)
46+
47+
- Category: Release
48+
- Format: Feature list with emoji headers
49+
- Includes screenshots
50+
- Links to GitHub releases
51+
- Technical but accessible
52+
53+
2. **TWatchSK Announcement** (\_posts/2022/twatchsk-announcement.md)
54+
- Category: Ecosystem/Hardware
55+
- Personal narrative style
56+
- Multiple images showing UI
57+
- Detailed feature walkthrough
58+
- Author included email and gravatar
59+
60+
### Writing Style Patterns
61+
62+
- Technical but approachable
63+
- Use of specific examples and scenarios
64+
- Screenshots/images to illustrate features
65+
- Links to relevant resources
66+
- Community-focused language
67+
- Clear structure with headers
68+
- Practical use cases highlighted
69+
70+
## SignalK MCP Server Project Details
71+
72+
### Description
73+
74+
The SignalK MCP (Model Context Protocol) Server provides AI agents with read-only access to marine data systems. Enables AI assistants like Claude to query vessel navigation data, monitor AIS targets, and access system alarms from SignalK installations.
75+
76+
### Key Features
77+
78+
- Real-time vessel data access
79+
- AIS target monitoring
80+
- System notifications tracking
81+
- Live data streams
82+
- Path discovery
83+
- Connection monitoring
84+
- Automatic reconnection
85+
86+
### Technical Requirements
87+
88+
- Node.js 18.0.0 or higher
89+
- Access to a SignalK server (local or remote)
90+
91+
### Installation Options
92+
93+
1. **Recommended**: Use npx
94+
95+
```bash
96+
npx signalk-mcp-server
97+
```
98+
99+
2. **Global installation**
100+
```bash
101+
npm install -g signalk-mcp-server
102+
```
103+
104+
### Available Tools/Commands
105+
106+
- `get_initial_context()`: Provides comprehensive system overview
107+
- `get_vessel_state()`: Retrieves current vessel navigation data
108+
- `get_ais_targets()`: Monitors nearby vessel information
109+
- `get_active_alarms()`: Tracks system notifications
110+
- `list_available_paths()`: Discovers SignalK data paths
111+
112+
### Configuration
113+
114+
- Uses environment variables
115+
- Options for SignalK host/port
116+
- Connection settings
117+
- Authentication support
118+
- Logging preferences
119+
120+
### Security & Safety
121+
122+
- Read-only operations
123+
- No device control capabilities
124+
- Graceful error handling
125+
- Robust connection validation
126+
127+
### Integration
128+
129+
- Works with Claude Desktop
130+
- Compatible with Claude Code CLI
131+
- Flexible for different development scenarios
132+
- Marine monitoring use cases
133+
134+
## Blog Post Strategy
135+
136+
### Target Audience
137+
138+
- SignalK users interested in AI/automation
139+
- Developers exploring MCP protocol
140+
- Marine enthusiasts wanting AI-assisted navigation
141+
- Technical users comfortable with CLI tools
142+
143+
### Key Messages
144+
145+
1. First MCP server for marine data
146+
2. Brings AI assistance to SignalK ecosystem
147+
3. Safe, read-only access to vessel data
148+
4. Easy to install and configure
149+
5. Opens new possibilities for AI-assisted navigation
150+
151+
### Potential Categories
152+
153+
- Tutorial (if we focus on how-to)
154+
- Release/Announcement (new tool announcement)
155+
- Ecosystem (fits with other SignalK blog posts)
156+
157+
### Suggested Tags
158+
159+
- MCP, AI, Claude, ecosystem, navigation, developer-tools
160+
161+
### Content Outline
162+
163+
1. Introduction: What is MCP and why it matters for marine
164+
2. What the SignalK MCP Server does
165+
3. Key features and capabilities
166+
4. Installation and setup
167+
5. Practical use cases/examples
168+
6. Security considerations
169+
7. Getting started/next steps
170+
8. Community call-to-action
171+
172+
## Real-World Usage: The Satori Project
173+
174+
### Project Background
175+
176+
**Satori** is a 1977 Westsail 32 sailboat (MMSI: 367603940) based in San Diego, CA. The owner uses the SignalK MCP server to enable AI-assisted boat monitoring and management through Claude Desktop.
177+
178+
### Conversational Boat Monitoring
179+
180+
The project demonstrates a unique use case: treating the boat as an entity that can be queried conversationally. Users can ask questions like "How is Satori?" and receive comprehensive status reports based on:
181+
182+
- Real-time SignalK data paths (vessel position, battery voltage, solar output, etc.)
183+
- Historical time-series data from InfluxDB
184+
- System alarms and notifications
185+
- Environmental conditions (inside temp, fridge temp, bilge status)
186+
- Engine parameters (when running)
187+
- Tank levels (fresh water, holding tank)
188+
189+
### System Context Document
190+
191+
The Satori project maintains a comprehensive system context document (`satori-system-context.md`) that provides:
192+
193+
- Complete vessel specifications and systems inventory
194+
- SignalK path references for all monitored systems
195+
- Electrical system details (solar, batteries, charging)
196+
- Historical performance data
197+
- Operational guidelines and known issues
198+
199+
### MCP Tools Integration
200+
201+
The SignalK MCP server provides tools that Claude uses to:
202+
203+
1. **get_initial_context()** - Get comprehensive overview of boat systems
204+
2. **get_vessel_state()** - Check current navigation/position data
205+
3. **get_ais_targets()** - Monitor nearby vessels
206+
4. **get_active_alarms()** - Review system alerts
207+
5. **list_available_paths()** - Discover available data streams
208+
209+
### Practical Example Queries
210+
211+
The Satori project demonstrates natural language queries like:
212+
213+
- "How is Satori?" → AI retrieves battery levels, solar charging status, tank levels
214+
- "Is the battery charging properly?" → AI checks voltage trends, solar output, charger status
215+
- "What's the fridge temperature?" → AI reads environmental sensors
216+
- "Show me power consumption over the last 24 hours" → AI queries InfluxDB time-series data
217+
218+
### Multi-System Integration
219+
220+
Satori's implementation combines:
221+
222+
- **2x Raspberry Pi computers**:
223+
- NMEA Pi: OpenPlotter + InfluxDB + MCP server
224+
- Venus Pi: VenusOS (Victron) for battery monitoring
225+
- **Starlink**: Remote connectivity (24/7 at dock)
226+
- **SignalK**: Central data hub aggregating NMEA 0183/2000
227+
- **InfluxDB**: Time-series storage for historical analysis
228+
- **ESP32 sensors**: Custom environmental and bilge monitoring
229+
230+
### Key Insight for Blog
231+
232+
This demonstrates the transformative potential of MCP + SignalK: instead of checking multiple dashboards and graphs, boat owners can have natural conversations with AI about their vessel's status, receiving intelligent analysis and proactive alerts.
233+
234+
## Detailed Conversation Examples from Satori
235+
236+
### Statistics from Analysis
237+
238+
- **89 conversations** about Satori/SignalK (out of 571 total)
239+
- **252 SignalK tool calls** made
240+
- **192 InfluxDB tool calls** for historical data
241+
- Conversations span June-October 2025
242+
243+
### Example 1: Natural Status Check
244+
245+
**User Query:** "how is satori doing today? batteries, and environment conditions?"
246+
247+
**Tools Called:**
248+
249+
- `signalk:get_vessel_state` - Overall status
250+
- `signalk:list_available_paths` - Discover available data
251+
- Multiple `signalk:get_path_value` calls for specific metrics
252+
253+
**AI Response Included:**
254+
255+
- Battery: 100% state of charge, 13.45V, 13.4A draw
256+
- Solar: 5.44 kWh generated today (combined from 2 controllers)
257+
- Environment: 26.8°C, 42.3% humidity
258+
- Bilge: Both forward and aft dry (no flooding)
259+
260+
**Key Takeaway:** Single natural question triggers comprehensive system analysis across multiple data sources.
261+
262+
### Example 2: Historical Battery Analysis
263+
264+
**User Query:** "how has the main battery doing. was it charged today?"
265+
266+
**What Happened:** AI seamlessly switched from real-time SignalK to historical InfluxDB data to show battery's journey through the day:
267+
268+
- Started at 99.8% at midnight
269+
- Dropped to 96.9% by 2:30 AM (overnight discharge)
270+
- Charging began at 3:00 AM
271+
- Reached 100% by 4:30 AM and stayed there
272+
273+
**Key Takeaway:** MCP enables narrative analysis of time-series data, not just raw numbers.
274+
275+
### Example 3: Solar Comparison
276+
277+
**User Query:** "how much solar energy did satori get today compared to yesterday?"
278+
279+
**Result:** AI automatically queried both controllers and provided:
280+
281+
- Today: 5.44 kWh total
282+
- Yesterday: 6.12 kWh total
283+
- Difference: -0.68 kWh (11% less, likely due to weather)
284+
285+
**Key Takeaway:** Comparative analysis without writing queries or opening dashboards.
286+
287+
### Example 4: Situational Awareness
288+
289+
**User Query:** "what is the nearest vessel to satori right now"
290+
291+
**What Happened:**
292+
293+
- Queried AIS targets via SignalK
294+
- Got Satori's current position
295+
- Calculated distances using Haversine formula
296+
- Identified nearest vessel: MMSI 338311884, only 51 meters away
297+
298+
**Key Takeaway:** Complex spatial calculations and contextual analysis from simple natural language query.
299+
300+
### Example 5: Anomaly Detection
301+
302+
**User Query:** "how is satori doing? check for the past three weeks for any anomolies"
303+
304+
**What Happened:**
305+
306+
- Found active "Aft bilge has water" alarm
307+
- Queried 3 weeks of historical data (bilge sensors, battery, power)
308+
- User clarified alarm was brief/false
309+
- AI provided context showing no pattern of issues
310+
311+
**Key Takeaway:** Combines real-time alarms with historical patterns to distinguish false alarms from real problems.
312+
313+
### Common Query Patterns Observed
314+
315+
1. **Morning check-ins:** "How is Satori?" - overnight charging, weather
316+
2. **Comparative analysis:** "Today vs yesterday" - solar, power consumption
317+
3. **Troubleshooting:** Checking alarms, investigating anomalies
318+
4. **Environmental monitoring:** Temperature, humidity trends
319+
5. **Situational awareness:** Nearby vessels, position data
320+
321+
### Most Frequently Accessed SignalK Paths
322+
323+
- `electrical.batteries.*.voltage`
324+
- `electrical.batteries.*.capacity.stateOfCharge`
325+
- `electrical.solar.*.yieldToday`
326+
- `environment.inside.temperature`
327+
- `environment.inside.humidity`
328+
- `environment.bilge.*.flood`
329+
- `navigation.position`
330+
- `navigation.speedOverGround`
331+
332+
### The "Satori Effect"
333+
334+
Users develop a conversational relationship with their boat. Instead of "checking systems," they're "asking how Satori is doing" - a fundamentally different interaction model that's more intuitive and human.

0 commit comments

Comments
 (0)