Opyt

Connector

The Opyt connector.

An MCP server at https://api.useopyt.com/mcp. It lets claude.ai, chatgpt.com and other MCP clients use the library Opyt builds on your Mac: search it, open an item, summarize it, see what is new, and put the sources behind an answer on one reader-view page. It can also save a link, follow a topic, add a person, remove an item, and invite or cut off a reader. Changes to the library are made by Opyt on your Mac: while you wait when the Mac is awake, otherwise when it is next on.

Endpointhttps://api.useopyt.com/mcp, MCP over Streamable HTTP
Sign-inOAuth 2.1 with PKCE and dynamic client registration, through your Google account. No client ID or secret to enter.
Google scopesopenid only
ToolsTwelve. Five Read: search, open, aggregate, latest, status. Seven Write: reader_view, share, unshare, hopper, forget, watch, add_oracle
Write toolsreader_view makes a page of sources on Opyt's server, where anyone with its link can comment. share makes an invite and unshare cuts one reader off. hopper saves a link, watch follows a topic, add_oracle adds a person and forget removes an item or stops following a person. Two are destructive: forget and unshare. No payments and no messages.
PriceFree. Opyt has no plans and takes no payments.
RequiresOpyt set up on a Mac (macOS only) and connected to the same Google account you sign in with here
RegionsNone set by Opyt
Age13 or older (terms)
Supporthello@useopyt.com

Updated 2026-10-13. Privacy policy: useopyt.com/privacy.

Before you start

Who it's for, and what it needs.

The connector is for people who use Opyt on a Mac and want to use their library from somewhere else: claude.ai or chatgpt.com in a browser or on a phone, or any MCP client that connects to remote servers. The library holds the posts, articles, papers and repositories Opyt collected for you: what you saved, and what the people you chose to follow published. The connector serves a copy of it, and only to you.

  • A Mac with Opyt set up. Only a local install builds a library, and local installs run on macOS only; Windows and Linux are not supported yet. There is no hosted Opyt that builds one for you. The Mac keeps the connector's copy current while it is awake.
  • A Google account. The same account signs in on the Mac (“connect Opyt to Google”) and in the connector. One Google account reads one library.
  • Nothing to pay. Opyt is free and MIT-licensed. The connector searches by keyword, matching the words of a query rather than its meaning.
  • Your client's own rules. chatgpt.com allows custom connectors only on paid plans, with developer mode switched on. Opyt sets no region restriction: the connector works wherever your client and Google sign-in do. You must be 13 or older.
  • Changes need your Mac. Saving a link, following a topic, adding a person and removing an item are made by Opyt on your Mac. With the Mac awake they happen while you wait. Otherwise they are kept for up to a week and made when it is next on. Setting Opyt up, connecting X or Substack, and choosing people from those you already follow still happen in the Opyt app on your Mac.

Setup

Set it up.

Three parts, in order: Opyt on your Mac, the link to your Google account, then the connector in your client.

1. Set up Opyt on your Mac

  1. In Claude Desktop, Claude Code, ChatGPT Desktop, Codex, Cursor or Windsurf on your Mac, paste the prompt from that app's tab at useopyt.com/#install. It installs Opyt.
  2. Quit and reopen the app, say “onboard”, and follow setup to the end.

2. Connect the library to Google

  1. When setup offers it, or any time after, say “connect Opyt to Google” in that same app. Opyt shows a code: enter it on Google's page and approve. This sign-in asks Google for the basic openid scope only.
  2. Opyt publishes the first copy of your library in the background, usually within a few minutes.

3a. Add the connector on claude.ai

  1. Click your name at the bottom-left corner, then Settings, then Connectors in the sidebar (some accounts list it under Customize). Click the + next to Connectors, then Add custom connector.
  2. Paste https://api.useopyt.com/mcp. It is an address to paste, not a page to visit. Name it Opyt if asked, leave Advanced settings alone (no client ID, no secret), and click Add.
  3. Click Connect. An Opyt page asks whether to allow Claude: click Allow Access. Then sign in with Google, with the same Google account as step 2. Your Google password goes only to Google.
  4. Start a new chat, click the + in the message box, choose Connectors, and turn Opyt on. A connector that is off in a chat can't be used in it, which is the step most people miss.

3b. Add the connector on chatgpt.com

  1. This needs a paid plan. Click your profile picture, then Settings, then Apps & Connectors, then Advanced, and switch Developer mode on. On some accounts the page is called Plugins and the switch sits under Security and login. Read the warning it shows: a custom connector runs someone else's code on your behalf.
  2. On that same page click Create (some accounts: New app). Name it Opyt, write any description, and paste https://api.useopyt.com/mcp into MCP server URL.
  3. Choose OAuth if it asks how to authenticate, then confirm. No client ID, no secret.
  4. An Opyt page asks whether to allow ChatGPT: click Allow Access. Then sign in with Google, with the same Google account as step 2.
  5. Start a new chat and switch Opyt on for it from the + menu in the message box. A connector that is off in a chat can't be used in it.

3c. Any other MCP client

A client that connects to remote MCP servers with OAuth needs only the address https://api.useopyt.com/mcp. It registers itself, so there is no client ID or secret to enter, and the sign-in is the same: Allow Access on the Opyt page, then Google.

Then ask about your library. If the connector answers that no library is connected, see status and errors.

Authentication

Sign-in and permissions.

Endpointhttps://api.useopyt.com/mcp: MCP Streamable HTTP, stateless, JSON answers
Discovery/.well-known/oauth-protected-resource/mcp (RFC 9728) and /.well-known/oauth-authorization-server (RFC 8414), on api.useopyt.com
Registrationhttps://api.useopyt.com/register, dynamic client registration (RFC 7591). Clients are public: no secret.
FlowAuthorization code with PKCE (S256), then refresh tokens
TokensBearer, in the Authorization header
Revocationhttps://api.useopyt.com/revoke (RFC 7009), for an access or a refresh token
Google scopesopenid only

A request with no token gets HTTP 401 and a WWW-Authenticate header that points to the discovery document. That is how a client knows to start the sign-in.

The consent page. Before Google, an Opyt page titled “Application Access Request” names the application asking (for example Claude or ChatGPT), says it wants to access the MCP server Opyt, and shows the address the sign-in will be sent back to. Allow Access continues to Google; Deny stops. It appears on every new sign-in.

Google. Google then asks you to sign in and approve. Opyt uses one value from the sign-in: your Google account ID (sub), to find the library you linked from your Mac. It asks Google for openid only, so the sign-in carries no email address and no name. The connector gets no access to Gmail, Drive, contacts or anything else in your Google account, and your password goes only to Google.

Permissions. A token can call all twelve tools: five read the library, three write what Opyt's server holds for it (a page of sources, an invite, a reader's access), and four ask Opyt on your Mac to change the library. A token reaches only the library linked to the Google account that signed in: it reads that one, changes that one, takes down only the pages it made and cuts off only its readers. A call from any other account answers no_library.

Lifetimes and revoking. Access tokens follow Google's lifetime (about an hour), and your client refreshes them. A client that revokes its token, as clients may when you disconnect the connector, ends that sign-in at once: Opyt deletes the Google sign-in behind it and asks Google to revoke it. Removing Opyt's access from your Google account ends the sign-in too. Saying “unshare” in Opyt on your Mac deletes the Google link, after which every call answers no_library.

Tools

The tools.

Twelve tools. Five are classified Read: none creates, changes or deletes data, changes permissions, or acts on your behalf. Each declares the MCP annotations readOnlyHint: true, destructiveHint: false, idempotentHint: true and openWorldHint: false. Seven are Write, each with readOnlyHint: false:

  • reader_view, share, hopper, watch and add_oracle declare destructiveHint: false, idempotentHint: false and openWorldHint: true.
  • forget and unshare take something away and cannot be undone. They declare destructiveHint: true, idempotentHint: true and openWorldHint: false, so a client that asks before destructive tools asks before each. Both also preview first and act only with confirm=True.

Every tool returns a JSON object.

ToolClassificationWhat it does
searchread · not sensitive Keyword search over the library, filtered by author, source, kind, tags and date.
openread · not sensitive One item in full: its stored text, source link and dates.
aggregateread · not sensitive Counts by kind and source, the most frequent authors, and the newest item descriptions.
latestread · not sensitive What arrived most recently, with a cursor to read on.
statusread · not sensitive Whether a library is linked, how many items it holds, and when it was last published.
reader_viewwrite · not sensitive Puts the sources behind an answer on one private page, or takes one down.
sharewrite · not sensitive Makes a one-time invite for one person to search the library, or for an agent you run.
unsharewrite · destructive Cuts off one person or agent you invited.
hopperwrite · not sensitive Saves one link into the library: a paper, a repository, a post or an article.
forgetwrite · destructive Removes items from the library, or stops following one person.
watchwrite · not sensitive Follows a topic: what to search for every day, and which of your people write about it.
add_oraclewrite · not sensitive Adds a person whose writing the library collects from then on.

Changes to the library. The library lives on your Mac, and no tool writes to the copy the connector reads. So hopper, forget, watch and add_oracle hand the change to Opyt on your Mac, which makes it and uploads the result. With the Mac awake, the answer comes back while the assistant waits, within about 25 seconds. Otherwise the answer's status says where it stands:

  • working: it is being done now.
  • later: your Mac is asleep or off. The change is kept for a week and made when the Mac is next on with Opyt running; after a week it is dropped.

When a change finishes after its answer was given, the next answer of any tool carries one line about it under earlier, once, and status lists recent changes with how each ended.

open

read not sensitive idempotent counted as a read

One item from the library: its stored text, source link and dates. A text longer than 60,000 characters comes in pages. body_state says whether the text in the answer is the whole source; a partial text should not be presented as complete. Title annotation: “Open an item”.

open(atom_id, offset=0) -> dict

Parameters

atom_idstringrequired
From a search hit, an aggregate row or a latest item.
offsetintegeroptionaldefault 0
Where in a long text to start, in characters: the next_offset of the previous page.

Returns

rawstring | null
The stored text, or one page of it: at most 60,000 characters.
raw_chars, raw_offset, next_offsetinteger
Only on a text longer than one page: the whole text's length, where this page starts, and where the next one starts (null on the last page). Each page has body_state "partial".
body_statestring
"complete" · "partial" · "absent" · "pending", with body_basis saying how that was decided.
citestring | null
A Markdown link to the source; null when no source URL is stored.
source_urlstring
The live source.
also—
atom_id, source_type, what_kind, who_id, when_ts, when_precision, description, raw_available, payload.

Side effects

  • Adds one to today's read count for this library. Which item was opened is not recorded.

Errors

  • An unknown atom_id answers {"atom_id": …, "error": "not found"}, an ordinary answer rather than a tool error.
  • An offset outside the text answers an error that gives the text's length; it is not counted as a read.
  • no_library or not_arrived: see status and errors.

aggregate

read not sensitive idempotent counted as a read

What the library holds over an optional scope: counts by kind and source, the most frequent authors, and the newest item descriptions. With no arguments, the whole library. Title annotation: “Summarize your library”.

aggregate(tags=None, what_kind=None, source_type=None,
          who_id=None, date_from=None, date_to=None) -> dict

Parameters

tagsstring[]optional
As in search.
what_kindstringoptional
"opinion" or "artifact".
source_typestringoptional
As in search.
who_idstring | string[]optional
Author ids, not handles. Get them from search(who=…)'s insights.resolved_who.
date_fromstringoptional
As in search.
date_tostringoptional
As in search.

Returns

totalinteger
Items in the scope.
by_what_kindobject
Counts per kind.
by_source_typeobject
Counts per source.
trusted_atomsinteger
Items written by people the owner chose to follow.
top_entitiesobject[]
Up to 15 authors, most items first: {who_id, count}.
recent_descriptionsobject[]
Up to 12 items, newest first: {atom_id, description, who_id, when_ts}.
also—
scope (as applied) and notices.

Side effects

  • Adds one to today's read count for this library.

Errors

  • A scope that matches nothing answers total: 0 with a notice.
  • A malformed date or an argument of the wrong type returns an MCP tool error.
  • no_library or not_arrived: see status and errors.

latest

read not sensitive idempotent counted as a read

What arrived in the library most recently, oldest first: items the owner saved, and items the people they follow wrote or linked to. With no cursor, the newest limit items. To read on, pass the previous answer's next values back as since and since_id. It records nothing about what was shown. Title annotation: “What's new”.

latest(since=None, since_id=None, limit=50) -> dict

Parameters

sincestringoptional
next.since from a previous answer: when an item entered the library.
since_idstringoptional
next.since_id from the same answer, which breaks ties between items that arrived in the same second.
limitintegeroptionaldefault 50
How many items, from 1 to 100. Values outside that range are moved to the nearest end.

Returns

itemsobject[]
Each carries atom_id, description, source_url, who, who_id, when_ts (published), seen_at (entered the library), source_type, what_kind and entry_mode.
nextobject | null
{since, since_id}: pass these back to continue. An empty page echoes the cursor it was given.
moreboolean
True when a cursor page has more items after it.
also—
notices.

Side effects

  • Adds one to today's read count for this library, and marks the read zero-result when the page is empty.

Errors

  • An argument of the wrong type returns an MCP tool error.
  • no_library or not_arrived: see status and errors.

status

read not sensitive idempotent not counted

Whether this Google account has a library here, how many items it holds, when it was last published, and what you asked to change in it lately. Title annotation: “Library status”.

status() -> dict

Parameters

  • None.

Returns

statusstring
"ready", or the same no_library and not_arrived answers every tool gives.
itemsinteger
How many items the library holds.
last_published_atstring
When the Mac last uploaded the copy being read, in UTC: "YYYY-MM-DD HH:MM:SS".
searchstring
Always "keyword".
setupstring
The address of the setup page.
changesobject[]
The last ten changes asked for through the connector, newest first. Each has tool, asked (UTC), args and answer, the answer that tool gives now. A long watch preview is read from here once it is done.

Side effects

  • None. It is not counted as a read.

reader_view

write not sensitive publishes · expires counted as reads

Puts the sources behind an answer on one page at Opyt's server: every post and thread with its photos and video, every article in full, a repository's README, a paper as its PDF. The assistant names the items, since Opyt cannot see the conversation. Title annotation: “Reader view of sources”.

reader_view(atom_ids=None, title=None, note=None, delete=None) -> dict

Parameters

atom_idsstring[]optional
The items, in the order the answer cited them: the atom_id of search hits or open results. At most 50.
titlestringoptional
A short plain title for the page.
notestringoptional
A sentence or two shown under the title.
deletestringoptional
A page's link, to take it down now. The other arguments are then ignored.

Returns

statusstring
"made" · "deleted" · "not_found" · "refused", with a message.
url, expires, missing—
On made: the page's link, the day it expires, and any ids that are not in the library and so are not on the page.

Side effects

  • Stores a page on Opyt's server: the items in full, as the library keeps them, with the title and note. Anyone holding the link can read it and comment on it. It is deleted 90 days after it was last opened. The link is a long random id, kept out of search engines.
  • Fetches each paper's openly published PDF to keep beside the page, over HTTPS and only where the publisher's robots.txt allows it. A paper with no PDF shows its abstract and a link.
  • Each item put on a page counts as one read. Taking a page down is not counted.

Errors

  • not_found: none of the ids is in the library, or no page this library made has that link.
  • refused: no items, or more than 50.
  • no_library or not_arrived: see status and errors.

share

write not sensitive makes an invite not counted

Makes a one-time invite link for one person to search your whole library, or, with agent, for an agent you run yourself. The preview is the consent step: it says what the library holds and what an invite gives. Title annotation: “Invite someone to your library”.

share(confirm=False, for_whom=None, agent=False) -> dict

Parameters

confirmbooleanoptionaldefault False
False previews and makes nothing. True makes the invite and returns its link.
for_whomstringoptional
Who the invite is for, such as “Maya”. unshare finds them by this name later.
agentbooleanoptionaldefault False
True makes the invite for an agent you run, one that calls web addresses (see agents). The agent that redeems it acts as you: it reads the library and can also save links, remove items, add people, and invite or cut off readers. False is for a person, who only reads.

Returns

statusstring
"preview" · "shared".
consentstring[]
On a preview: what an invite means, to read back before confirming.
items, by_source_type, by_what_kind, top_entities, readers, last_published_at—
On a preview: what the library holds, how many people can read it now, and when its copy was last uploaded.
invite, messagestring
On shared: the link, like https://useopyt.com/invite#…, and who to give it to.

Side effects

  • A preview stores nothing and is not counted as a read.
  • A confirm stores a one-time invite on Opyt's server: a hash of its code and the name you gave. The link works once. A person redeems it in Opyt on their own computer and can then search your whole library, as it updates, until you cut them off. Part of a library cannot be shared.
  • An agent's invite is redeemed by the agent itself and gives it a key that acts as you, until you cut it off.

Errors

unshare

write destructive idempotent not counted

Cuts off one person or agent you invited. Everyone else keeps reading, and the library and its copy are untouched. Taking the whole library off Opyt's server is done from Opyt on your Mac. Title annotation: “Stop sharing with one person”.

unshare(reader, confirm=False) -> dict

Parameters

readerstring
Who to cut off: the name given when they were invited (share's for_whom), or an id from a previous answer's readers list.
confirmbooleanoptionaldefault False
False previews who would lose access. True cuts them off.

Returns

statusstring
"preview" · "reader_revoked" · "already_gone" · "no_such_reader" · "ambiguous_reader".
consentstring[]
On a preview: what the cut does, to read back before confirming.
reader_label, reader_id, readers_remaining—
Who it is, and how many others keep access. An agent is marked agent: true.
readersobject[]
When the name matches nobody or several: the list to choose from, each with a label and an id.

Side effects

  • A preview changes nothing.
  • A confirm deletes that person's or agent's key on Opyt's server. Their next request is refused. There is no undo: letting them back in takes a new share link.
  • A name two readers share is refused, not guessed.

Errors

hopper

write not sensitive changes the library reaches outside

Saves one link into the library: a research paper, a GitHub repository, a Substack post, an article or blog post, or one X post. One step, with no preview: the assistant reads the link itself first. Video and audio pages cannot be read. Title annotation: “Save a link”.

hopper(reference, kind_hint=None) -> dict

Parameters

referencestring
The link to save.
kind_hintstringoptional
Read only when the link's host is not one Opyt knows: "substack" for a Substack post on its own domain.

Returns

statusstring
"saved" · "already_present" · "blocked" (the site turned the read away; worth another try later) · "failed" · "unroutable", each with its reason; or "working" · "later": not done yet, see changes to the library.
atom_idstring
On saved and already_present: the item's id. search and open find it here a minute or two later.
warningstring
On saved: it was stored without its title, date or author.

Side effects

  • Opyt on your Mac reads the page from your Mac, where the site's robots.txt allows it, and stores it in your library; an X post is read with your own X sign-in, which never leaves the Mac. Opyt's server fetches nothing.
  • The link and how the save ended are kept on Opyt's server for a week (see what the server keeps).
  • Saving a link the library already holds changes nothing.

Errors

  • failed, blocked or unroutable: nothing was stored.
  • no_library or not_arrived: see status and errors.

forget

write destructive idempotent changes the library

Removes items from the library for good, or stops following one person while keeping what the library already holds from them. Give exactly one of atom_id, atom_ids or oracle. Two steps: a preview, then the removal. Title annotation: “Forget an item or Oracle”.

forget(atom_id=None, atom_ids=None, oracle=None, confirm=False) -> dict

Parameters

atom_idstringoptional
One item, by the atom_id of a search hit or an open result.
atom_idsstring[]optional
Several items. An id that is not in the library refuses the whole list.
oraclestringoptional
One person the library follows: their handle, profile URL or exact name, or a who_id from a search hit.
confirmbooleanoptionaldefault False
False previews and removes nothing. True removes.

Returns

statusstring
"preview" · "forgotten" · "not_found" · "ambiguous" (several people match, with candidates) · "error"; or "working" · "later": not done yet, see changes to the library.
consentstring[]
On a preview: what removing means, including how an item can come back. The assistant reads each sentence to you before confirming.
atomsobject[]
On a preview of items: each one's atom_id, description, author (who_id), date and source_url.
name, canonical_id, atoms_kept—
For a person: who it is, and how many of their items stay.

Side effects

  • A preview is read from the connector's copy. It removes nothing and asks nothing of your Mac.
  • A confirm removes the items from the library on your Mac, with their text and search entries, and the copy drops them at its next upload, about a minute later. There is no undo.
  • An item can return on its own: an X post you still have bookmarked, or a new post from someone you still follow. The preview says so.
  • What you asked to remove and how it ended are kept on Opyt's server for a week.

Errors

  • not_found: no such item or person; nothing was removed.
  • no_library or not_arrived: see status and errors.

watch

write not sensitive changes the library reaches outside

Follows topics: you say what you want to stay up to date on, and Opyt searches for it every day, outside the library (new papers, repositories, X posts and Substack posts) and among the posts of the people you follow. Title annotation: “Follow topics”.

watch(action, name=None, watches=None, words=None, people=None, topic_id=None, drop_watches=None) -> dict

Parameters

actionstring
"preview" (what a topic would have found last month; writes nothing) · "create" · "edit" · "drop" (stop following) · "list".
namestringoptional
The topic's name, in your words.
watchesobject[]optional
The named things to search for, such as {"name": "Boltz-2", "sources": ["github", "openalex"]}. Each may carry spellings, sources and, for X, context words.
wordsstring[]optional
Subject words that mark one of your people's posts as on the topic.
peoplestring[]optional
Handles of people you follow who mostly write about it.
topic_idstringoptional
The topic to edit or drop, from list or create.
drop_watchesstring[]optional
On an edit: names of watches to stop.

Returns

statusstring
"preview" · "ok" · "refused" · "error"; "working" · "later": not done yet, see changes to the library. "unavailable": a list or a preview was asked for while your Mac is off, and there is nothing to do later.
topic_id, name, watches, words, people—
On ok: the topic as it now stands.
messagestring
What to show or tell the user next.

Side effects

  • A preview is searched from your Mac and writes nothing. It can take up to a minute: when the answer is working, status returns the preview once it is done.
  • Create, edit and drop change the topics kept on your Mac. Its daily searches run from the Mac.
  • New finds are reviewed in Opyt on your Mac. The connector's latest does not list them: it shows what has entered the library.
  • What you asked for and how it ended are kept on Opyt's server for a week.

Errors

  • refused or error: the reason says why; nothing changed.
  • no_library or not_arrived: see status and errors.

add_oracle

write not sensitive changes the library reaches outside

Adds one person to those the library follows, so their writing is collected from then on: their X posts when your X is connected, their Substack or blog, their papers. One step, with no preview: the assistant confirms with you who the person is first, looking them up with its own web search when unsure. Title annotation: “Add an Oracle”.

add_oracle(reference, x_lookback=None, web_lookback=None, scholar_lookback=None, scholar_topics=None) -> dict

Parameters

referencestring
An X @handle ("@karpathy") or the URL of their Substack, blog or site. A name alone cannot be added.
x_lookbackstringoptional
How far back to take their X posts: "6mo" (the default), "1yr" or "2yr"; "since_last" brings someone already added up to date.
web_lookbackstringoptional
How far back to take their Substack or blog: "1yr", "2yr", "5yr" or "all" (the default).
scholar_lookbackstringoptional
How far back to take their papers: "2yr", "5yr", "10yr" or "all" (the default).
scholar_topicsstring[]optional
OpenAlex topic ids to narrow their papers to. A research venue needs them.

Returns

statusstring
"added" · "not_added", with the reason in message; or "working" · "later": not done yet, see changes to the library.
name, canonical_id, was_already_oracle—
On added: who was added, and whether the library already followed them.

Side effects

  • Adds the person to the list kept on your Mac. Opyt on the Mac then collects their writing over the following hours, not at once; X is read with your own X sign-in, on the Mac.
  • Who you asked to add and how it ended are kept on Opyt's server for a week.

Errors

  • not_added: the reference could not be resolved to a person or site; nothing was written.
  • no_library or not_arrived: see status and errors.

Examples

Things to ask.

Each works on any library once the connector is on in the chat. The items named in the answer come back as links to their sources.

AskWhat the assistant does
“Using Opyt, what have the people I follow said about AI agents this year? Quote the two strongest points and link them.”search with a date filter, then open on the best hits to quote their own text.
“What's new in my Opyt library since last week?”latest, then a short list of what arrived, each with its link.
“Give me an overview of my Opyt library: who is in it, what kinds of sources, and what came in most recently.”aggregate (and status for its size and when it was last updated).
“Find the most recent paper in my Opyt library and summarize it, with its link.”search or latest to find it, then open, reading a long paper page by page.
“Save this paper to my Opyt library: arxiv.org/abs/…”Reads the link, then hopper. With your Mac on it answers that it is saved; a search finds it a minute or two later.
“Keep me up to date on Boltz-2 in Opyt.”watch with preview, shows what it would have found last month, then create when you agree.
“Add @karpathy to the people I follow in Opyt.”Confirms with you who that is, then add_oracle. Their writing arrives over the following hours.
“Remove that post from my Opyt library.”forget as a preview, reads you what would go, then forget with confirm when you say yes.
“Give Maya access to my Opyt library.”share as a preview, then with confirm: a one-time link for you to send her.

Status handling

Status and errors.

The two status answers come back from every tool as an ordinary answer, {"status": …, "message": …}, whose message says what to do in plain words.

AnswerMeaningWhat to do
readyFrom status: a library is linked and published.Read it.
no_libraryNo library is linked to the Google account that signed in.Set up Opyt on a Mac and say “connect Opyt to Google” there with this same account, or reconnect the connector with the account you linked. The message points to this page.
not_arrivedThe account is linked, but the Mac has not published a copy yet.Leave the Mac awake with Opyt set up. The first copy usually lands within minutes of connecting.
error: "not found"From open: no item has that id in this library.Use an id from search, aggregate or latest.
workingFrom a change to the library: Opyt on the Mac is making it now, and it took longer than the answer waited.Nothing. status says how it ended, and the next answer carries a line about it under earlier.
laterFrom a change to the library: the Mac is asleep or off, or Opyt is not running there.Nothing, or wake the Mac. The change is made when it is next on, within a week.
unavailableFrom watch: a list or a preview of topics was asked for while the Mac is off.Ask again when the Mac is on.
failedFrom a change to the library: Opyt on the Mac could not make it.The message says why.
tool errorAn MCP tool error (isError: true): an argument is missing or has the wrong type, or a date is malformed.The error text names the problem. Fix it and call again.
HTTP 401No token, or an expired or revoked one.The client signs in again; the WWW-Authenticate header points to the discovery document.
HTTP 503The server is handling its limit of 256 requests at once.Retry after a short wait.

Freshness. The connector serves a copy, not the Mac's live library. The Mac uploads a new copy about once an hour while it is awake, when the library has changed. Saying “update my shared library” in Opyt on the Mac uploads one at once. status's last_published_at says when the current copy was uploaded, and search's insights.corpus_newest says when the library in that copy last took an item in. The copy only moves while the Mac is awake.

Troubleshooting

When something is off.

What you seeWhyWhat to do
The app can't add or reach the connectorThe address is mistyped, or on chatgpt.com developer mode is off.Use exactly https://api.useopyt.com/mcp. On chatgpt.com, developer mode needs a paid plan and has to be switched on first.
Google's sign-in page shows an errorThe sign-in did not finish.Close it and connect again. If it repeats, write to hello@useopyt.com with the error text.
Every answer says no Opyt library is connectedYou signed in with a different Google account from the one your Mac is connected to.Disconnect the connector and connect again with that account, or say “connect Opyt to Google” on the Mac with the account you signed in with here.
It says the library has not been published yetThe Mac has not uploaded a copy: it is asleep, or Opyt is not running there.Wake the Mac and open the app Opyt is set up in. Saying “update my shared library” there uploads at once.
Answers miss what you saved in the last hourThe connector reads a copy, which the Mac updates about once an hour.Say “update my shared library” on the Mac. status shows when the copy was last updated.
A search finds nothing on a subject you know is thereSearch matches words, not meaning.Ask again in the words the source would use, or with fewer words. A person's name only filters to people you follow in Opyt.
A save or another change says it will happen when your computer is next onThe Mac is asleep or off, or Opyt is not running on it. Changes to the library are made there.Wake the Mac and open the app Opyt is set up in. The change is made within moments, and the next answer says so.
It says that though the Mac is onOpyt on the Mac is older than this feature. It updates itself within about six hours of a new release.Leave the Mac on. The change is kept for a week and made once Opyt has updated.
You are not sure a change went through—Ask for the library's status: it lists what you asked to change lately and how each ended.
Something you saved is not in search yetThe Mac saved it, and the connector's copy follows at the next upload.Ask again in a minute or two.
A long article or paper looks cut offTexts over 60,000 characters come in pages.Ask the assistant to read the rest; it continues with next_offset.
It worked, then every answer says no library“unshare” on the Mac deleted the copy and the Google link.Say “connect Opyt to Google” on the Mac again.
You want to disconnect—Remove the connector in the app's connector settings. To also remove Opyt's access to your Google account, use myaccount.google.com/connections.

Anything else: hello@useopyt.com.

Limits

Caps on each answer.

searchk defaults to 8, at most 25 hits a page; more come in pages (offset, next_offset), to the first 250
openraw at most 60,000 characters; a longer text comes in pages (offset, next_offset)
latestlimit defaults to 50, from 1 to 100 items
aggregateUp to 15 authors and 12 recent descriptions; the counts cover the whole scope
statusA small answer, with the last ten changes
reader_viewAt most 50 items a page
hopper, forget, watch, add_oracleThe answer waits up to about 25 seconds for the Mac; a change not made within a week is dropped

These per-answer caps are the connector's only limits. It sets no request quota per account. They keep every answer under about 65,000 characters (measured on a library of 8,937 items), inside the limits chat apps put on a tool result.

Data

What the server keeps, and deleting it.

In short; the privacy policy has the full detail.

  • The copy of your library your Mac uploads and keeps current. No connector tool writes to it.
  • Changes you ask for through the connector: the link, topic, item id or person you named, and how the change ended, so the assistant can tell you. Each is deleted a week after you asked. Beside them, one timestamp: when your Mac last asked for such changes.
  • Invites and keys: for each person or agent you invite, a hash of the invite and of their key, and the name you gave them.
  • Your Google account ID, linking your sign-in to that library. The sign-in asks Google for nothing else, so Opyt never receives your email address.
  • Daily read counts: per day and per tool, how many reads, under a hash of your account ID. Never the query text, and never which items were opened.
  • Sign-in records: each client's registration (its name and callback address) and the tokens issued to it, encrypted.
  • Reader-view pages, only when you ask for one: the items on it in full, its title and note, the papers' PDFs, and the comments people with the link leave on it, each with the name its writer typed. Anyone with the link reads all of it. A page is deleted 90 days after it was last opened, and the time it was last opened is kept to know when.
  • Request logs: method, path and status code only, with no IP address, deleted after 30 days.

Deleting it. Say “unshare” in Opyt on your Mac and confirm. That deletes everything Opyt's server holds for your library: the copy, the Google link, every invite and every reader's and agent's key, the changes waiting for your Mac, its reader-view pages and the read counts. The library on your Mac stays, and nothing is uploaded again unless you share or connect to Google again. If you no longer have the Mac, email hello@useopyt.com and the same things are deleted. A client that revokes its token ends that sign-in, and its Google sign-in is deleted.

Agents

For an agent that calls web addresses.

An agent that is not an MCP client, one that can only call web addresses, uses a library over plain HTTPS with a key it gets by redeeming an invite link. There is no Google sign-in on this path: the key names the library.

  • A reader key comes from an ordinary invite (share). It searches and opens the library and can change nothing.
  • An agent key comes from an invite made with agent=True, for an agent you run yourself. It reads the library and also acts as you: every write tool on this page has a route of the same name, such as POST https://api.useopyt.com/v1/library/hopper, with the same arguments and the same answers. It cannot make an invite for another agent.
  • Nothing asks before it acts. A chat app asks before a destructive tool; an agent calling a web address has no such step. A confirmed forget or unshare happens. Give an agent key only to an agent you trust with your library.
  • Cutting it off is unshare with its name, here or in Opyt on your Mac. Its next call is refused.

The routes, the redeem call and the answers are documented for agents in llms.txt, under “Reading a shared knowledge base over plain HTTPS”.

Support

Support and security.

Opyt is operated from the United States. Contact for anything on this page: hello@useopyt.com.

© 2026 Opyt Built with ❤️ in New Jersey Privacy Terms MIT Docs GitHub