Refract MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LLM_API_KEY | Yes | API key for the LLM endpoint. | |
| LLM_BASE_URL | No | Endpoint for the OpenAI-compatible LLM API; several, comma-separated, are tried in order. | https://api.openai.com/v1 |
| REFRACT_MODEL | No | Model for tagging, planning, drafting, revising and chat. | gpt-4o-mini |
| REFRACT_DATA_DIR | No | Folder with `profiles/`, `events/`, and `knowledge/`. | examples/demo |
| REFRACT_LANGUAGE | No | Language of insights: `ru` or `en`. | ru |
| REFRACT_VERIFIER_MODEL | No | Model for the review step and default judge; another family is better. | = REFRACT_MODEL |
| REFRACT_EMBEDDING_MODEL | No | Enables hybrid BM25 + dense retrieval. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Refract explains what a news item means for a specific subject (a company, a sole proprietor, a self-employed person or a private individual). Call list_profiles first, then analyze_news with a profile_id and either an event_id or the news title and text. Every statement in the result is tagged as a fact, the institution's view, an AI inference or a hypothesis, with its sources.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_profilesC | Subjects available for analysis: id, kind and a short summary. |
| get_profileC | The full profile of a subject as JSON. |
| news_feedA | Which stored news concern the subject, strongest links first — ranked by code, with the reason for each. since: YYYY-MM-DD. Use analyze_news on an event_id from the list to get the full insight. |
| list_eventsC | Latest news events in the store. |
| analyze_newsC | Run the agent: what the news means for the subject. Give an event_id, or a title and text. role: owner, ceo, cfo, chief_accountant, treasurer, entrepreneur, individual, other. language: ru or en. |
| ask_followupC | A follow-up question about an insight produced in this session. |
| get_traceB | How an insight was produced: every tool call and model call with timing, cost and review findings. |
| search_researchC | Search the institution's research documents. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Most tools are distinct (analyze_news, ask_followup, get_trace, search_research), but news_feed and list_events both surface news items and their boundary is fuzzy — one ranks by relevance to a subject, the other returns latest events, and news_feed's description even references an ambiguous 'list'. An agent must read carefully to pick between them, and analyze_news's event_id input could come from either.
Seven of eight tools follow a verb_noun pattern (list_events, get_profile, analyze_news, ask_followup, get_trace, search_research, list_profiles), which is predictable and readable. news_feed is the single noun-style outlier, a minor deviation.
Eight tools is well-scoped for a news-analysis agent service: discovery (list_profiles, list_events, search_research), retrieval (get_profile, news_feed), analysis (analyze_news, ask_followup), and observability (get_trace). Each earns its place without padding.
Core workflow (find subject → find events → analyze → follow up → inspect trace) is covered, but there is no way to fetch a single event's details directly, and ask_followup is explicitly session-bound, so prior insights cannot be retrieved in later sessions. Read-only profiles and no event ingestion may be intentional, but the surface has notable gaps.