← WebMCP Directory

Tool tree

task-fence.vercel.app

AI & AgentsTools verified
Website
TaskFence is a live, human-controlled delegation layer enforced at the WebMCP tool-call boundary. Hand an AI agent a multi-step web task without handing over unlimited authority.
Explore capabilities

    page: Every page

    listWorkspacesAnswer

    List every workspace this site currently has, with its title and the WebMCP tools it registers. Call this before getDelegation if you are not sure which workspace id to use.

    View tool JSON
    {
      "name": "listWorkspaces",
      "kind": "answer",
      "impl": "imperative",
      "description": "List every workspace this site currently has, with its title and the WebMCP tools it registers. Call this before getDelegation if you are not sure which workspace id to use.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    getDelegationAnswer

    Read the delegation the human has granted for this task: what you may do, what is off limits, and what needs their approval. Call this FIRST, before you touch anything, and follow it exactly.

    View tool JSON
    {
      "name": "getDelegation",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the delegation the human has granted for this task: what you may do, what is off limits, and what needs their approval. Call this FIRST, before you touch anything, and follow it exactly.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workspace": {
            "type": "string",
            "enum": [
              "custom",
              "scholarship",
              "job",
              "subscriptions"
            ],
            "description": "Which workspace on this site you are working in — call getTools or listWorkspaces to see the current list. Defaults to the workspace open on screen."
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    proposeDelegationContractAction

    Turn what the human just asked you to do into a structured set of boundaries, and show it to them for approval. Nothing you propose takes effect until the human accepts it on screen. Use this when no delegation is active yet.

    View tool JSON
    {
      "name": "proposeDelegationContract",
      "kind": "act",
      "impl": "imperative",
      "description": "Turn what the human just asked you to do into a structured set of boundaries, and show it to them for approval. Nothing you propose takes effect until the human accepts it on screen. Use this when no delegation is active yet.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workspace": {
            "type": "string",
            "enum": [
              "custom",
              "scholarship",
              "job",
              "subscriptions"
            ],
            "description": "Which workspace on this site you are working in — call getTools or listWorkspaces to see the current list. Defaults to the workspace open on screen."
          },
          "statement": {
            "type": "string",
            "description": "The human's request, in their own words, as close to verbatim as you can."
          },
          "rules": {
            "type": "array",
            "description": "The boundaries you read out of their request.",
            "items": {
              "type": "object",
              "properties": {
                "effect": {
                  "type": "string",
                  "enum": [
                    "allow",
                    "deny",
                    "ask"
                  ]
                },
                "tools": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Tool names this rule covers."
                },
                "operations": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "READ",
                      "WRITE",
                      "UPLOAD",
                      "SUBMIT",
                      "DELETE"
                    ]
                  }
                },
                "fields": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "fieldState": {
                  "type": "string",
                  "enum": [
                    "answered",
                    "empty",
                    "any"
                  ]
                },
                "sources": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "document",
                      "human",
                      "inference"
                    ]
                  }
                },
                "label": {
                  "type": "string",
                  "description": "Plain language, for the human to read."
                },
                "reason": {
                  "type": "string"
                }
              },
              "required": [
                "effect",
                "label"
              ]
            }
          }
        },
        "required": [
          "statement",
          "rules"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    requestPermissionAction

    Ask the human for permission BEFORE attempting something you think is outside your delegation. If they agree, TaskFence mints a narrow one-time grant for exactly that action, and your next call will go through. Politer and clearer than triggering a block.

    View tool JSON
    {
      "name": "requestPermission",
      "kind": "act",
      "impl": "imperative",
      "description": "Ask the human for permission BEFORE attempting something you think is outside your delegation. If they agree, TaskFence mints a narrow one-time grant for exactly that action, and your next call will go through. Politer and clearer than triggering a block.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workspace": {
            "type": "string",
            "enum": [
              "custom",
              "scholarship",
              "job",
              "subscriptions"
            ],
            "description": "Which workspace on this site you are working in — call getTools or listWorkspaces to see the current list. Defaults to the workspace open on screen."
          },
          "tool": {
            "type": "string",
            "description": "The tool you want to call."
          },
          "field": {
            "type": "string",
            "description": "The field or record you want to act on, if any."
          },
          "reason": {
            "type": "string",
            "description": "Why you want to do it, in plain language the human will read."
          }
        },
        "required": [
          "tool",
          "reason"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    explainLastDecisionAnswer

    Get the plain-language reason for the most recent TaskFence decision on this task, so you can explain to the human why something did or did not happen.

    View tool JSON
    {
      "name": "explainLastDecision",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get the plain-language reason for the most recent TaskFence decision on this task, so you can explain to the human why something did or did not happen.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workspace": {
            "type": "string",
            "enum": [
              "custom",
              "scholarship",
              "job",
              "subscriptions"
            ],
            "description": "Which workspace on this site you are working in — call getTools or listWorkspaces to see the current list. Defaults to the workspace open on screen."
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    getRecordAnswer

    Read the record: every field, its current value, and whether it is already answered or still blank. Start here.

    View tool JSON
    {
      "name": "getRecord",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the record: every field, its current value, and whether it is already answered or still blank. Start here.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    getRecordRequirementsAnswer

    Read what this record requires, grouped into blocks, plus which required fields are still blank.

    View tool JSON
    {
      "name": "getRecordRequirements",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read what this record requires, grouped into blocks, plus which required fields are still blank.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    listRecordDocumentsAnswer

    List the supporting documents on this page with a one-line summary of each. Use the read-document tool to get what is inside one.

    View tool JSON
    {
      "name": "listRecordDocuments",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the supporting documents on this page with a one-line summary of each. Use the read-document tool to get what is inside one.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    readRecordDocumentAnswer

    Read the text of one supporting document. Values taken from here can be written with source="document".

    View tool JSON
    {
      "name": "readRecordDocument",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the text of one supporting document. Values taken from here can be written with source=\"document\".",
      "inputSchema": {
        "type": "object",
        "properties": {
          "documentId": {
            "type": "string",
            "description": "Document id from the list-documents tool."
          }
        },
        "required": [
          "documentId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    attachRecordDocumentAction

    Attach one of the documents on this page to the record, so it is formally part of the submission. Only the human can add files — you may attach what is already there, never invent a document.

    View tool JSON
    {
      "name": "attachRecordDocument",
      "kind": "act",
      "impl": "imperative",
      "description": "Attach one of the documents on this page to the record, so it is formally part of the submission. Only the human can add files — you may attach what is already there, never invent a document.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "documentId": {
            "type": "string",
            "description": "Document id from the list-documents tool."
          }
        },
        "required": [
          "documentId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    updateRecordAction

    Write a value into one field of the record. IMPORTANT: set `source` honestly — "document" if you read the value out of a document on this page, "human" if the person just told you, "inference" if you worked it out yourself. The active delegation may allow, block or pause the write depending on the source and on whether the field is already answered. This site VERIFIES a "document" claim against the document's actual text: if the value is not in it, the write is treated as "inference" instead and will usually be sent to the human. Claiming "document" for a value you did not read there gains you nothing.

    View tool JSON
    {
      "name": "updateRecord",
      "kind": "act",
      "impl": "imperative",
      "description": "Write a value into one field of the record. IMPORTANT: set `source` honestly — \"document\" if you read the value out of a document on this page, \"human\" if the person just told you, \"inference\" if you worked it out yourself. The active delegation may allow, block or pause the write depending on the source and on whether the field is already answered. This site VERIFIES a \"document\" claim against the document's actual text: if the value is not in it, the write is treated as \"inference\" instead and will usually be sent to the human. Claiming \"document\" for a value you did not read there gains you nothing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "description": "Field id, from the read tool."
          },
          "value": {
            "type": "string",
            "description": "The value to write."
          },
          "source": {
            "type": "string",
            "enum": [
              "document",
              "human",
              "inference"
            ],
            "description": "Where this value came from."
          },
          "documentId": {
            "type": "string",
            "description": "If source is \"document\", which document it came from."
          }
        },
        "required": [
          "field",
          "value"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    submitRecordSensitive Action

    Submit the completed record. This is final and cannot be undone. TaskFence always pauses this for explicit human approval, whatever the delegation says.

    View tool JSON
    {
      "name": "submitRecord",
      "kind": "transact",
      "impl": "imperative",
      "description": "Submit the completed record. This is final and cannot be undone. TaskFence always pauses this for explicit human approval, whatever the delegation says.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "confirm": {
            "type": "boolean",
            "description": "Set true to indicate you believe the record is complete."
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    checkRecordAnswer

    Check every answer already on the record for values that do not look valid — a malformed email address, a phone number with letters in it, a date that is not a date, a blank line left over from a printed form. Read-only: it reports problems and changes nothing. Use it to tell the human what is wrong; fixing anything still needs a write, which the delegation governs.

    View tool JSON
    {
      "name": "checkRecord",
      "kind": "answer",
      "impl": "imperative",
      "description": "Check every answer already on the record for values that do not look valid — a malformed email address, a phone number with letters in it, a date that is not a date, a blank line left over from a printed form. Read-only: it reports problems and changes nothing. Use it to tell the human what is wrong; fixing anything still needs a write, which the delegation governs.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    getApplicationAnswer

    Read the application: every field, its current value, and whether it is already answered or still blank. Start here.

    View tool JSON
    {
      "name": "getApplication",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the application: every field, its current value, and whether it is already answered or still blank. Start here.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    getRequirementsAnswer

    Read what this application requires, grouped into blocks, plus which required fields are still blank.

    View tool JSON
    {
      "name": "getRequirements",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read what this application requires, grouped into blocks, plus which required fields are still blank.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    listDocumentsAnswer

    List the supporting documents on this page with a one-line summary of each. Use the read-document tool to get what is inside one.

    View tool JSON
    {
      "name": "listDocuments",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the supporting documents on this page with a one-line summary of each. Use the read-document tool to get what is inside one.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    readDocumentAnswer

    Read the text of one supporting document. Values taken from here can be written with source="document".

    View tool JSON
    {
      "name": "readDocument",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the text of one supporting document. Values taken from here can be written with source=\"document\".",
      "inputSchema": {
        "type": "object",
        "properties": {
          "documentId": {
            "type": "string",
            "description": "Document id from the list-documents tool."
          }
        },
        "required": [
          "documentId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    uploadDocumentAction

    Attach one of the documents on this page to the record, so it is formally part of the submission. Only the human can add files — you may attach what is already there, never invent a document.

    View tool JSON
    {
      "name": "uploadDocument",
      "kind": "act",
      "impl": "imperative",
      "description": "Attach one of the documents on this page to the record, so it is formally part of the submission. Only the human can add files — you may attach what is already there, never invent a document.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "documentId": {
            "type": "string",
            "description": "Document id from the list-documents tool."
          }
        },
        "required": [
          "documentId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    updateApplicationAction

    Write a value into one field of the application. IMPORTANT: set `source` honestly — "document" if you read the value out of a document on this page, "human" if the person just told you, "inference" if you worked it out yourself. The active delegation may allow, block or pause the write depending on the source and on whether the field is already answered. This site VERIFIES a "document" claim against the document's actual text: if the value is not in it, the write is treated as "inference" instead and will usually be sent to the human. Claiming "document" for a value you did not read there gains you nothing.

    View tool JSON
    {
      "name": "updateApplication",
      "kind": "act",
      "impl": "imperative",
      "description": "Write a value into one field of the application. IMPORTANT: set `source` honestly — \"document\" if you read the value out of a document on this page, \"human\" if the person just told you, \"inference\" if you worked it out yourself. The active delegation may allow, block or pause the write depending on the source and on whether the field is already answered. This site VERIFIES a \"document\" claim against the document's actual text: if the value is not in it, the write is treated as \"inference\" instead and will usually be sent to the human. Claiming \"document\" for a value you did not read there gains you nothing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "description": "Field id, from the read tool."
          },
          "value": {
            "type": "string",
            "description": "The value to write."
          },
          "source": {
            "type": "string",
            "enum": [
              "document",
              "human",
              "inference"
            ],
            "description": "Where this value came from."
          },
          "documentId": {
            "type": "string",
            "description": "If source is \"document\", which document it came from."
          }
        },
        "required": [
          "field",
          "value"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    submitApplicationSensitive Action

    Submit the completed application. This is final and cannot be undone. TaskFence always pauses this for explicit human approval, whatever the delegation says.

    View tool JSON
    {
      "name": "submitApplication",
      "kind": "transact",
      "impl": "imperative",
      "description": "Submit the completed application. This is final and cannot be undone. TaskFence always pauses this for explicit human approval, whatever the delegation says.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "confirm": {
            "type": "boolean",
            "description": "Set true to indicate you believe the record is complete."
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    checkApplicationAnswer

    Check every answer already on the application for values that do not look valid — a malformed email address, a phone number with letters in it, a date that is not a date, a blank line left over from a printed form. Read-only: it reports problems and changes nothing. Use it to tell the human what is wrong; fixing anything still needs a write, which the delegation governs.

    View tool JSON
    {
      "name": "checkApplication",
      "kind": "answer",
      "impl": "imperative",
      "description": "Check every answer already on the application for values that do not look valid — a malformed email address, a phone number with letters in it, a date that is not a date, a blank line left over from a printed form. Read-only: it reports problems and changes nothing. Use it to tell the human what is wrong; fixing anything still needs a write, which the delegation governs.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    getJobApplicationAnswer

    Read the application: every field, its current value, and whether it is already answered or still blank. Start here.

    View tool JSON
    {
      "name": "getJobApplication",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the application: every field, its current value, and whether it is already answered or still blank. Start here.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    getJobRequirementsAnswer

    Read what this application requires, grouped into blocks, plus which required fields are still blank.

    View tool JSON
    {
      "name": "getJobRequirements",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read what this application requires, grouped into blocks, plus which required fields are still blank.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    listJobDocumentsAnswer

    List the supporting documents on this page with a one-line summary of each. Use the read-document tool to get what is inside one.

    View tool JSON
    {
      "name": "listJobDocuments",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the supporting documents on this page with a one-line summary of each. Use the read-document tool to get what is inside one.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    readJobDocumentAnswer

    Read the text of one supporting document. Values taken from here can be written with source="document".

    View tool JSON
    {
      "name": "readJobDocument",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the text of one supporting document. Values taken from here can be written with source=\"document\".",
      "inputSchema": {
        "type": "object",
        "properties": {
          "documentId": {
            "type": "string",
            "description": "Document id from the list-documents tool."
          }
        },
        "required": [
          "documentId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    attachJobDocumentAction

    Attach one of the documents on this page to the record, so it is formally part of the submission. Only the human can add files — you may attach what is already there, never invent a document.

    View tool JSON
    {
      "name": "attachJobDocument",
      "kind": "act",
      "impl": "imperative",
      "description": "Attach one of the documents on this page to the record, so it is formally part of the submission. Only the human can add files — you may attach what is already there, never invent a document.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "documentId": {
            "type": "string",
            "description": "Document id from the list-documents tool."
          }
        },
        "required": [
          "documentId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    updateJobApplicationAction

    Write a value into one field of the application. IMPORTANT: set `source` honestly — "document" if you read the value out of a document on this page, "human" if the person just told you, "inference" if you worked it out yourself. The active delegation may allow, block or pause the write depending on the source and on whether the field is already answered. This site VERIFIES a "document" claim against the document's actual text: if the value is not in it, the write is treated as "inference" instead and will usually be sent to the human. Claiming "document" for a value you did not read there gains you nothing.

    View tool JSON
    {
      "name": "updateJobApplication",
      "kind": "act",
      "impl": "imperative",
      "description": "Write a value into one field of the application. IMPORTANT: set `source` honestly — \"document\" if you read the value out of a document on this page, \"human\" if the person just told you, \"inference\" if you worked it out yourself. The active delegation may allow, block or pause the write depending on the source and on whether the field is already answered. This site VERIFIES a \"document\" claim against the document's actual text: if the value is not in it, the write is treated as \"inference\" instead and will usually be sent to the human. Claiming \"document\" for a value you did not read there gains you nothing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "description": "Field id, from the read tool."
          },
          "value": {
            "type": "string",
            "description": "The value to write."
          },
          "source": {
            "type": "string",
            "enum": [
              "document",
              "human",
              "inference"
            ],
            "description": "Where this value came from."
          },
          "documentId": {
            "type": "string",
            "description": "If source is \"document\", which document it came from."
          }
        },
        "required": [
          "field",
          "value"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    submitJobApplicationSensitive Action

    Submit the completed application. This is final and cannot be undone. TaskFence always pauses this for explicit human approval, whatever the delegation says.

    View tool JSON
    {
      "name": "submitJobApplication",
      "kind": "transact",
      "impl": "imperative",
      "description": "Submit the completed application. This is final and cannot be undone. TaskFence always pauses this for explicit human approval, whatever the delegation says.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "confirm": {
            "type": "boolean",
            "description": "Set true to indicate you believe the record is complete."
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    checkJobApplicationAnswer

    Check every answer already on the application for values that do not look valid — a malformed email address, a phone number with letters in it, a date that is not a date, a blank line left over from a printed form. Read-only: it reports problems and changes nothing. Use it to tell the human what is wrong; fixing anything still needs a write, which the delegation governs.

    View tool JSON
    {
      "name": "checkJobApplication",
      "kind": "answer",
      "impl": "imperative",
      "description": "Check every answer already on the application for values that do not look valid — a malformed email address, a phone number with letters in it, a date that is not a date, a blank line left over from a printed form. Read-only: it reports problems and changes nothing. Use it to tell the human what is wrong; fixing anything still needs a write, which the delegation governs.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    listSubscriptionsAnswer

    List every subscription on the account with its plan, monthly price, renewal date, status and when it was last used.

    View tool JSON
    {
      "name": "listSubscriptions",
      "kind": "answer",
      "impl": "imperative",
      "description": "List every subscription on the account with its plan, monthly price, renewal date, status and when it was last used.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    getSubscriptionAnswer

    Read one subscription in detail, including the plans it can be moved to.

    View tool JSON
    {
      "name": "getSubscription",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read one subscription in detail, including the plans it can be moved to.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "subscriptionId": {
            "type": "string",
            "description": "Id from listSubscriptions."
          }
        },
        "required": [
          "subscriptionId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    getSpendSummaryAnswer

    Read a summary of monthly and annual spend, broken down by category and by how recently each service was used.

    View tool JSON
    {
      "name": "getSpendSummary",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read a summary of monthly and annual spend, broken down by category and by how recently each service was used.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    changePlanSensitive Action

    Move a subscription to a different plan (for example, downgrade it). Reversible.

    View tool JSON
    {
      "name": "changePlan",
      "kind": "transact",
      "impl": "imperative",
      "description": "Move a subscription to a different plan (for example, downgrade it). Reversible.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "subscriptionId": {
            "type": "string"
          },
          "plan": {
            "type": "string",
            "description": "One of availablePlans for that subscription."
          }
        },
        "required": [
          "subscriptionId",
          "plan"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    pauseSubscriptionSensitive Action

    Pause a subscription. Reversible — billing stops until it is resumed.

    View tool JSON
    {
      "name": "pauseSubscription",
      "kind": "transact",
      "impl": "imperative",
      "description": "Pause a subscription. Reversible — billing stops until it is resumed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "subscriptionId": {
            "type": "string"
          }
        },
        "required": [
          "subscriptionId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    setRenewalReminderAction

    Set a reminder before a subscription renews. Reversible and low risk.

    View tool JSON
    {
      "name": "setRenewalReminder",
      "kind": "act",
      "impl": "imperative",
      "description": "Set a reminder before a subscription renews. Reversible and low risk.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "subscriptionId": {
            "type": "string"
          },
          "when": {
            "type": "string",
            "description": "e.g. \"3 days before renewal\"."
          }
        },
        "required": [
          "subscriptionId",
          "when"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    cancelSubscriptionSensitive Action

    Cancel a subscription outright. This is irreversible in this demo, so TaskFence always pauses it for explicit human approval.

    View tool JSON
    {
      "name": "cancelSubscription",
      "kind": "transact",
      "impl": "imperative",
      "description": "Cancel a subscription outright. This is irreversible in this demo, so TaskFence always pauses it for explicit human approval.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "subscriptionId": {
            "type": "string"
          }
        },
        "required": [
          "subscriptionId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }