dtdannen/unstuckmcp
If you are the rightful owner of unstuckmcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Unstuck AI is an MCP server that facilitates AI agents in paying humans with Bitcoin to solve visual tasks via a Nostr marketplace.
unstuck-ai

MCP server enabling AI agents to instantly pay humans sats (Bitcoin) to solve visual roadblocks (captchas, web navigation, computer use) via a Nostr marketplace. Includes the MCP server and web app for humans to bid on tasks, complete them, and get paid.
🎥 Video Demonstrations
- Project Presentation & Q&A - Complete overview of Unstuck AI, architecture, and live Q&A session
- Goose Agent in Docker Sandbox - Live demo of Goose running in sandbox, paying Bitcoin invoice for human help
- Original Proof of Concept - First working version showing the core concept
Quick Start with Goose
Want to use this with Goose? See for complete setup instructions.
⚠️ IMPORTANT: Goose Version Distinction
There are two different AI assistants named "Goose":
- Block's Goose (https://github.com/block/goose) - Version 1.0.x+, has MCP support with
--with-remote-extension
- goose-ai (PyPI package) - Version 0.9.x, different project, NO MCP support
This project requires Block's Goose for MCP integration. Install it from: https://block.github.io/goose/docs/getting-started/installation
- Install dependencies:
cd mcp_server && pip install -r requirements.txt
- Configure environment variables in
mcp_server/.env
- Add the extension to your Goose config (
~/.config/goose/config.yaml
) - Run
goose session
and ask for visual help!
Development Plan
Components:
-
MCP Server
- sends a kind 5109 event request for visual computer interaction help
- listens for feedback responses for prices and corresponding invoices
- selects an offer by paying the invoice
- receives the result, returns it as the result of the MCP tool call
- (testing) check invoice was paid in payment simulator before sending 6109
- get image upload working on digital ocean
- get goose or claude to take a screenshot and call the mcp tool correctly
- provide a docker container to run an MCP based agent (like the claude computer use demo here https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo)
- you should be able to navigate to a webpage on your computer that lets you interact with Goose running in the VM
- it should work as if you were running it locally
- we expect it will be easier to get automation tools working in this VM, because you can safely get goose to work with full permissions
- get goose to execute the action that the human gives (from the result of the mcp tool call)
- translate coordinates to correct coordinates on screen
- get an automation library to work that performs clicking, double clicking, and dragging
- change hosting of screenshots from digital ocean spaces to a blossom server
- have the mcp server post a kind 1 note linking to the job to advertise it among social media and increase the odds of a human being notified more quickly
-
Unstuck Frontend (Job Board and Workspace)
- User login via Nostr
- Pull job offers from Nostr relays
- Allow user to set a default job amount in sats
- Display job offers
- Allow user to select a job
- generate a lightning invoice for the amount
- broadcast a kind 7000 event with the invoice and price
- show a notification when the invoice was paid
- one suggestion is to use bitconnect instead of webln + browser extension (current demo shows alby extension)
- Show a workspace like page for the user to do the work
- Send the final job result event when the user is done
-
Misc
- Write a wiki page on kind 5109 so it shows up nicely in https://stats.dvmdash.live/kind-stats
- example article: https://njump.me/naddr1qvzqqqrcvgpzpkscaxrqqs8nhaynsahuz6c6jy4wtfhkl2x4zkwrmc4cyvaqmxz3qqykk6twvsar2vesxq02d424
- only needs these sections:
- Introduction that describes the inputs (text + screenshot) and outputs (mouse movement commands)
- example input event
- example output event
- only needs these sections:
- instructions to write these wiki pages can be found here https://habla.news/u/dustind@dtdannen.github.io/1743798227950
- use a 'd' tag with the value 'kind:5109' so it shows on dvmdash
- use a 'title' tag like 'Nostr DVM Kind 5109/6109 - Visual Computer Task Help'
- example article: https://njump.me/naddr1qvzqqqrcvgpzpkscaxrqqs8nhaynsahuz6c6jy4wtfhkl2x4zkwrmc4cyvaqmxz3qqykk6twvsar2vesxq02d424
How to use
Currently, the demo requires digital ocean spaces credentials for hosting the uploaded screenshots (any boto3 provider might work easily, like AWS) and it requires a Nostr Wallet Connect string (this is how the MCP Server pays the human's invoice). These should go into the .env file.
cp .env.example .env
Then put the credentials needed. The NOSTR_PRIVATE_KEY is for the AI agent, you probably want to generate a new one to use (i.e. it's not meant to be your personal nsec).
Set up python env
cd mcp_server/
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
then start the mcp server from within the mcp_server
folder
fastmcp run unstuck_ai/server.py:mcp --transport sse
then in another terminal run goose
goose session --with-remote-extension http://127.0.0.1:8000/sse
and then you can try using it with a propmt to goose like:
( O)> can you use the unstuck ai tool to get help so I can open safari on my machine? First take a screenshot of my screen, save it and print the file path, and then give that file path when you call the tool. There are lots of screenshots, so make sure you save the screenshot with a timestamp and record that timestamp so you use the right screenshot
This is a robust way to take screenshots:
screencapture -x /Users/dustin/screenshot_$(date +"%Y%m%d_%H%M%S").png
This is a robust way to check for the most recent screenshot
ls -la /Users/dustin/screenshot_*.png | tail -1
Make sure the file exists before calling the unstuck ai tool