@pipeworx/mcp-pulse-verity 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/tools.json ADDED
@@ -0,0 +1,156 @@
1
+ [
2
+ {
3
+ "name": "pulse_signed_price",
4
+ "description": "The current CRYPTOGRAPHICALLY SIGNED index price for one crypto asset, from the Pulse Verity Index across thousands of assets and dozens of venues — this result carries a signature you can verify: pass it unchanged to pulse_verify_print to check it OFFLINE, with no network call, against Pulse's public key. Each print carries signature, kid, grade, the number of independent venues (sources), dispersion in basis points and a confidence interval. Grades: consensus (3+ venues) and blended (2) are settleable; indicative (1 venue) is NOT. Use it when a price has to be defensible — settlement, an audit trail, a dispute — not merely current. Requires a Pulse API key via _apiKey. Example: pulse_signed_price({ symbol: \"BTC\" }).",
5
+ "inputSchema": {
6
+ "type": "object",
7
+ "properties": {
8
+ "symbol": {
9
+ "type": "string",
10
+ "description": "Asset ticker as Pulse spells it, e.g. BTC, ETH, SOL. pulse_asset_catalog lists coverage."
11
+ },
12
+ "_apiKey": {
13
+ "type": "string",
14
+ "description": "Pulse Verity API key. Free and self-serve at https://thepulse.markets/developers (60 req/min, 25,000/month, no card)."
15
+ }
16
+ },
17
+ "required": [
18
+ "symbol"
19
+ ]
20
+ }
21
+ },
22
+ {
23
+ "name": "pulse_signed_batch",
24
+ "description": "Signed index prices for up to 100 crypto assets in ONE call — each row carries its own signature you can verify individually with pulse_verify_print, offline, with no network call, not just the batch as a whole. Use this instead of looping pulse_signed_price: it is one request against the rate limit and every observation still carries its own signature, grade, venue count and interval. Symbols Pulse does not serve come back named in not_served rather than silently missing. Requires a Pulse API key via _apiKey. Example: pulse_signed_batch({ symbols: [\"BTC\", \"ETH\", \"SOL\"] }).",
25
+ "inputSchema": {
26
+ "type": "object",
27
+ "properties": {
28
+ "symbols": {
29
+ "type": "array",
30
+ "items": {
31
+ "type": "string"
32
+ },
33
+ "description": "Up to 100 tickers. A comma-separated string is also accepted."
34
+ },
35
+ "_apiKey": {
36
+ "type": "string",
37
+ "description": "Pulse Verity API key. Free and self-serve at https://thepulse.markets/developers (60 req/min, 25,000/month, no card)."
38
+ }
39
+ },
40
+ "required": [
41
+ "symbols"
42
+ ]
43
+ }
44
+ },
45
+ {
46
+ "name": "pulse_settlement_print",
47
+ "description": "The signed index print Pulse RECORDED nearest a past moment — the tool for settling a contract, pricing an option at expiry, or reconstructing what an asset was worth at a specific timestamp. Returns the observation with its original signature intact — verify it offline with pulse_verify_print, no network call — plus delta_ms, the distance between the time you asked for and the print actually returned; it is the nearest recorded print, never a price synthesised at your exact instant. Accepts ISO-8601 or epoch milliseconds. Requires a Pulse API key via _apiKey. Example: pulse_settlement_print({ symbol: \"BTC\", at: \"2026-09-16T21:41:46.000Z\" }).",
48
+ "inputSchema": {
49
+ "type": "object",
50
+ "properties": {
51
+ "symbol": {
52
+ "type": "string",
53
+ "description": "Asset ticker, e.g. BTC."
54
+ },
55
+ "at": {
56
+ "type": "string",
57
+ "description": "The moment to price, as ISO-8601 (2026-09-16T21:41:46.000Z) or epoch milliseconds."
58
+ },
59
+ "_apiKey": {
60
+ "type": "string",
61
+ "description": "Pulse Verity API key. Free and self-serve at https://thepulse.markets/developers (60 req/min, 25,000/month, no card)."
62
+ }
63
+ },
64
+ "required": [
65
+ "symbol",
66
+ "at"
67
+ ]
68
+ }
69
+ },
70
+ {
71
+ "name": "pulse_verify_print",
72
+ "description": "Check whether a Pulse signed price print is authentic and unaltered — pass a print back exactly as a Pulse tool returned it and this recomputes the ECDSA P-256 / SHA-256 signature over the canonical string, entirely OFFLINE with no network call to Pulse. WHAT A valid:true RESULT PROVES: that Pulse asserted this exact price, for this symbol, at this timestamp, at this grade, and that nobody altered any of those fields in transit — it detects a single changed digit of price or a one-millisecond shift in the timestamp. WHAT IT DOES NOT PROVE: that the price is CORRECT or reflects the true market — this checks Pulse's signature, not the world, so a print can verify perfectly and still be a price Pulse itself got wrong. The verification is computed here, not asked of Pulse, so Pulse cannot vouch for a print it never signed and an offline or compromised source cannot turn an invalid print into a valid one. Needs NO API key. Example: pulse_verify_print({ symbol: \"BTC\", priceText: \"76051.0676303142\", price: 76051.0676303142, at: \"2026-09-16T23:39:30.524Z\", grade: \"consensus\", signature: \"wiD005d9...\", kid: \"pvi-Sl40p5Gj2t_-JyKUhxyg\" }).",
73
+ "inputSchema": {
74
+ "type": "object",
75
+ "properties": {
76
+ "symbol": {
77
+ "type": "string",
78
+ "description": "From the print, unchanged."
79
+ },
80
+ "price": {
81
+ "type": "number",
82
+ "description": "From the print. Used only if priceText is absent."
83
+ },
84
+ "priceText": {
85
+ "type": "string",
86
+ "description": "The price EXACTLY as Pulse served it. This is what was signed — prefer it always."
87
+ },
88
+ "at": {
89
+ "type": "string",
90
+ "description": "From the print, unchanged. A 1ms difference invalidates the signature."
91
+ },
92
+ "grade": {
93
+ "type": "string",
94
+ "description": "From the print: consensus, blended or indicative."
95
+ },
96
+ "signature": {
97
+ "type": "string",
98
+ "description": "Base64 signature from the print."
99
+ },
100
+ "kid": {
101
+ "type": "string",
102
+ "description": "Key id from the print; selects which public key to check against."
103
+ },
104
+ "sig": {
105
+ "type": "string",
106
+ "description": "Scheme tag from the print (pulse-index-v1)."
107
+ }
108
+ },
109
+ "required": [
110
+ "symbol",
111
+ "at",
112
+ "grade",
113
+ "signature"
114
+ ]
115
+ }
116
+ },
117
+ {
118
+ "name": "pulse_asset_catalog",
119
+ "description": "Which crypto assets the Pulse Verity Index covers, at what grade, across how many venues, and how fast each one actually updates — cadence measured per asset from its own update intervals rather than from a poll schedule. Filter by coverage band (real-time, five-second, ten-second, slow, unavailable) or status (consensus, blended, indicative). Call this to find out whether a symbol is covered, and how thin it is, before quoting it. NOTE: these rows are UNSIGNED, including their prices — read a verifiable number through pulse_signed_price. Requires a Pulse API key via _apiKey. Example: pulse_asset_catalog({ limit: 5 }).",
120
+ "inputSchema": {
121
+ "type": "object",
122
+ "properties": {
123
+ "limit": {
124
+ "type": "number",
125
+ "description": "Rows to return, max 500 (default 50)."
126
+ },
127
+ "offset": {
128
+ "type": "number",
129
+ "description": "Row offset for paging."
130
+ },
131
+ "band": {
132
+ "type": "string",
133
+ "description": "Cadence band: real-time, five-second, ten-second, slow, unavailable."
134
+ },
135
+ "status": {
136
+ "type": "string",
137
+ "description": "Coverage grade: consensus, blended, indicative."
138
+ },
139
+ "_apiKey": {
140
+ "type": "string",
141
+ "description": "Pulse Verity API key. Free and self-serve at https://thepulse.markets/developers (60 req/min, 25,000/month, no card)."
142
+ }
143
+ },
144
+ "required": []
145
+ }
146
+ },
147
+ {
148
+ "name": "pulse_key_ring",
149
+ "description": "The public keys Pulse signs its price prints with, as PEM and JWK, plus the signing algorithm and the exact canonical string format — everything needed to verify a signed print yourself, OFFLINE, with no network call to Pulse. Use it to write your own verifier, or to audit what pulse_verify_print (this pack's ready-made offline checker) is checking against. Needs NO API key. Example: pulse_key_ring({}).",
150
+ "inputSchema": {
151
+ "type": "object",
152
+ "properties": {},
153
+ "required": []
154
+ }
155
+ }
156
+ ]