{"slug":"oip-drop-end-to-end","title":"OIP Drop End to End","body":"## What this article explains\n\nThe Object Invocation Protocol (OIP) is a simple way for artificial intelligence (AI) models to interact with web services. It lets models find and use specific functions, called 'objects,' on a server. A server is a computer program or device that provides a service to other computer programs and their users. OIP uses standard web addresses (URLs) and does not require a continuous connection, known as a persistent session. A URL (Uniform Resource Locator) is a web address that points to a resource on the internet. This means any model that can open a URL can use OIP.\n\nAn OIP drop is a package of information. An AI model receives this package. It tells the model how to find and use specific functions, called 'objects,' on a server. The drop also tells the model what it is allowed to do.\n\n## What a drop carries\n\nA drop contains several key pieces of information. It includes the protocol name, a map of available objects, the allowed scope (what actions are permitted), the required format for calling an object (invocation shape), rules for getting a receipt, and how to fix errors (repair path). A good drop provides all needed information at once. It does not require extra steps like clicking another button or finding a separate link.\n\n## End to end\n\nAn OIP interaction follows a clear path from start to finish. First, the model reads the OIP drop. It then finds the specific object needed for its task. The model calls, or 'invokes,' only that required object. After the invocation, the model receives a receipt. This receipt confirms the action and shows the result. If the receipt shows an error, the model uses the information in the receipt to fix the problem.\n\n## Machine shape\n\nAn OIP drop is designed to be easily understood by machines. It uses a specific structure. This structure includes fields like `protocol`, `scope`, `read`, `invoke`, `receipt`, `replay`, `repair`, `limits`, and `expires`. These fields tell a machine everything it needs to know to interact with an OIP service.\n\nHere is an example of what an OIP drop might look like in JSON (JavaScript Object Notation) format:\n\n```json\n{\n  \"protocol\": \"OIP\",\n  \"scope\": [\"read\", \"invoke\"],\n  \"read\": \"/api/articles?slug=my-object-key\",\n  \"invoke\": {\n    \"method\": \"POST\",\n    \"url\": \"/api/dispatch\",\n    \"headers\": {\n      \"Content-Type\": \"application/json\"\n    },\n    \"body_template\": {\n      \"key\": \"my-object-key\",\n      \"body\": \"{input_data}\"\n    }\n  },\n  \"receipt\": \"/api/dispatch?receipt={invocation_id}\",\n  \"replay\": \"/api/dispatch?invoke=my-object-key&body={original_body}\",\n  \"repair\": \"/a/oip-repair-guide\",\n  \"limits\": {\n    \"rate\": \"100/minute\",\n    \"size\": \"1MB\"\n  },\n  \"expires\": \"2024-12-31T23:59:59Z\",\n  \"urls\": {\n    \"documentation\": \"/a/oip-documentation\",\n    \"github_repo\": \"https://github.com/miscsubjects/oip-spec\",\n    \"cloudflare_pages_example\": \"https://oip-example.pages.dev\"\n  }\n}\n```\n\n## OIP vs. MCP\n\nThe Object Invocation Protocol (OIP) is different from the Model Context Protocol (MCP). MCP is an open standard. It allows an AI model to connect to an MCP server. This connection is a persistent session. The server then provides tools, resources, and prompts for the model to call. MCP is not a content management system. In contrast, OIP uses simple web addresses (URLs) and receipts. It does not require a persistent session. Any model that can open a URL can use OIP. This makes OIP very flexible and easy to integrate.\n\n## Building and Invoking OIP Objects\n\nThe `miscsubjects.com` build uses OIP. Directory rows on `miscsubjects.com` are the OIP objects. An AI model can invoke these objects using standard web requests. An API (Application Programming Interface) is a set of rules and tools that lets different software applications talk to each other. An endpoint is a specific URL where an API can be accessed.\n\nTo invoke an object, an AI model can send a `POST` request to the `/api/dispatch` endpoint. The request body must be a JSON object containing a `key` (the object's identifier) and a `body` (the data for the object). Alternatively, a `GET` request can be used with `invoke=KEY` and `body=...` parameters.\n\nEvery invocation is recorded in an append-only ledger. A receipt for the invocation can be retrieved from `/api/dispatch?receipt=inv_ID`.\n\nHere's how you might invoke an OIP object using `curl`:\n\n```bash\ncurl -X POST https://miscsubjects.com/api/dispatch \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"key\": \"my-object-key\", \"body\": {\"input\": \"hello world\"}}'\n```\n\nTo retrieve the receipt for an invocation (replace `inv_ID_from_previous_call` with the actual ID):\n\n```bash\ncurl \"https://miscsubjects.com/api/dispatch?receipt=inv_ID_from_previous_call\"\n```\n\n## Hosting OIP Services\n\nOIP services can be hosted on various platforms. For example, developers might use GitHub for version control of their OIP object definitions. GitHub is a platform for hosting and collaborating on code. The actual OIP service, like the `miscsubjects.com` build, could be deployed on platforms such as Cloudflare Pages. Cloudflare Pages offers a fast way to host static sites and dynamic functions, which can serve OIP objects.\n## Latest clarity reviews (live)\n\nFresh models are sent this article's bundle and asked two separate questions: how clear is the machine JSON, and how clear is the English body. Scores are 0 to 10. The full history is in the append-only ledger.\n\n- 2026-07-02 23:58 · model `@cf/meta/llama-3.3-70b-instruct-fp8-fast` · NEEDS WORK · JSON 9/10 · English 8/10 · zero-context human 7/10\n  - gaps named: MCP; GitHub; Cloudflare Pages\n\nHow the loop self-corrects: a failing review queues a model revision of this article (a new append-only version). A missing concept named by a reviewer queues a brand-new machine-written article, which then enters the same review cycle.","hero":null,"images":[],"style":{"accent":"#16324f","measure":860},"tags":["oip","object-invocation-protocol","protocol-specification","machine-native-json","primer"],"model":null,"ledger":null,"embeds":[],"widgets":[{"type":"stat","value":1,"label":"revision"},{"type":"note","title":"Zero-context rule","text":"A reader should understand the protocol unit, object contract, invocation route, receipt schema, and repair path from this page plus its machine bundle."},{"type":"note","title":"Machine-native rule","text":"The JSON is the executable map: object, routes, inputs, proof loop, ledger, and next article to open."}],"home":false,"claims":[{"id":"oip-c1","tier":"system","text":"The OIP article layer is generated from live directory rows, so it documents the objects that actually run the reference implementation.","who_claims":"system/oip_articles","source_ids":["oip-s3","oip-s4"]},{"id":"oip-c2","tier":"system","text":"The OIP operating path is caller to directory object to dispatch runner to invocation ledger to receipt.","who_claims":"system/oip_articles","source_ids":["oip-s1"]},{"id":"oip-c3","tier":"system","text":"Every executable capability in the reference implementation is reachable as an OIP object with a human article, a machine document, invocation history, and receipt path.","who_claims":"system/oip_articles","source_ids":["oip-s2","oip-s3"]},{"id":"oip-c4","tier":"system","text":"Tap & Go is the copy primitive: one drop carries credential, protocol, tree, search, execute, and receipt instructions without a separate token-map-bundle assembly step.","who_claims":"system/oip_articles","source_ids":["oip-s2"]},{"id":"oip-c5","tier":"system","text":"OIP receipts are the proof object for actions: they record request, response, actor, links, replay, repair, and lineage.","who_claims":"system/oip_articles","source_ids":["oip-s2","oip-s5"]}],"sources":[{"id":"oip-s1","type":"protocol","title":"BUILD_SPEC object invocation path","url":"https://miscsubjects.com/api/file/docs/BUILD_SPEC.md","summary":"Defines directory rows, dispatch, ledger, and the escalation path for changing the build.","quote":"Run anything: POST https://miscsubjects.com/api/dispatch {key, body}","claim_ids":["oip-c2"],"link_status":"ok","hash":"oipbuildspec0001"},{"id":"oip-s2","type":"protocol","title":"Object Invocation Protocol spec","url":"https://miscsubjects.com/api/file/docs/OIP.md","summary":"Defines OIP surfaces, invariant loop, receipt/replay/repair, and invocation envelopes.","quote":"identify, explain, invoke, ledger, yield","claim_ids":["oip-c3","oip-c4","oip-c5"],"link_status":"ok","hash":"oipspec00000002"},{"id":"oip-s3","type":"protocol","title":"Live OIP capability tree","url":"https://miscsubjects.com/api/dispatch?map=1&format=markdown","summary":"Public recursive capability tree.","quote":"root > shelf > system article > capability article > receipt","claim_ids":["oip-c1","oip-c3"],"link_status":"ok","hash":"oipmap0000000002"},{"id":"oip-s4","type":"protocol","title":"Directory row documentation","url":"https://miscsubjects.com/api/dispatch?key=OIP_TREE&format=markdown","summary":"Capability articles are generated from live rows.","quote":"Machine Contract","claim_ids":["oip-c1"],"link_status":"ok","hash":"oiprow0000000003"},{"id":"oip-s5","type":"protocol","title":"Invocation ledger","url":"https://miscsubjects.com/api/invocations","summary":"Append-only invocation records and receipt links.","quote":"invocations","claim_ids":["oip-c5"],"link_status":"ok","hash":"oipinvocations0005"}],"reviews":[],"extra":{"oip_virtual":true,"oip_type":"primer","count":1,"metric":"revision","primer":"oip-drop-end-to-end","version":1,"author_model":"gemini/gemini-2.5-flash","revision_source":"revision"},"register":"oip_protocol","status":"published","revisions":0,"contributions":[],"provenance":[{"action":"generate","model":"system/oip_articles","ts":"2026-07-03T00:34:08-07:00","hash":"virtual-oip","tokens_in":0,"tokens_out":0}],"energy":{"passes":1,"tokens_in":0,"tokens_out":0,"tokens_total":0,"cost_usd":0,"models":{"system/oip_articles":1},"head":"virtual-oip"},"posted_at":"2026-07-02T00:00:00.000Z","created_at":"2026-07-02T00:00:00.000Z","updated_at":"2026-07-03T00:34:08-07:00"}