Skip to main content
Glama

LeoWorks Review & Lead Data Tools (via Apify MCP)

leoworks/japanese-review-classifier

leoworks--japanese-review-classifier
Destructive

This tool calls the Actor "leoworks/japanese-review-classifier" and retrieves its output results. Actor description: Classify Japanese reviews (Rakuten 楽天レビュー) into complaint types, sentiment and purchase motive — Japanese review sentiment analysis (レビュー分析). Use for Japanese; for Korean use leoworks/korean-review-classifier. datasetId (text auto-detected) or texts. ~100 reviews/5 s, pay per review.

Input Schema

NameRequiredDescriptionDefault
textsNoPaste review texts directly (one per line). Use this OR “Reviews dataset”. Example values: ["ダンボールが潰れて届きました。中身は無事でしたが、梱包をもう少し丁寧にしてほしいです。","すぐ壊れました。充電できません。返品したいです。"]
idFieldsNoFields copied unchanged from each input item to the output so you can join results back (e.g. reviewId, productId). Leave empty to auto-pick reviewId/id/url.
maxItemsNoClassify at most this many reviews (0 = all).
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
datasetIdNoAn Apify dataset containing reviews — for example the output of a Rakuten review scraper. Use this OR “Review texts”.
textFieldNoField holding the review text. Leave empty to auto-detect (content, text, review, body, reviewText, …).
outputModeNoMinimal mode returns only label keys — smaller and easier to aggregate. Example values: "full"full
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
customLabelsNoUp to 10 extra yes/no labels (each up to 200 characters) written in plain language (English or Japanese), e.g. “mentions the smell”, “配達員の対応が悪い”. Each gets a probability.
maxConcurrencyNoReviews classified in parallel. Example values: 10
extraTextFieldsNoFields to prepend to the text (up to 5), e.g. `title` for Coupang review headlines. Leave empty if unsure.
summaryGroupFieldNoField in your dataset that identifies the product (e.g. `productId`, `productName`, `placeId`). The run then saves a REPORT record with, per product: complaint rate and complaint mix, sentiment shares, purchase motives, average rating and 3 example complaints. Leave empty to detect it automatically (overall summary only if none is found). No extra charge.
complaintThresholdNoMinimum probability (0–1) for a complaint type or custom label to be reported. Raise it for fewer, surer labels. Example values: 0.5

Output Schema

NameRequiredDescriptionDefault
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "index": {
      +      "type": "number"
      +    },
      +    "labels": {
      +      "properties": {
      +        "complaint": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "labelJa": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "complaintScores": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "labelJa": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "motive": {
      +          "properties": {
      +            "confidence": {
      +              "type": "number"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "labelJa": {
      +              "type": "string"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "sentiment": {
      +          "properties": {
      +            "confidence": {
      +              "type": "number"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "labelJa": {
      +              "type": "string"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "model": {
      +      "type": "string"
      +    },
      +    "rating": {
      +      "type": "null"
      +    },
      +    "text": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "index": {
      -      "type": "number"
      -    },
      -    "labels": {
      -      "properties": {
      -        "complaint": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "labelJa": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "complaintScores": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "labelJa": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "motive": {
      -          "properties": {
      -            "confidence": {
      -              "type": "number"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "labelJa": {
      -              "type": "string"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "sentiment": {
      -          "properties": {
      -            "confidence": {
      -              "type": "number"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "labelJa": {
      -              "type": "string"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "model": {
      -      "type": "string"
      -    },
      -    "rating": {
      -      "type": "null"
      -    },
      -    "text": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
  3. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "index": {
      +      "type": "number"
      +    },
      +    "labels": {
      +      "properties": {
      +        "complaint": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "labelJa": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "complaintScores": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "labelJa": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "motive": {
      +          "properties": {
      +            "confidence": {
      +              "type": "number"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "labelJa": {
      +              "type": "string"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "sentiment": {
      +          "properties": {
      +            "confidence": {
      +              "type": "number"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "labelJa": {
      +              "type": "string"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "model": {
      +      "type": "string"
      +    },
      +    "rating": {
      +      "type": "null"
      +    },
      +    "text": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "index": {
      -      "type": "number"
      -    },
      -    "labels": {
      -      "properties": {
      -        "complaint": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "labelJa": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "complaintScores": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "labelJa": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "motive": {
      -          "properties": {
      -            "confidence": {
      -              "type": "number"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "labelJa": {
      -              "type": "string"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "sentiment": {
      -          "properties": {
      -            "confidence": {
      -              "type": "number"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "labelJa": {
      -              "type": "string"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "model": {
      -      "type": "string"
      -    },
      -    "rating": {
      -      "type": "null"
      -    },
      -    "text": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
  5. Added

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=true, which is misleading for what is essentially a classification read operation. The description adds useful throughput context (~100 reviews/5 s, pay per review, auto-detection of datasetId/texts), partially offsetting the annotation mismatch. However, it does not clarify the destructive-hint implication or the write/return profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and routing rule, then throughput and pricing. Slightly dense but no filler sentences; every clause about language, inputs, and cost is useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a classifier with an output schema and rich schema descriptions, the description covers purpose, language routing, input options, throughput, and cost. It omits detail on the output format, but the output schema and per-parameter descriptions cover that. The mismatch with the destructive annotation is the one notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 13 parameters thoroughly. The description only adds the auto-detection behavior for datasetId/texts and the pricing model, which is marginal over what the schema provides. Baseline 3 is appropriate when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource — classify Japanese reviews into complaint types, sentiment, and purchase motive — and explicitly distinguishes itself from the sibling leoworks/korean-review-classifier by language. An agent can route by language without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states when to use this tool (Japanese reviews) and names the alternative for Korean. It does not spell out when-not to use it versus, say, the amazon or google-maps review classifiers, but the language scoping is a strong routing signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.