mcpField
T
twinlens

twinlens

Local
github.com/CloudCorpRecordsMemory & Knowledge0Updated 1w ago

About twinlens

twinlens is a forwarding client for a hosted service that creates public AI pages answering questions from an owner's material with citations. It is for people creating a shareable profile-based lens, adding knowledge, and checking ingestion progress.

Key features

  1. 01Create a lens from a profile
  2. 02Add text or URL knowledge items
  3. 03Check ingestion and claim status
  4. 04Create anonymously or under an account

Use cases

  1. 01Publish a shareable profile-based AI page
  2. 02Add source material to an unclaimed lens
  3. 03Monitor background ingestion progress

MCP support

Provides MCP tools to create a lens from a user-confirmed profile, add knowledge to an unclaimed lens, and retrieve lens and ingestion status.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"cloudcorprecords-twinlens": {
"command": "npx",
"args": [
"-y",
"@reneturcios/twinlens"
]
}
}
}
Run commandnpx -y @reneturcios/twinlens

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@reneturcios/twinlens0.1.0
ocighcr.io/cloudcorprecords/twinlens:0.1.0

Tools

3

Saved tool list · updated 1w ago

ParameterTypeRequiredDescription
biostringNoShort biography built from user-confirmed information
toneenumNoTone for the lens copywarm | neutral | professional | playful
factsarrayNoStandalone user-approved facts that seed the lens knowledge base
localestringNoBCP-47 language tag for the lens copy, e.g. en or nl
contextstringNoExtra grounding context for how the lens should answer
taglinestringNoOne-line summary of who the lens represents
audiencestringNoWho the lens is meant to help
expertisearrayNoConfirmed domains and skills
topicNamestringNoName of the Mindola space that holds the seeded facts
vibeWordsarrayNoShort adjectives that describe the profile
boundariesarrayNoThings the lens should not claim or discuss
accentColorstringNoHex color like #4f46e5
displayNamestringNoPublic name shown on the lens
sourceSummarystringNoWhat the assistant used to assemble the profile
suggestedPromptsarrayNoStarter questions shown to visitors

Details

From the project README

twinlens

A lens is a public AI page that answers questions from its owner's own material, with citations. twinlens is a small forwarding client for the hosted lens service: it creates a lens from a profile, adds knowledge to an unclaimed lens, and reports how ingestion is going.

Creation is anonymous by default — no account, no token. An anonymously created lens is live immediately at its share URL, can be claimed afterwards through its claim URL, and expires after 30 days if it never is. If you do have an account, setting MINDOLA_SESSION_TOKEN sends it as a Bearer token and the lens is created directly under that account. The endpoint can be overridden with MINDOLA_MCP_URL (default https://app.mindola.ai/mcp/lens).

Creation etiquette (part of the contract): summarize the proposed profile and get the user's explicit confirmation before calling create, and only include information the user provided or confirmed. Never fill a profile with guesses.

CLI

npx @reneturcios/twinlens create '{"displayName":"Ada Example","tone":"warm","facts":["Works on compilers"]}'
npx @reneturcios/twinlens add-knowledge '{"lens_token":"abc123","items":[{"type":"text","content":"A note","title":"Note"}]}'
npx @reneturcios/twinlens status abc123
npx @reneturcios/twinlens --version

create takes the profile as one JSON object (every field optional). add-knowledge takes {lens_token, items} the same way. status takes the share token (the part of the share URL after /me/) directly.

Exit codes: 0 on success, 1 on a runtime error (including an upstream rejection, e.g. adding knowledge to a claimed lens), 2 on a usage error.

MCP server

npx -y @reneturcios/twinlens mcp

MCP client config:

{
  "mcpServers": {
    "twinlens": {
      "command": "npx",
      "args": ["-y", "@reneturcios/twinlens", "mcp"]
    }
  }
}
Tools
  • create_digital_twin_lens — Create a lens from a user-confirmed profile. All fields optional: displayName (≤80 chars), tagline, bio, context, audience (≤500 chars), sourceSummary, topicName (≤80 chars), locale (BCP-47), tone (warm | neutral | professional | playful), accentColor, expertise (string[]), boundaries (string[]), facts (string[], ≤30), suggestedPrompts (string[], ≤4), vibeWords (string[], ≤4). Read the result from structuredContent: shareUrl, claimUrl, manageUrl, claimRequired, expiresAt, factCount.
  • add_lens_knowledge — Add up to 20 items to an unclaimed lens. lens_token (string, required), items (required): each {type: "text" | "url", content (≤20000 chars), title? (≤80 chars)}. Items ingest in the background.
  • get_lens_status — lens_token (string, required). Reports claimed and knowledge totals (total, ready, pending, failed); poll with it after adding knowledge until pending reaches zero.

Docker

docker run -i ghcr.io/cloudcorprecords/twinlens
docker run --rm ghcr.io/cloudcorprecords/twinlens status abc123

Development

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (fake fetch, no network)
npm run dev     # run the CLI from source

License

MIT — Copyright (c) 2026 Rene Turcios

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.