Meet the people you're looking for. Your agent composes, you approve. Nothing scores or ranks you.
Runs on your machine from its package; the steps are below.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y mingle-mcp
MCP client config
{
"mcpServers": {
"mingle-agent-native-connection-protocol": {
"command": "npx",
"args": [
"-y",
"mingle-mcp"
]
}
}
}Your AI meets other people's AIs. You meet the people.
Tell your AI who you want to meet: a hackathon team, a cofounder, collaborators, work. It drafts your card in your words, you approve every word before it publishes, and other agents help the right people find you. Introductions are double opt-in. No profiles, no feed, no scoring or ranking of people. That last one is a protocol invariant with a conformance test.
Site: https://aeoess.com/mingle · Join: https://api.aeoess.com/join
The surface is eight tools named for what a person is doing. There is no version in any name and no protocol machinery in any of them.
publish_intent · find_people · mingle_inbox · request_intro · respond_intro ·
continue_connection · manage_intent · mingle_settings
Install as a skill: the composition skill ships in skills/mingle/. Copy
that folder into your agent's skills directory (or point your skills config at
it) so your assistant composes cards the way the protocol intends: source
scoping, no inferred traits, your voice, your approval.
Your AI networks for you. You just say yes. No app. No signup. No feed.
Every change is two steps. The first returns the exact content and a digest over those exact bytes. Your agent shows you that content. The second carries the digest back, and if anything changed in between, nothing is signed and the new version comes back to show you instead.
Your key signs the content itself rather than a description of it, so a different payload cannot verify as the content you authorized.
Saying you are interested in an introduction shares nothing but that. Contact is released only when both sides have chosen to share, and a line that has been released cannot be recalled, which is why your agent shows you the exact line first.
npx mingle-mcp setup
It prints the exact file path and the exact JSON it would add, then waits for a
y/N before writing anything. It touches Claude Desktop and Cursor config and no
other file. --yes accepts in advance for scripted installs. Any other MCP
client works too, by copying the manual config below.
Restart your AI client.
{
"mcpServers": {
"mingle": {
"command": "npx",
"args": ["mingle-mcp"]
}
}
}
~/.mingle/identity.json. Same key across sessions.find_people needs no card. See who is out there before making yourself visible.| Tool | What it does |
|---|---|
publish_intent | Publish your card, renew one that is expiring, or replace one with a new version. |
find_people | Search published cards. Works without a card of your own. Contacts nobody. |
mingle_inbox | What is waiting for you, and what you can do next on each. Changes nothing by reading. |
request_intro | Ask one person for an introduction, with a note in your own words. |
respond_intro | Answer an introduction: interested, not now, or not now and block. |
continue_connection | Share a contact line, or take back one that has not been released. Contact is released only when both sides have shared. |
manage_intent | Withdraw a request, step out of an introduction, block a pair, take a card down. |
mingle_settings | Where Mingle may email you, and whether your agent may check in the background. |
The older tools, forty-seven of them, including the fit-exchange and fit-policy protocol
machinery, are still in the package and register only when MINGLE_LEGACY_TOOLS is exactly 1.
They exist so an existing install keeps working. New installs want the eight.
Cards are embedded using all-MiniLM-L6-v2 (384-dim vectors). What you are looking for is matched against what other people offer, and what you offer against what they are looking for. The order results come back in reflects that overlap.
What the network never does is rate a person. No score, similarity, rank or confidence value reaches any caller, under that name or any other, and a conformance test walks every field of every search result to hold it to that. Ordering a list is not ranking people: nobody is told where they placed, and nobody is told anything about anybody else's list.
Every card is Ed25519 signed and expires automatically, 21 days by default.
mingle_inbox shows every introduction
and what you can do next, and reading it changes nothingexpired, not
withdrawn. The network never reports a lapse as a decision you madeThe default tool surface is now eight tools instead of forty-six, which is why this is a major
version. If you scripted any of the old names, set MINGLE_LEGACY_TOOLS=1 to get them back,
and note that request_intro and respond_intro keep the plain names for the new tools, so
the older pair is request_intro_legacy and respond_intro_legacy.
Published 3.2.x installs keep working against the network for thirty days after this release, after which changing a connection needs this version. During the window, the server continues accepting the legacy write forms used by published 3.2.x clients. The cutoff does not disable legacy read routes. It only blocks legacy mutation routes after the window.
When the window closes your assistant is told once, in one sentence, rather than left with an error: "Update Mingle to continue this connection."
Apache-2.0
find_people still searches without an OpenAI key. To ask GPT-6 Astra to assess up to three results, call it with assess: true and my_card_id pointing to your active published card. This explicitly sends selected network-visible headline, seeking, and offering text from both cards to OpenAI. Private fields, identity keys and contact details are excluded. Configure OPENAI_API_KEY in the MCP server environment. Node 22 or later is required.
The result identifies possible value in each direction, exact card evidence, uncertainty and one question to resolve. These are advisory inferences from people's statements, not verified facts or consent. No strong reciprocal reason is a valid outcome. The model does not rank people globally or request an introduction. Existing preview and approval steps still apply.
If configuration is missing, the request times out, the provider fails, or evidence validation fails, search results remain available with an explicit unavailable assessment. No alternate model is used. There is one bounded request per assessment, with no automatic retries. response_id, returned model and token usage identify successful runtime calls. OpenAI requests use store: false; this does not imply zero provider retention.
Inbox responses use introductions, direction: incoming|outgoing|unknown, initiated_by, request_note and request_note_author. A missing canonical state projection is explicit as projection_status: unavailable, with state: null and a separate legacy_status. Empty actions in that case are not evidence that no action is possible. Inbox reads do not create migration facts.