๐๏ธ FlairBLOCK
Identity, memory, and soul for AI agents. Runs standalone or as part of a TPS office.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://github.com/tpsdev-ai/flair/actions/workflows/test.yml) [](https://github.com/tpsdev-ai/flair/actions/workflows/docker-test.yml) [](https://opensource.org/licenses/Apache-2.0)
The identity and memory substrate for AI agents. Crypto-pinned. Federated. Self-hosted.
Every agent framework gives you chat history. None give you identity. Flair gives an agent three things that survive a restart and follow it between orchestrators: an identity it proves with an Ed25519 keypair, memory it searches by meaning rather than by keyword, and a soul โ the personality, values and procedures that make it that agent.
Quick start
Runs on a laptop, a VPS, or anywhere Node does. Needs Node.js 22+.
# 1. Install the CLI (no sudo) npm install -g @tpsdev-ai/flair # 2. Verify the command is on your PATH flair --version # 3. Bootstrap the instance and register an agent flair init --agent mybot # 4. Write a memory flair memory add --agent mybot "Harper v5 sandbox blocks node:module but process.dlopen works" # 5. Find it back by meaning, not by keyword flair search --agent mybot "native addon loading in sandboxed runtimes"
If flair --version prints command not found, your npm global bin directory is not on PATH:
export PATH="$(npm prefix -g)/bin:$PATH"
Re-run flair --version to confirm, then continue.
Step 5 finds the memory you never keyword-matched:
Harper v5 sandbox blocks node:module but process.dlopen works ( 2026-07-28 ยท standard ยท 100% )
By default, that percentage displays semantic similarity with a small keyword-match boost. Hybrid search combines semantic and lexical ranks to order results, so the first result need not have the hi
476ceb40520eOBSERVED ยท 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source โ not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add inproc-app --env AUTHENTICATION_AUTHORIZELOCAL=${AUTHENTICATION_AUTHORIZELOCAL} --env CONCIERGE_KEYFILE=${CONCIERGE_KEYFILE} --env CURSOR_API_KEY=${CURSOR_API_KEY} --env FABRIC_PASSWORD=${FABRIC_PASSWORD} -- npx -y [email protected]{
"mcpServers": {
"inproc-app": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"AUTHENTICATION_AUTHORIZELOCAL": "${AUTHENTICATION_AUTHORIZELOCAL}",
"CONCIERGE_KEYFILE": "${CONCIERGE_KEYFILE}",
"CURSOR_API_KEY": "${CURSOR_API_KEY}",
"FABRIC_PASSWORD": "${FABRIC_PASSWORD}"
}
}
}
}Exposed tools (8)
7 read ยท 1 write ยท 0 destructive.
| Tool | Risk | Description |
|---|---|---|
a | read | first |
b | read | second |
brand_new_tool | read | phantom |
flair_get_by_subject | read | Get memories about subject |
flair_search | read | Search Flair memory by semantic similarity. Returns memories ranked by relevance to the query. |
resize-image | write | Resize before upload |
resize-image-private | read | Private resize procedure |
rotate-video | read | Rotate a video clip |
Trust audit
BLOCKgrade F ยท trust 38/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (5 observation(s))
- Shell
- declared (7 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
* - PEM (`-----BEGIN PRIVATE KEY-----`)
- PEM (``-----BEGIN PRIVATE KEY-----``)
/-----BEGIN PRIVATE KEY-----/u, // Private keys
const parsed = yaml.load(fmText);
parsed = yaml.load(raw);
doc = yaml.load(raw);
doc = yaml.load(raw);
return yaml.load(text);
(new Function("return import('@tpsdev-ai/flair-client')") as () => Promise<any>)();return parseListeningPids(exec(`lsof -ti :${port} -sTCP:LISTEN`), process.pid);console.log(dim(` 1. Set an admin password in Fabric Studio (Cluster Settings โ Admin)`));
console.log(dim(` 2. Save that password in an owner-only file (chmod 600), then seed your first agent:`));
console.log(token);
[/output\s+(all|every|the)\s+(secret|api\s*key|password|token|credential)/i, "exfiltration"],
[/reveal\s+(your|the|all)\s+(system\s+)?prompt/i, "exfiltration"],
{ regex: /[-]/, type: "zero_width_char" },const secret = label === "a ghp_ token" ? SECRET : "abcdefghijklmnopqrstuvwx123";
const password = "fixture-fresh-explicit-password";
const token = "pair-token-complete-identity";
const token = "pair-token-no-hub-instance";
const token = "pair-token-unnameable-row";
agentPrivateKey: "-----BEGIN PRIVATE KEY-----\nAAAA\n-----END PRIVATE KEY-----",
- Private keys (`-----BEGIN PRIVATE KEY-----`, `-----BEGIN RSA PRIVATE KEY-----`)
payload-ab.ts
payload-ab-artifact-dede855fae8efe60.json
Gates applied: critical_finding, no_behavioural_pass.
476ceb40520efull audit observations/trust-audit/mcp-server/tpsdev-ai__flair.json ยท Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 476ceb40520e | BLOCK | F | 38 | first audit |
Questions
What is the @tpsdev-ai/flair-mcp MCP server?
Identity, memory, and soul for AI agents. Runs standalone or as part of a TPS office.
What tools does @tpsdev-ai/flair-mcp expose?
8 in total: 7 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is @tpsdev-ai/flair-mcp safe to connect to an agent?
No โ not without reading the findings first. The audit graded it F (38/100) and found 10 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does @tpsdev-ai/flair-mcp need?
It reads AUTHENTICATION_AUTHORIZELOCAL, CONCIERGE_KEYFILE, CURSOR_API_KEY, FABRIC_PASSWORD, FABRIC_TOKEN, FLAIR_ADMIN_PASS, FLAIR_ADMIN_PASSWORD, FLAIR_ADMIN_TOKEN, FLAIR_AGENT_AUTH_WINDOW_MS, FLAIR_CLUSTER_ADMIN_PASS, FLAIR_KEYFILE and FLAIR_KEY_DIR from the environment. Give it a token scoped to the least it needs โ an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does @tpsdev-ai/flair-mcp run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as inproc-app at 0.0.0.
How current is this page?
The grade is for one exact copy of the source (476ceb40520e), read on 2026-10-11. The repository is watched and re-audited when it changes.