lens

Create your digital twin: a public page that answers from your own material, with citations.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
93%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,027Tokens (tool definitions)
~3.4 KBTypical response size
Moderate attention impact (0.80% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "lens": {
      "url": "https://app.mindola.ai/mcp/lens"
    }
  }
}

Remote endpoints

https://app.mindola.ai/mcp/lensstreamable-http

What it can do

Tool inventory

Tools (3)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡create_digital_twin_lens(displayName, tagline, bio, context, audience, ...)

Create a shareable Mindola lens (AI clone) from a profile the user has approved in this conversation. Call this only after summarizing the proposed lens for the user and receiving explicit confirmation. Use only information the user provided or confirmed in the conversation; do not claim access to hidden memory, private chats, or external accounts.

Input Schema

{
  "type": "object",
  "properties": {
    "displayName": {
      "type": "string",
      "description": "The user's preferred public name for the lens, after they confirm it.",
      "maxLength": 80
    },
    "tagline": {
      "type": "string",
      "description": "A short one-line summary of what this lens represents.",
      "maxLength": 160
    },
    "bio": {
      "type": "string",
      "description": "A concise first-person or third-person biography assembled from user-confirmed information.",
      "maxLength": 2000
    },
    "context": {
      "type": "string",
      "description": "Extra grounding context for how the lens should answer. Use only information the user confirmed.",
      "maxLength": 4000
    },
    "audience": {
      "type": "string",
      "description": "Who this lens is intended to help or answer questions for.",
      "maxLength": 500
    },
    "sourceSummary": {
      "type": "string",
      "description": "Short note describing what ChatGPT used to assemble the profile, without exposing hidden chain-of-thought or unapproved private data.",
      "maxLength": 1500
    },
    "topicName": {
      "type": "string",
      "description": "The Mindola space name that will hold the seeded facts.",
      "maxLength": 80
    },
    "locale": {
      "type": "string",
      "description": "Optional BCP-47 locale for user-facing lens copy.",
      "maxLength": 32
    },
    "tone": {
      "type": "string",
      "enum": [
        "warm",
        "neutral",
        "professional",
        "playful"
      ],
      "description": "The visitor-facing tone of the lens."
    },
    "accentColor": {
      "type": "string",
      "description": "Optional hex color, for example #4f46e5.",
      "pattern": "^#[0-9a-fA-F]{6}$"
    },
    "expertise": {
      "type": "array",
      "description": "Specific domains, skills, or interests the user confirmed.",
      "maxItems": 12,
      "items": {
        "type": "string",
        "maxLength": 160
      }
    },
    "boundaries": {
      "type": "array",
      "description": "Things the lens should not claim, discuss, or answer beyond. Ask the user to confirm these before calling.",
      "maxItems": 12,
      "items": {
        "type": "string",
        "maxLength": 160
      }
    },
    "facts": {
      "type": "array",
      "description": "Concrete user-approved facts to seed the lens memory. Each item should stand alone.",
      "maxItems": 30,
      "items": {
        "type": "string",
        "maxLength": 320
      }
    },
    "suggestedPrompts": {
      "type": "array",
      "description": "Starter questions visitors can ask the lens.",
      "maxItems": 4,
      "items": {
        "type": "string",
        "maxLength": 120
      }
    },
    "vibeWords": {
      "type": "array",
      "description": "Up to four short adjectives for the lens profile.",
      "maxItems": 4,
      "items": {
        "type": "string",
        "maxLength": 24
      }
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "displayName": {
      "type": "string"
    },
    "topicName": {
      "type": "string"
    },
    "shareUrl": {
      "type": "string"
    },
    "claimUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "manageUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "claimRequired": {
      "type": "boolean"
    },
    "expiresAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "factCount": {
      "type": "number"
    },
    "suggestedPrompts": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "displayName",
    "topicName",
    "shareUrl",
    "claimUrl",
    "manageUrl",
    "claimRequired",
    "expiresAt",
    "factCount",
    "suggestedPrompts"
  ],
  "additionalProperties": false
}
🟡add_lens_knowledge(lens_token, items)

Add text notes or URLs to a Mindola lens created in this conversation (before it is claimed). Content runs through the standard ingest pipeline so the lens can answer from it, with citations.

Input Schema

{
  "type": "object",
  "properties": {
    "lens_token": {
      "type": "string",
      "description": "The token from the lens's share URL (the part after /me/)."
    },
    "items": {
      "type": "array",
      "maxItems": 20,
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "text",
              "url"
            ]
          },
          "content": {
            "type": "string",
            "maxLength": 20000
          },
          "title": {
            "type": "string",
            "maxLength": 80
          }
        },
        "required": [
          "type",
          "content"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "lens_token",
    "items"
  ],
  "additionalProperties": false
}
🟢get_lens_status(lens_token)

Check a Mindola lens: its share URL, whether it has been claimed, and how much of its knowledge has finished ingesting (ready / pending / failed).

Input Schema

{
  "type": "object",
  "properties": {
    "lens_token": {
      "type": "string",
      "description": "The token from the lens's share URL (the part after /me/)."
    }
  },
  "required": [
    "lens_token"
  ],
  "additionalProperties": false
}

Recommended Prompts

retrieve_data
Get details about [item] from lens
Expected tools: get_lens_status
fetch_info
Fetch [information type] using lens
Expected tools: get_lens_status

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded3 tools
verifiedversion not recorded3 tools