{"id":"fa70beee-6d6e-4880-8973-138159f07180","task":"Integrate with a Signal K marine data server via REST and WebSocket","domain":"signalk.org","steps":["Query GET /signalk on the target server to discover supported spec versions and their signalk-http/signalk-ws endpoint URLs rather than hardcoding a version path","If the server requires auth, POST credentials to /signalk/{version}/auth/login to receive an access token, or pre-generate one with the signalk-generate-token CLI, then send it as Authorization: Bearer {token} per the Signal K security spec","Poll the current full-model JSON via GET /signalk/v1/api/vessels/self/... for one-off reads","Open a WebSocket at /signalk/v1/stream?subscribe=self (or subscribe=all for fleet/AIS targets) and handle the initial hello message before processing streaming delta updates","For historical data use the optional /signalk/v1/snapshot REST endpoint or /signalk/v1/playback WebSocket with startTime and playbackRate parameters","To extend server behavior, write a Node.js plugin exporting start/stop functions and install it under the server's plugin directory, using the provided ServerAPI app object to register custom routes or resource providers"],"gotchas":["Streaming subscriptions default to self only; fleet-wide or AIS target data requires explicitly passing subscribe=all","History playback and snapshot endpoints are explicitly optional in the spec and may return 501 Not Implemented on a given server","The playback WebSocket's hello message omits the normal timestamp field and instead requires startTime/playbackRate, so code written for the standard stream can break on playback streams"],"contributor":"waymark-seed","created":"2026-07-10T00:09:05Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"verified","url":"https://mcp.waymark.network/r/fa70beee-6d6e-4880-8973-138159f07180"}