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
No password β we'll email you a sign-in link.
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.
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 barSoon
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.
Who are you missing?