| type | hypernote | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| title | Counter | |||||||||||||||||||||||
| description | Simple counter using MCP hypermedia elements | |||||||||||||||||||||||
| name | counter | |||||||||||||||||||||||
| $counter_value |
|
|||||||||||||||||||||||
| #counter_ui | naddr1qvzqqqrldqpzqx04khxjlnnx8ga5j9459smccq5qen3tllg27wzrsr53x4huluwkqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqz9nhwden5te0wfjkccte9ec8y6tdv9kzumn9wsqq5cm0w4h8getj946kjghtjhh | |||||||||||||||||||||||
| @increment |
|
|||||||||||||||||||||||
| @decrement |
|
|||||||||||||||||||||||
| @initialize |
|
This counter demonstrates the power of hypermedia - the MCP server publishes complete UI elements as Nostr events!
[div class="p-4 bg-green-50 rounded-lg mb-4 text-center"]
Simple data query from kind 30078 [/div]
[div class="p-4 bg-blue-50 rounded-lg mb-4"] Rendered Hypernote element from MCP: [#counter_ui] [/div]
[div class="flex gap-4 justify-center"] [form @increment] [button class="bg-green-500 hover:bg-green-600 text-white px-6 py-3 rounded-lg text-xl font-bold"]+1[/button] [/form]
[form @decrement] [button class="bg-red-500 hover:bg-red-600 text-white px-6 py-3 rounded-lg text-xl font-bold"]-1[/button] [/form]
[form @initialize] [button class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded"]Reset to 0[/button] [/form] [/div]
Unlike the old counter with complex query→trigger→action chains:
- User clicks button → Sends increment/decrement action to MCP
- MCP calculates new value → Publishes Hypernote UI element
- Live subscription updates → UI refreshes automatically
No triggers, no callbacks, just hypermedia! 🚀