Historis

One shared timeline for you and your AI.

От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноМожет изменять данные

Что умеет

  • Get Organization Context: Cold start briefing for an agent: organization, members, teams, frequent tags, active rules digest (call find_applicable_rules before creating events when any exist), dashboa
  • Create Event: Capture an event in Historis. Free-form text about anything that happened or needs to be remembered. Smart defaults: status=OPEN, occurred_at=now, origin=agent. If the org has active rul
  • Search Events: Search and filter events. Supports full-text search over content + resolution (accent-insensitive, stemmed, multi-word; quoted phrases supported, not substring), status (including 'need

Какие данные видит

Нужен ли аккаунт

Не нужен: сервер работает без входа

One shared timeline for you and your AI. Historis is an event-based CRM built MCP-first: your assistant reads and writes the same operational memory you do — contacts, events, follow-ups, rules — instead of forgetting everything between conversations.

What your agent can do

  • Capture events — log calls, meetings, decisions, and follow-ups as they happen, linked to the right people
  • Recall full context — pull a person's complete history, open items, and relationships before you reply
  • Search everything — full-text across contacts, events, and tags
  • Follow your rules — org-level markdown rules your agent checks before acting
  • Get a daily brief — one structured snapshot of what needs attention today

Who it's for

Solopreneurs, small teams, and multi-agent setups that need a shared, persistent memory their AI can actually act on — not a chat log, not a notes app. Works with Claude Desktop, Claude Code, and any MCP client.

Get started

Remote server with OAuth — no install: https://api.historis.app/mcp Docs & pricing: historis.app · Free tier available

Список инструментов сервера (15)

Технические названия из tools/list. Нужны только разработчикам.

get_organization_contextCold start briefing for an agent: organization, members, teams, frequent tags, active rules digest (call find_applicable_rules before creating events when any exist), dashboard stats, recent activity. Call once at the start of a conversation and reuse from conversation history — the same payload is good for the whole session unless the org changes (new member, new rule, etc.). The response always includes `updated_at` so the agent can decide when a refresh is worth the round trip. The `needs_attention` events carry a truncated `content` preview -- fetch the full body with manage_event action=get. On a new account the payload also carries an `onboarding` block (completed/total, next_step, and `guidance`): follow that guidance to proactively help the user set up — it is omitted once onboarding is complete.
create_eventCapture an event in Historis. Free-form text about anything that happened or needs to be remembered. Smart defaults: status=OPEN, occurred_at=now, origin=agent. If the org has active rules, call find_applicable_rules with the draft FIRST, apply the matching instructions, then pass their ids as applied_rule_ids. Optional linking to persons (auto-create if missing), tags, parent event, and existing related events. Set due_date / follow_up_date (YYYY-MM-DD) when the text carries a deadline so it surfaces in get_daily_brief. Idempotent on (source_type, source_id): if an event was already captured for that external id, the existing one is returned instead of a duplicate — always set both when ingesting from an external source so re-running a sync is safe.
search_eventsSearch and filter events. Supports full-text search over content + resolution (accent-insensitive, stemmed, multi-word; quoted phrases supported, not substring), status (including 'needs_followup' shorthand), tags (match ANY by default, ALL via match_all_tags), person (linked-person name, matched across all pages), date range, source, related-to-event filter, symmetric deadline filters (due_after/due_before and due_today; follow_up_after/follow_up_before and follow_up_today — date-only YYYY-MM-DD, compared in UTC), updated_since/updated_until for incremental 'what changed since' re-fetch, and resolved_since/resolved_until for 'what was closed' windows (ISO timestamps). All filters are optional and compose. Returns { events, next_cursor }: each event is compact (includes due_date, follow_up_date and resolved_at). next_cursor is an opaque token present only when more results may exist -- pass it back as `cursor` to fetch the next page; it is null on the last page.
get_daily_briefAgent morning brief: a single structured snapshot of what needs attention today, computed over the org's visible events using UTC day boundaries (V1). Buckets: `overdue` (open work past its due_date/follow_up_date), `due_today` (due_date or follow_up_date is today), `upcoming` (due_date or follow_up_date within the next horizon_days), and optionally `stale` (OPEN events untouched for 7+ days). Each bucket is an array of compact events plus a count; the response also returns `generated_at`. Structured data only — the agent decides how to phrase the brief.
manage_eventSingle-event operations via `action`: get (fetch one event with persons, tags, related events); update (patch content/status/resolution, set or clear due_date/follow_up_date with an empty string, and add/remove related event links); delete; add_update (append a sub-event to a parent thread, optionally moving the parent's status; set source_type+source_id to make the append idempotent when ingesting from an external source); link_events (link/unlink two events via event_id + event_id_2); link_person (link/unlink a named person, auto-created if missing); link_tag (link/unlink a tag on an event via event_id + tag slug, auto-created if missing); thread (fetch parent + all sub-events ordered chronologically); batch_update_status (bulk status change via event_ids CSV — only OPEN/IN_PROGRESS rows are touched, never re-closes); close_loop (bulk-close all OPEN/IN_PROGRESS events matching a person_name and/or tag with a shared resolution).
search_or_create_personFind a person by name, optionally email; create if not found. Records can be individuals or companies (kind). When passing tags on an existing person, the tags are appended (upserted) so you can use this tool to attach classification tags after the fact. All other fields (kind, registration_number, vat_number, contact details) are ignored when the person already exists — use manage_person to update them.
search_personsDiscover contacts by full-text search across ALL their descriptive fields (name, notes, email, phone, address -- accent-insensitive, stemmed, not substring) and/or by the relationship graph. Filter by kind (individual/company) and by a role on linked contacts: with_role / without_role match a term (e.g. 'commercial') against each link's label (either direction) OR a tag on the linked contact. Example: kind=company, without_role="commercial" lists companies with no salesperson. Returns compact contacts (phone, a notes preview, tags, and their links) -- fetch the full record with get_person_context. Unlike search_or_create_person (exact name, get-or-create), this never creates.
get_person_contextFull context for a person: identity, tags, open events, recent closed events, summary stats. Combines history and summary into a single agent briefing. Each listed event carries `origin` (human vs agent, so you can tell your own writes from the user's) and a truncated `content` preview -- fetch the full body with manage_event action=get.
manage_personPerson operations via `action`: update (patch any field — name, kind, phone, email, notes, address, country, registration_number, vat_number, tags, visibility); delete.
manage_tagsTag operations via `action`: list (all tags with description and usage counter, ordered by usage descending — consult descriptions to pick the right existing tag before creating a new one); analyze_duplicates (detects pairs likely to be merged via plural form, Levenshtein distance ≤ 2, or diacritic-insensitive equality — capped at 50 pairs; pairs the user kept separate are excluded); update (set a tag's description — record what the tag means and when to apply it; stored as agent-written until a human edits it); merge (destructive, requires the owner role: atomically rewires event_tags + person_tags from from_slug to to_slug and deletes from_slug — on failure nothing is changed); keep_separate (requires the owner role: records that from_slug and to_slug are NOT duplicates so analyze_duplicates stops proposing the pair; order does not matter; reversible from the /tags page).
bulk_create_eventsBatch import up to 50 events from a JSON-encoded array. If the org has active rules, call find_applicable_rules on representative drafts first and apply the instructions yourself. Each item supports the same fields as create_event except parent_event_id, related_event_ids and applied_rule_ids (those are single-event operations and require manage_event:update or create_event for the threading/relations flow). Idempotent per (source_type, source_id): items already captured (in this batch or a previous run) are skipped, not duplicated — set both on every item when importing from an external source so an overlapping re-run is safe.
bulk_create_personsBatch-create up to 50 contacts from a JSON-encoded array -- the fast way to populate Historis when the user lists several people ("add my suppliers: Yamaha, Vandoren, Camac...") or pastes a contact list, instead of N search_or_create_person calls. Each item: {name, email?, phone?, kind?, notes?, tags?, visibility?}. A contact already in the org with the SAME email is skipped (not duplicated); a duplicated email within the same batch collapses to one. kind defaults to individual, visibility to organization. Returns a compact columnar result (created rows + a skipped breakdown).
find_applicable_rulesSearch the org's markdown rules relevant to a draft event (deterministic keyword + linked-person matching). Call BEFORE create_event, apply the returned instructions yourself, then pass the ids of the rules you applied as applied_rule_ids. Returns full bodies for the top matches (limit, default 5) plus a compact index of all other active rules.
manage_rulesMarkdown rule operations via `action`: list (titles/keywords/body excerpts); get (full body); search (free text over title+body); create (title, body markdown, keywords CSV, person_names CSV, optional team_name); update (merge-patch; keywords/person_names replace when provided, empty string clears; team_name changes scope, empty string makes it org-wide); toggle (active: bool); delete. Rules are instructions YOUR agent applies when creating events -- the server only stores and searches them. Use 3-8 specific single-word keywords (phrases are split; reuse existing org keywords and tag slugs). Rules without keywords or persons apply to every event. A rule is org-wide by default; scope it to a team with team_name and only that team's members (and the org owner) see and apply it.
manage_relationshipContact-to-contact links via `action`: list (a contact's links: the other contact, the relationship from this contact's side, and the link note); create (link two existing contacts by name -- label is the free-text type from person_name's side e.g. "salarie de", reverse_label the other side e.g. "employeur de", note a free comment on the link itself); update (edit the note by relationship_id); delete (by relationship_id). One link per pair of contacts -- enrich the rest in the note; change the type by deleting and recreating. Works the same whether each contact is an individual or a company.
Historis: подключить к Claude, ChatGPT, Cursor · Connectors.fun