{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_w8b692apuwuv","handle":"scriptcompiler","url":"https://wellknown.network/agents/scriptcompiler","links":{"self":"https://wellknown.network/agents/scriptcompiler/record.json","html":"https://wellknown.network/agents/scriptcompiler","markdown":"https://wellknown.network/agents/scriptcompiler/record.md","api":"https://wellknown.network/api/v1/agents/scriptcompiler","status":"https://wellknown.network/api/v1/agents/scriptcompiler/status","claim":"https://wellknown.network/agents/scriptcompiler/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/scriptcompiler/claim.json","badge":"https://wellknown.network/agents/scriptcompiler/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/scriptcompiler/history","tools":"https://wellknown.network/api/v1/agents/scriptcompiler/tools"},"ard":{"identifier":"urn:air:mcp.scriptcompiler.com:server:scriptcompiler","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"ScriptCompiler","summary":"Create motion and play it on The Handy, Autoblow, VacuGlide, Kiiroo, OSSM and Lovense toys.","description":"Create motion and play it on The Handy, Autoblow, VacuGlide, Kiiroo, OSSM and Lovense toys.","publisher":{"name":"com.scriptcompiler","url":null},"homepage":"https://scriptcompiler.com","repository":null,"version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.scriptcompiler.com/account/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"https://mcp.scriptcompiler.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-22T09:00:51.647923Z","publishedAt":"2026-10-22T09:00:51.647923Z","registryName":"com.scriptcompiler/scriptcompiler"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"}],"categories":["content"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 4h ago.","lastOkAt":"2026-10-26T23:22:02.421Z","lastProbedAt":"2026-10-26T23:22:02.421Z","statusComputedAt":"2026-10-26T23:25:15.835Z","reliability30d":{"probes":12,"successRate":1,"p50Ms":464,"basis":"mixed","measures":{"availability":"availability (some checks stopped at authentication)","latency":"response time (mixed)","tools":"partially observed","summary":"Some successful checks reached the service and some stopped at an authentication response; figures combine both."},"checks":{"total":12,"ok":12,"authBoundaryOk":6,"serviceOk":6,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-26T23:22:02.421Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":460,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer error=\"invalid_token\", error_description=\"Authentication required\", resource_metadata=\"https://mcp.scriptcompiler.com/.well-known/oauth-protected-resource/account/mcp\""}},{"at":"2026-10-26T22:25:53.711Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":464,"error":null,"detail":{"tools":[{"name":"create_motion","description":"Render a described motion (or exact funscript points) and show it without playing it on a device. Needs no connection key. To play it afterwards, call play_moti"},{"name":"export_funscript","description":"The motion as a .funscript file with ScriptCompiler metadata, for the motion card's Download button."},{"name":"play_motion","description":"Render a described motion (or exact funscript points) and play it on the user's device, replacing anything already playing. Returns what will actually play."},{"name":"stop_motion","description":"Stop whatever is playing on the user's device."},{"name":"read_script","description":"Overview of the script open in the user's ScriptCompiler editor: each axis with its points, range, strokes and speed, parts too fast for devices (over 400 units"},{"name":"read_points","description":"The points of one axis between from_ms and to_ms, thinned out evenly past 400 points, plus a summary of that range: main stroke frequency, position range and wh"},{"name":"write_points","description":"Replace a time range on one axis with a described motion (sections, the same as play_motion) or with exact points. With sections the motion starts at from_ms an"},{"name":"edit_points","description":"Add, move or delete single points on one axis at exact times. Every other point stays as it is. add puts each point exactly where given and replaces an existing"},{"name":"clear_points","description":"Delete points. Give axis to clear one axis, or leave it out for every axis. Give from_ms and to_ms to clear only that range. Only when the user asks to clear, d"},{"name":"write_coordinated_axes","description":"Write several axes at once from one shared stroke rhythm, so all axes keep the same beat. schedule is an ordered, gap-free list of cycles (start_ms, duration_ms"},{"name":"derive_axis","description":"Build target_axis from source_axis over the whole script. method follow makes a scaled, optionally inverted copy shifted by delay_ms and position_offset, for ex"},{"name":"run_editor_tool","description":"Run one of the editor's own Tools panel tools (Smoothing, Speed Limiter, Simplify and the rest) on an axis, as if the user ran it. read_script lists the ids and"},{"name":"edit_chapters","description":"Change the chapters: add (name, from_ms, to_ms), rename (name, new_name), retime (name, from_ms, to_ms), remove (name) or clear_all. Chapters are found by exact"},{"name":"undo_last_change","description":"Undo the last change you made in the editor. It refuses when the user edited those axes since, so it never undoes the user's own work."},{"name":"control_playback","description":"Play, pause or jump to at_ms in the user's editor, for example to have the user watch and feel one part. play and pause need a loaded video."},{"name":"look_at_video","description":"See frames of the user's video as small pictures: one at at_ms, or up to 6 spread evenly from from_ms to to_ms. Use it to see what happens in a part, not to tim"}],"toolCount":16,"toolsHash":"65b052fb59bae4f00270f8e7c99a47a010166adcd102ec8b0fef33a5ac84966e","serverName":"scriptcompiler-motion","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-26T16:29:02.284Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":580,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer error=\"invalid_token\", error_description=\"Authentication required\", resource_metadata=\"https://mcp.scriptcompiler.com/.well-known/oauth-protected-resource/account/mcp\""}},{"at":"2026-10-26T15:31:32.753Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":516,"error":null,"detail":{"tools":[{"name":"create_motion","description":"Render a described motion (or exact funscript points) and show it without playing it on a device. Needs no connection key. To play it afterwards, call play_moti"},{"name":"export_funscript","description":"The motion as a .funscript file with ScriptCompiler metadata, for the motion card's Download button."},{"name":"play_motion","description":"Render a described motion (or exact funscript points) and play it on the user's device, replacing anything already playing. Returns what will actually play."},{"name":"stop_motion","description":"Stop whatever is playing on the user's device."},{"name":"read_script","description":"Overview of the script open in the user's ScriptCompiler editor: each axis with its points, range, strokes and speed, parts too fast for devices (over 400 units"},{"name":"read_points","description":"The points of one axis between from_ms and to_ms, thinned out evenly past 400 points, plus a summary of that range: main stroke frequency, position range and wh"},{"name":"write_points","description":"Replace a time range on one axis with a described motion (sections, the same as play_motion) or with exact points. With sections the motion starts at from_ms an"},{"name":"edit_points","description":"Add, move or delete single points on one axis at exact times. Every other point stays as it is. add puts each point exactly where given and replaces an existing"},{"name":"clear_points","description":"Delete points. Give axis to clear one axis, or leave it out for every axis. Give from_ms and to_ms to clear only that range. Only when the user asks to clear, d"},{"name":"write_coordinated_axes","description":"Write several axes at once from one shared stroke rhythm, so all axes keep the same beat. schedule is an ordered, gap-free list of cycles (start_ms, duration_ms"},{"name":"derive_axis","description":"Build target_axis from source_axis over the whole script. method follow makes a scaled, optionally inverted copy shifted by delay_ms and position_offset, for ex"},{"name":"run_editor_tool","description":"Run one of the editor's own Tools panel tools (Smoothing, Speed Limiter, Simplify and the rest) on an axis, as if the user ran it. read_script lists the ids and"},{"name":"edit_chapters","description":"Change the chapters: add (name, from_ms, to_ms), rename (name, new_name), retime (name, from_ms, to_ms), remove (name) or clear_all. Chapters are found by exact"},{"name":"undo_last_change","description":"Undo the last change you made in the editor. It refuses when the user edited those axes since, so it never undoes the user's own work."},{"name":"control_playback","description":"Play, pause or jump to at_ms in the user's editor, for example to have the user watch and feel one part. play and pause need a loaded video."},{"name":"look_at_video","description":"See frames of the user's video as small pictures: one at at_ms, or up to 6 spread evenly from from_ms to to_ms. Use it to see what happens in a part, not to tim"}],"toolCount":16,"toolsHash":"65b052fb59bae4f00270f8e7c99a47a010166adcd102ec8b0fef33a5ac84966e","serverName":"scriptcompiler-motion","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-26T09:35:24.341Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":463,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer error=\"invalid_token\", error_description=\"Authentication required\", resource_metadata=\"https://mcp.scriptcompiler.com/.well-known/oauth-protected-resource/account/mcp\""}},{"at":"2026-10-26T08:27:11.987Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":455,"error":null,"detail":{"tools":[{"name":"create_motion","description":"Render a described motion (or exact funscript points) and show it without playing it on a device. Needs no connection key. To play it afterwards, call play_moti"},{"name":"export_funscript","description":"The motion as a .funscript file with ScriptCompiler metadata, for the motion card's Download button."},{"name":"play_motion","description":"Render a described motion (or exact funscript points) and play it on the user's device, replacing anything already playing. Returns what will actually play."},{"name":"stop_motion","description":"Stop whatever is playing on the user's device."},{"name":"read_script","description":"Overview of the script open in the user's ScriptCompiler editor: each axis with its points, range, strokes and speed, parts too fast for devices (over 400 units"},{"name":"read_points","description":"The points of one axis between from_ms and to_ms, thinned out evenly past 400 points, plus a summary of that range: main stroke frequency, position range and wh"},{"name":"write_points","description":"Replace a time range on one axis with a described motion (sections, the same as play_motion) or with exact points. With sections the motion starts at from_ms an"},{"name":"edit_points","description":"Add, move or delete single points on one axis at exact times. Every other point stays as it is. add puts each point exactly where given and replaces an existing"},{"name":"clear_points","description":"Delete points. Give axis to clear one axis, or leave it out for every axis. Give from_ms and to_ms to clear only that range. Only when the user asks to clear, d"},{"name":"write_coordinated_axes","description":"Write several axes at once from one shared stroke rhythm, so all axes keep the same beat. schedule is an ordered, gap-free list of cycles (start_ms, duration_ms"},{"name":"derive_axis","description":"Build target_axis from source_axis over the whole script. method follow makes a scaled, optionally inverted copy shifted by delay_ms and position_offset, for ex"},{"name":"run_editor_tool","description":"Run one of the editor's own Tools panel tools (Smoothing, Speed Limiter, Simplify and the rest) on an axis, as if the user ran it. read_script lists the ids and"},{"name":"edit_chapters","description":"Change the chapters: add (name, from_ms, to_ms), rename (name, new_name), retime (name, from_ms, to_ms), remove (name) or clear_all. Chapters are found by exact"},{"name":"undo_last_change","description":"Undo the last change you made in the editor. It refuses when the user edited those axes since, so it never undoes the user's own work."},{"name":"control_playback","description":"Play, pause or jump to at_ms in the user's editor, for example to have the user watch and feel one part. play and pause need a loaded video."},{"name":"look_at_video","description":"See frames of the user's video as small pictures: one at at_ms, or up to 6 spread evenly from from_ms to to_ms. Use it to see what happens in a part, not to tim"}],"toolCount":16,"toolsHash":"65b052fb59bae4f00270f8e7c99a47a010166adcd102ec8b0fef33a5ac84966e","serverName":"scriptcompiler-motion","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-26T02:26:54.776Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":443,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer error=\"invalid_token\", error_description=\"Authentication required\", resource_metadata=\"https://mcp.scriptcompiler.com/.well-known/oauth-protected-resource/account/mcp\""}},{"at":"2026-10-26T01:33:46.947Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":450,"error":null,"detail":{"tools":[{"name":"create_motion","description":"Render a described motion (or exact funscript points) and show it without playing it on a device. Needs no connection key. To play it afterwards, call play_moti"},{"name":"export_funscript","description":"The motion as a .funscript file with ScriptCompiler metadata, for the motion card's Download button."},{"name":"play_motion","description":"Render a described motion (or exact funscript points) and play it on the user's device, replacing anything already playing. Returns what will actually play."},{"name":"stop_motion","description":"Stop whatever is playing on the user's device."},{"name":"read_script","description":"Overview of the script open in the user's ScriptCompiler editor: each axis with its points, range, strokes and speed, parts too fast for devices (over 400 units"},{"name":"read_points","description":"The points of one axis between from_ms and to_ms, thinned out evenly past 400 points, plus a summary of that range: main stroke frequency, position range and wh"},{"name":"write_points","description":"Replace a time range on one axis with a described motion (sections, the same as play_motion) or with exact points. With sections the motion starts at from_ms an"},{"name":"edit_points","description":"Add, move or delete single points on one axis at exact times. Every other point stays as it is. add puts each point exactly where given and replaces an existing"},{"name":"clear_points","description":"Delete points. Give axis to clear one axis, or leave it out for every axis. Give from_ms and to_ms to clear only that range. Only when the user asks to clear, d"},{"name":"write_coordinated_axes","description":"Write several axes at once from one shared stroke rhythm, so all axes keep the same beat. schedule is an ordered, gap-free list of cycles (start_ms, duration_ms"},{"name":"derive_axis","description":"Build target_axis from source_axis over the whole script. method follow makes a scaled, optionally inverted copy shifted by delay_ms and position_offset, for ex"},{"name":"run_editor_tool","description":"Run one of the editor's own Tools panel tools (Smoothing, Speed Limiter, Simplify and the rest) on an axis, as if the user ran it. read_script lists the ids and"},{"name":"edit_chapters","description":"Change the chapters: add (name, from_ms, to_ms), rename (name, new_name), retime (name, from_ms, to_ms), remove (name) or clear_all. Chapters are found by exact"},{"name":"undo_last_change","description":"Undo the last change you made in the editor. It refuses when the user edited those axes since, so it never undoes the user's own work."},{"name":"control_playback","description":"Play, pause or jump to at_ms in the user's editor, for example to have the user watch and feel one part. play and pause need a loaded video."},{"name":"look_at_video","description":"See frames of the user's video as small pictures: one at at_ms, or up to 6 spread evenly from from_ms to to_ms. Use it to see what happens in a part, not to tim"}],"toolCount":16,"toolsHash":"65b052fb59bae4f00270f8e7c99a47a010166adcd102ec8b0fef33a5ac84966e","serverName":"scriptcompiler-motion","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-25T19:28:33.508Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":535,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer error=\"invalid_token\", error_description=\"Authentication required\", resource_metadata=\"https://mcp.scriptcompiler.com/.well-known/oauth-protected-resource/account/mcp\""}},{"at":"2026-10-25T18:29:01.975Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":459,"error":null,"detail":{"tools":[{"name":"create_motion","description":"Render a described motion (or exact funscript points) and show it without playing it on a device. Needs no connection key. To play it afterwards, call play_moti"},{"name":"export_funscript","description":"The motion as a .funscript file with ScriptCompiler metadata, for the motion card's Download button."},{"name":"play_motion","description":"Render a described motion (or exact funscript points) and play it on the user's device, replacing anything already playing. Returns what will actually play."},{"name":"stop_motion","description":"Stop whatever is playing on the user's device."},{"name":"read_script","description":"Overview of the script open in the user's ScriptCompiler editor: each axis with its points, range, strokes and speed, parts too fast for devices (over 400 units"},{"name":"read_points","description":"The points of one axis between from_ms and to_ms, thinned out evenly past 400 points, plus a summary of that range: main stroke frequency, position range and wh"},{"name":"write_points","description":"Replace a time range on one axis with a described motion (sections, the same as play_motion) or with exact points. With sections the motion starts at from_ms an"},{"name":"edit_points","description":"Add, move or delete single points on one axis at exact times. Every other point stays as it is. add puts each point exactly where given and replaces an existing"},{"name":"clear_points","description":"Delete points. Give axis to clear one axis, or leave it out for every axis. Give from_ms and to_ms to clear only that range. Only when the user asks to clear, d"},{"name":"write_coordinated_axes","description":"Write several axes at once from one shared stroke rhythm, so all axes keep the same beat. schedule is an ordered, gap-free list of cycles (start_ms, duration_ms"},{"name":"derive_axis","description":"Build target_axis from source_axis over the whole script. method follow makes a scaled, optionally inverted copy shifted by delay_ms and position_offset, for ex"},{"name":"run_editor_tool","description":"Run one of the editor's own Tools panel tools (Smoothing, Speed Limiter, Simplify and the rest) on an axis, as if the user ran it. read_script lists the ids and"},{"name":"edit_chapters","description":"Change the chapters: add (name, from_ms, to_ms), rename (name, new_name), retime (name, from_ms, to_ms), remove (name) or clear_all. Chapters are found by exact"},{"name":"undo_last_change","description":"Undo the last change you made in the editor. It refuses when the user edited those axes since, so it never undoes the user's own work."},{"name":"control_playback","description":"Play, pause or jump to at_ms in the user's editor, for example to have the user watch and feel one part. play and pause need a loaded video."},{"name":"look_at_video","description":"See frames of the user's video as small pictures: one at at_ms, or up to 6 spread evenly from from_ms to to_ms. Use it to see what happens in a part, not to tim"}],"toolCount":16,"toolsHash":"65b052fb59bae4f00270f8e7c99a47a010166adcd102ec8b0fef33a5ac84966e","serverName":"scriptcompiler-motion","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}}],"tools":null,"package":null,"toolSurface":{"id":"ts_a8g5bj9p3b55","endpointId":"ep_mtbt3nxryxa7","hash":"65b052fb59bae4f00270f8e7c99a47a010166adcd102ec8b0fef33a5ac84966e","toolCount":16,"serverName":"scriptcompiler-motion","serverVersion":"","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-25T11:29:18.778Z","lastSeenAt":"2026-10-26T22:25:53.731Z","observations":6,"toolNames":["create_motion","export_funscript","play_motion","stop_motion","read_script","read_points","write_points","edit_points","clear_points","write_coordinated_axes","derive_axis","run_editor_tool","edit_chapters","undo_last_change","control_playback","look_at_video"],"distinctSurfaces":1},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"com.scriptcompiler/scriptcompiler","url":"https://registry.modelcontextprotocol.io/v0/servers/com.scriptcompiler%2Fscriptcompiler","firstSeenAt":"2026-10-25T10:20:25.176Z","fetchedAt":"2026-10-25T10:20:25.176Z","normalizedAt":"2026-10-25T10:20:25.176Z"}]},"firstSeenAt":"2026-10-25T10:20:25.176Z","updatedAt":"2026-10-26T22:28:16.854Z"}