One button. One person.
Zero small talk.
Miss U More does exactly one thing: it tells the person you miss that you're thinking of them. No feed, no likes, no group chat that needs managing. You tap. They know.
Start missing someone
We'll email you a sign-in link β no password needed.
How it works
-
1
Name your person. One email address. Exactly one β that's the whole point.
-
2
They name you back. When you've named each other, you both light up green. Nobody gets notified by a stranger, ever.
-
3
Tap the button. They get it right away β on their phone, their desktop, their browser. Then they tap back, and now it's a contest.
See it in action
One button, the same everywhere. These are real screenshots of the app running on a phone, tablet, desktop, and Android.
Need one of these for a store listing or article? You can link directly to any image at missu.fyi/screenshots/.
Where you can get it
This is, we must stress, one button. It did not need a cross-platform strategy. It has one anyway: everywhere you could conceivably be when the missing strikes, the button is there β and they all share one score, so it never matters which one you reach for.
Right here, in your browserInstalls to your home screen or dock like a real appAvailable
Your AI assistantClaude, or anything else that speaks MCPAvailable
Chrome extensionThe score in your toolbar, one tap to sendAvailable
Firefox extensionThe score in your toolbar, one tap to sendAvailable
AndroidCurrently in closed testingSoon
iPhoneBuilt and waiting on App Store reviewSoon
Windows & macOS desktopLives in your tray or menu barWindows now
Yes, you can wire it up to your chatbot
It is objectively ridiculous to summon a large language model to press a button you could have pressed yourself. It should still be possible. Miss U More speaks MCP, with exactly two powers β read your score, and press the button. Nothing else. Any MCP host that supports OAuth works; point it here:
https://missu.fyi/v1/mcp
Devin CLIdevin mcp add missu https://missu.fyi/v1/mcp
devin mcp add missu https://missu.fyi/v1/mcp β it signs in on the spot.Claude Codeclaude mcp add -t http missu β¦ then /mcp β Connect
claude mcp add -t http missu https://missu.fyi/v1/mcp, then /mcp β Connect. (Claude insists on the extra step.)Claude appSettings β Connectors β Add custom connector
ChatGPTDeveloper mode β add an app with the URL
Mistral Le ChatIntelligence β Connectors β Custom MCP Connector
Gemini CLImcpServers in settings.json, then /mcp auth
{"missu": {"url": "https://missu.fyi/v1/mcp"}} under mcpServers in settings.json, then /mcp auth missu.Anything elseremote/custom MCP server + OAuth
Whichever host you use, your browser opens a Miss U More consent screen; once you allow it, the chatbot holds a token that only works for those two powers. See or revoke anything you've allowed under Settings β Connected assistants. Hosts that can't do OAuth can still use a pasted token from Settings β Assistants (MCP).
Or just call the API
Underneath all of it, missing someone is one authenticated POST. Mint a token in Settings β Assistants (MCP), send it as a bearer header, and you have an SDK in whatever language you already have open.
curltwo endpoints, one bearer header
# the score, connection and cooldown
curl https://missu.fyi/v1/me/status \
-H "Authorization: Bearer $MISSU_TOKEN"
# press the button
curl -X POST https://missu.fyi/v1/missu \
-H "Authorization: Bearer $MISSU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"source":"api"}'Pythonrequests.post(..., headers={"Authorization": ...})
import os, requests
r = requests.post(
"https://missu.fyi/v1/missu",
headers={"Authorization": f"Bearer {os.environ['MISSU_TOKEN']}"},
json={"source": "api"},
)
print(r.json()["status"]["miss"])JavaScript / Nodeawait fetch(..., { method: "POST", headers })
const res = await fetch("https://missu.fyi/v1/missu", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.MISSU_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ source: "api" }),
});
console.log(await res.json());RubyNet::HTTP.post with a Bearer header
require "net/http"
require "json"
res = Net::HTTP.post(
URI("https://missu.fyi/v1/missu"),
{ source: "api" }.to_json,
"Authorization" => "Bearer #{ENV['MISSU_TOKEN']}",
"Content-Type" => "application/json",
)
puts JSON.parse(res.body)C# / .NETHttpClient with AuthenticationHeaderValue
using System.Net.Http.Headers;
using System.Net.Http.Json;
var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("MISSU_TOKEN"));
var res = await http.PostAsJsonAsync("https://missu.fyi/v1/missu", new { source = "api" });
Console.WriteLine(await res.Content.ReadAsStringAsync());Gohttp.NewRequest + req.Header.Set("Authorization", β¦)
req, _ := http.NewRequest("POST", "https://missu.fyi/v1/missu",
strings.NewReader(`{"source":"api"}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("MISSU_TOKEN"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)PHPfile_get_contents with a stream context
$res = file_get_contents("https://missu.fyi/v1/missu", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("MISSU_TOKEN") . "\r\nContent-Type: application/json",
"content" => json_encode(["source" => "api"]),
],
]));
echo $res;Rustreqwest client .bearer_auth(token)
let res = reqwest::Client::new()
.post("https://missu.fyi/v1/missu")
.bearer_auth(std::env::var("MISSU_TOKEN")?)
.json(&serde_json::json!({ "source": "api" }))
.send()
.await?;JavaHttpClient.newHttpClient().send(...)
var req = HttpRequest.newBuilder(URI.create("https://missu.fyi/v1/missu"))
.header("Authorization", "Bearer " + System.getenv("MISSU_TOKEN"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"source\":\"api\"}"))
.build();
var res = HttpClient.newHttpClient().send(req, BodyHandlers.ofString());PowerShellInvoke-RestMethod -Authentication Bearer
Invoke-RestMethod -Method Post https://missu.fyi/v1/missu `
-Headers @{ Authorization = "Bearer $env:MISSU_TOKEN" } `
-ContentType application/json `
-Body '{"source":"api"}'Every one of those does the same single thing, which is the point. The token acts as you for those two endpoints and nothing else; revoke it any time from Settings.