Open Personality MCP Server
Creates and manages personality profiles using a 12-facet model based on 33 academic frameworks, stores them as OpenClaw-compatible SOUL.md/IDENTITY.md, and supports progressive profiling with confidence tracking.
README
Open Personality
Create personality profiles and output them as OpenClaw-compatible SOUL.md / IDENTITY.md.
12-facet profiling based on 33 academic personality frameworks.
No API key required. Fully local. MIT License.
Architecture — Who Does What?
AI Agent (Claude, Cursor, Gemini, etc.) MCP Server (@openpersonality)
┌──────────────────────────────────┐ ┌─────────────────────────────┐
│ - Analyzes conversation │ │ - Stores profiles │
│ - Estimates facet values (a/b) │ ──→ │ - Merges confidence scores │
│ - Determines confidence (0-1) │ │ - Detects drift │
│ │ ←── │ - Generates SOUL.md │
└──────────────────────────────────┘ └─────────────────────────────┘
The MCP server does NOT call any external APIs or LLMs. Facet estimation is the responsibility of the connected AI agent.
Features
- 12-Facet Personality Profiling — Scientific personality structure based on 33 academic frameworks
- Progressive Profile — Profiles grow autonomously through conversation (agents detect signals and update automatically)
- OpenClaw Compatible — Generates SOUL.md / IDENTITY.md in OpenClaw format
- MCP Server — Works with all major AI agent platforms via stdio transport
- Confidence Merge — Bayesian-style confidence tracking with drift detection
- Bilingual — English and Japanese support
Packages
| Package | Description |
|---|---|
@openpersonality/core |
Core logic: facets, templates, confidence merge, validation, data |
@openpersonality/mcp-server |
MCP Server (stdio): 6 tools + 3 resources + 2 prompts |
Installation
Claude Desktop
Edit claude_desktop_config.json:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
{
"mcpServers": {
"openpersonality": {
"command": "npx",
"args": ["-y", "@openpersonality/mcp-server"]
}
}
}
Restart Claude Desktop after editing.
Claude Code (CLI)
claude mcp add openpersonality -- npx -y @openpersonality/mcp-server
Or add to .mcp.json in your project root for team sharing:
{
"mcpServers": {
"openpersonality": {
"command": "npx",
"args": ["-y", "@openpersonality/mcp-server"]
}
}
}
Cursor
Edit ~/.cursor/mcp.json (global) or <project>/.cursor/mcp.json (project):
{
"mcpServers": {
"openpersonality": {
"command": "npx",
"args": ["-y", "@openpersonality/mcp-server"]
}
}
}
Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"openpersonality": {
"command": "npx",
"args": ["-y", "@openpersonality/mcp-server"]
}
}
}
VS Code (GitHub Copilot)
Create .vscode/mcp.json in your project:
{
"servers": {
"openpersonality": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@openpersonality/mcp-server"]
}
}
}
Note: VS Code uses
"servers"(not"mcpServers") and requires a"type"field.
Gemini CLI
Edit ~/.gemini/settings.json:
{
"mcpServers": {
"openpersonality": {
"command": "npx",
"args": ["-y", "@openpersonality/mcp-server"]
}
}
}
Or use the CLI:
gemini mcp add openpersonality -- npx -y @openpersonality/mcp-server
OpenAI Agents SDK (Python)
import asyncio
from agents import Agent, Runner
from agents.mcp import MCPServerStdio
async def main():
async with MCPServerStdio(
name="Open Personality",
params={
"command": "npx",
"args": ["-y", "@openpersonality/mcp-server"],
},
) as server:
agent = Agent(
name="Personality Assistant",
instructions="You help users create and manage personality profiles.",
mcp_servers=[server],
)
result = await Runner.run(agent, "Create a personality profile for me.")
print(result.final_output)
asyncio.run(main())
Quick Start — Progressive Profiling
Step 1: Seed (first interaction)
create_profile(name: "Alice", external_id: "discord:123", language: "ja")
languageis set at creation and persists for all template generation (SOUL.md / IDENTITY.md).
Step 2: Grow (after a few conversations)
update_profile(external_id: "discord:123", facets: {
"facet_8": { "value": "b", "confidence": 0.3 }, // Introvert signal
"facet_6": { "value": "b", "confidence": 0.4 } // Logical signal
})
Step 3: Refine (user self-report or strong signal)
update_profile(external_id: "discord:123", facets: {
"facet_12": { "value": "a", "confidence": 1.0 } // User confirmed: Planned
})
Notes:
soul_md/identity_mdare auto-generated from facets + demographics if omitted (recommended for most use cases). Provide them only for custom templates.- Confidence accumulates via Bayesian merge. Repeated low-confidence signals build to high confidence over time.
12 Facets
| Key | Category | A (value: "a") |
B (value: "b") |
|---|---|---|---|
facet_1 |
Communication | Assertive | Harmonious |
facet_2 |
Communication | Direct | Indirect |
facet_3 |
Communication | Leader | Follower |
facet_4 |
Values | Work-Focused | Life-Balance |
facet_5 |
Values | Risk-Taking | Risk-Avoidance |
facet_6 |
Thinking | Empathetic | Logical |
facet_7 |
Thinking | Abstract | Concrete |
facet_8 |
Personality | Extravert | Introvert |
facet_9 |
Personality | Emotional | Calm |
facet_10 |
Values | Open | Traditional |
facet_11 |
Values | Team | Solo |
facet_12 |
Thinking | Planned | Flexible |
Confidence levels:
| Range | Meaning | Display |
|---|---|---|
0.0 |
Unknown | — |
0.01–0.49 |
Tentative | ~Value |
0.50–0.99 |
Estimated | Value |
1.0 |
User-confirmed | Value ✓ |
Demographics (Optional)
Demographics give your profile a character identity. All fields are optional.
OpenClaw Standard — mapped to IDENTITY.md Header fields:
| Field | Purpose | Example |
|---|---|---|
creature |
Character type | "Fox", "Software Engineer" |
emoji |
Avatar shorthand | "🦊" |
vibe |
Overall impression | "calm & logical" |
nameis a required top-level parameter in ProfileData. It also exists in Demographics for template convenience, but ProfileData.name is the canonical source.avatar(OpenClaw standard) is planned for Phase 2.
OP Extension — Open Personality's extended fields for richer character creation:
| Field | Purpose | Example |
|---|---|---|
first_person |
Pronoun (important for Japanese) | "僕", "I" |
catchphrase |
Signature phrase | "なるほど" |
speaking_tone |
Communication style | "落ち着いて論理的" |
greeting |
Opening line | "Hey there!" |
gender |
Affects pronouns/tone | "male", "non-binary" |
age |
Background context | "30s" |
occupation |
Expertise/role | "Software Engineer" |
backstory |
Character background (1-2 sentences) | "Former teacher turned freelancer" |
Usage as an OpenClaw Skill
Open Personality works as an OpenClaw Skill for autonomous personality profiling. The agent detects personality signals during conversation and updates the profile automatically.
Setup
- Install the MCP server (see Installation above)
- Create a
SKILL.mdin your OpenClaw agent's skill directory:
---
user-invocable: true
disable-model-invocation: false
---
# Open Personality Skill
You have access to the Open Personality MCP tools for managing personality profiles.
## Session Start
At the beginning of each session, load the user's profile:
- Call `get_or_create_profile` with the user's external_id
- Include the returned SOUL.md in your conversation context
## Autonomous Profile Updates
During conversation, watch for personality signals:
- Communication style (assertive vs harmonious, direct vs indirect)
- Values (work-focused vs life-balance, risk-taking vs risk-avoidance)
- Thinking patterns (empathetic vs logical, abstract vs concrete)
- Personality traits (extravert vs introvert, emotional vs calm)
When you detect a signal:
1. Call `update_profile` with the facet value and low confidence (0.2-0.3)
2. The confidence merge algorithm handles accumulation over time
3. If a drift warning is returned, confirm with the user at a natural point
## Explicit Requests
- "Create my profile" → Call `create_profile` with inferred facets
- "Show my personality" → Call `get_profile` and display the SOUL.md
- "Update my profile" → Call `update_profile` with user-specified values (confidence: 1.0)
- Add a
references/facet-guide.mdwith the 12 facets for the agent to reference:
# Facet Guide
| # | Facet | A | B |
|---|---|---|---|
| 1 | Communication | Assertive | Harmonious |
| 2 | Expression | Direct | Indirect |
| 3 | Role | Leader | Follower |
| 4 | Work-Life | Work-Focused | Life-Balance |
| 5 | Risk | Risk-Taking | Risk-Avoidance |
| 6 | Judgment | Empathetic | Logical |
| 7 | Thinking | Abstract | Concrete |
| 8 | Energy | Extravert | Introvert |
| 9 | Emotion | Emotional | Calm |
| 10 | Openness | Open | Traditional |
| 11 | Collaboration | Team | Solo |
| 12 | Planning | Planned | Flexible |
How Progressive Profile Works
Session 1: User says "I prefer working alone"
→ Agent detects Solo signal → update_profile(facet_11: "b", confidence: 0.3)
Session 3: User says "I like to plan everything in advance"
→ Agent detects Planned signal → update_profile(facet_12: "a", confidence: 0.25)
Session 5: User mentions preferring solo work again
→ Confidence merge: 0.3 + 0.25 → 0.475 (approaching confirmed)
Over time: Profile grows without user ever explicitly asking for it.
MCP Tools
| Tool | Description |
|---|---|
create_profile |
Create a new profile (only name is required) |
update_profile |
Update facets/demographics with confidence merge and drift detection |
get_or_create_profile |
Get by external_id, or create if not found (for bots) |
get_profile |
Get profile data + SOUL.md + IDENTITY.md |
list_profiles |
List all local profiles with completeness info |
delete_profile |
Delete a profile |
Note on
soul_md/identity_md: These are auto-generated from facets + demographics if omitted (recommended for most use cases). Provide them only when you want to use a custom template generated by the AI agent itself.
MCP Resources
| URI | Description |
|---|---|
op://profiles/{id} |
Profile structured JSON |
op://profiles/{id}/soul |
SOUL.md text |
op://profiles/{id}/identity |
IDENTITY.md text |
MCP Prompts
| Prompt | Description |
|---|---|
onboarding |
Guides the AI through creating a user's first profile |
personalized_advice |
Generates advice tailored to the user's personality |
Output Example
SOUL.md
# Soul
## Core Truths
- Lead with conviction, deliver with care
- Plan first, explore within structure
- Think with data, connect with people
## Boundaries
- Words are chosen carefully, even in disagreement
- Decisions require data — intuition alone is not enough
- Risks are calculated, never reckless
## Vibe
Warm and polite tone. Uses "watashi" as first person. Firm opinions
delivered in soft packaging. Analytical mind with genuine enjoyment
of human connection.
## Facet Profile
| Facet | Value |
|---|---|
| Assertive ↔ Harmonious | Assertive |
| Direct ↔ Indirect | ~Indirect |
| Leader ↔ Follower | Leader |
| Work-Focused ↔ Life-Balance | Life-Balance |
| ... | ... |
Data Storage
All data is stored locally:
~/.openpersonality/
├── config.json
└── profiles/{id}/
├── profile.json # Structured data (source of truth)
├── SOUL.md # Generated personality document
└── IDENTITY.md # Generated identity document
No data is sent to external servers. Directory permissions are set to 0700 (owner-only).
Platform Compatibility
| Platform | Transport | Autonomous Updates |
|---|---|---|
| Claude Desktop / Claude Code | MCP (stdio) | Autonomous tool calling |
| Cursor / Windsurf / Cline | MCP (stdio) | Agent Mode |
| VS Code / GitHub Copilot | MCP (stdio) | Agent Mode |
| Gemini CLI | MCP (stdio) | Auto tool calling |
| OpenAI Agents SDK | MCP (stdio) | Agent loop |
| OpenClaw | MCP + Skill | Skill auto-invocation |
| ChatGPT | MCP (Streamable HTTP) | Planned |
Development
pnpm install # Install dependencies
pnpm build # Build all packages
pnpm typecheck # Type check
pnpm test # Run tests
pnpm clean # Clean build artifacts
Privacy
- All profile data stays on your machine (
~/.openpersonality/) - The MCP server makes zero external API calls
- No API key required — facet estimation is done by your AI agent's own LLM
- Demographics may contain personal information — profiles are stored with owner-only permissions
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。