fn(·) anyfn · open-source

every Android app,
callable.

anyfn turns the apps already on your phone into tools any AI agent can call — Claude, Gemini, Cursor, GPT. No code changes. No SDK. Sixty seconds to set up.

The demo, in three steps

on your Mac · Claude Desktop
"Search TikTok for sunset hiking. Save the top 3 to my notes app."
on the phone · anyfn → TikTok
anyfn calls tiktok_search. TikTok opens. Search runs. Top results read back.
on the phone · anyfn → Google Keep
anyfn calls keep_create_note. Note appears. Saved.

Two unrelated apps. Zero developer cooperation. One sentence from you.

fn
anyfn
MCP bridge · ws://localhost:5174
204 functions
across 47 apps · last scan 2m ago
Bridge running
Claude Desktop connected · 1 client
ready · tap to scan again
TT
TikTok
tiktok_search · running
sunset hiking
Golden hour above Half Dome
@yosemiteclimber · 2.4M views
Sunset trail run in Kyoto
@keiko.runs · 890K views
The colors of Santorini at dusk
@greekisland · 1.1M views
K
Google Keep
keep_create_note · done
Sunset hiking inspo
1. Golden hour above Half Dome — @yosemiteclimber · 2.4M views
2. Sunset trail run in Kyoto — @keiko.runs · 890K views
3. The colors of Santorini at dusk — @greekisland · 1.1M views
✓ saved

What anyfn does, in four bullets.

Auto-discovers

Walks every installed app, snapshots its UI through Accessibility, asks an LLM what callable things it exposes. Once.

Persists locally

The function registry lives in SQLite on the device. Nothing leaves the phone unless you tell it to.

Speaks MCP + AppFunctions

One embedded server, one Android 16 exporter. Claude Desktop, Cursor, Gemini, and your own agent see the same tools.

Replays safely

UI Automator + Accessibility, with structured error recovery and per-call destructive-action confirmation.

The architecture.

┌─ External Agent ──────────────────────────────────────────────┐ Gemini on Android 16 · Claude Desktop · Cursor · GPT └──────────────────────────────┬────────────────────────────────┘ │ MCP / AppFunctions ┌──────────────────────────────▼────────────────────────────────┐ anyfn Bridge (Ktor MCP server + AppFunctionService) └──────────────────────────────┬────────────────────────────────┘ ┌──────────────────────────────▼────────────────────────────────┐ Function Registry (Room / SQLite, on-device) └──────────┬────────────────────────────────────┬───────────────┘ │ │ ┌──────────▼─────────┐ ┌───────▼──────────┐ Scanner Invoker Accessibility + UI Automator + LLM inference state waiter └────────────────────┘ └──────────────────┘ │ ┌────────▼─────────────┐ │ Target apps │ │ unmodified │ └──────────────────────┘

Use it from Claude Desktop in 30 seconds.

$ adb forward tcp:5174 tcp:5174

# claude_desktop_config.json
{
  "mcpServers": {
    "anyfn": {
      "command": "wscat",
      "args": ["-c", "ws://localhost:5174/ws"]
    }
  }
}

What ships in v0.1.

9
apps stable
4
apps beta
200+
inferred functions
~$0.30
per full scan
0
telemetry events
MIT
licensed

What anyfn will not do.

Permanent strategic no.