WordPress plugin — connect a listing site without programming
On this page
Isto Intents Holder lets AI assistants (ChatGPT, Claude and others) ask a WordPress listing site — cars or property — to keep looking for a person. The person confirms on that site with their own e-mail; the site e-mails the listings that fit. No code to write. Download the plugin (ZIP)
What happens#
- A person tells an assistant: "find me an estate car, petrol, up to 15 000 EUR".
- The assistant calls your site (
intent_publish_intent) with that sentence and nothing else — no name, no e-mail, no phone. - Your site answers with a link to its own confirmation page. The person opens it, types their e-mail, ticks the consent and confirms from the e-mail they receive.
- Once an hour the plugin compares every confirmed wish with your newest listings and e-mails the
ones that fit, each once, with a link to stop. The assistant can show the same listings
(
intent_list_matches), and every link leads to your listing page.
The person stays your visitor and your subscriber. Contact data is entered only on your site.
Install (10 minutes)#
- Plugins → Add New → Upload Plugin, choose the ZIP, Activate. The plugin creates its
tables, a confirmation page (
/intent/) and an hourly task. - Settings → Isto Intents: your name, the contact published in the descriptor (a role address
such as
info@…), country, categories (vehicles, property), languages, the currency of a private price limit, and — the one setting nothing works without — the post type of your listings. If your price is in a custom field, enter its key (price,_price, …). - Press Check readiness (with a trial run). The registry at istointents.org reads your
descriptor, calls your MCP server and tries the four tools once with a test wish it withdraws at
once. When it answers
"ready": true, press Submit to the registry.
Your MCP server is https://<your domain>/wp-json/isto-intents/v1/mcp; the descriptor that tells
assistants and the registry about it is https://<your domain>/.well-known/isto-intents.json.
Requirements#
- WordPress 6.5 or newer, PHP 8.1 or newer, MySQL/MariaDB (or the SQLite Database Integration).
- HTTPS on the public domain.
- For
/.well-known/isto-intents.json: pretty permalinks and WordPress at the root of the domain. Otherwise the settings page tells you so and links the descriptor, which you save there as a file. - E-mails go through
wp_mail(), so whatever SMTP plugin your site uses delivers them.
How listings are matched — and its limits#
By default a listing fits when its title, text and categories contain every word of the wish (without diacritics, and by the beginning of the word: "kombi" finds "kombík"), and — if you mapped a price field — its price is within the limit the person stated. Words such as "car", "want" or "up to" are ignored in English, Slovak, Czech, German, Hungarian and Polish. Numbers it cannot place (a year, a mileage) are reported to the assistant as not understood, so the person is told before confirming.
That is deliberately plain. A portal with its own search replaces it with one filter:
add_filter( 'isto_intents_holder_find_matches', function ( $none, $intent ) {
$out = array();
foreach ( my_portal_search( $intent->statement, $intent->hiddenLimitAmount ) as $row ) {
$out[] = new IstoIntents\Holder\Listing( $row['url'], $row['title'], $row['price'], 'EUR' );
}
return $out; // best first; each url is delivered once
}, 10, 2 );
isto_intents_holder_listing_text adds your own fields (make, fuel, rooms) to the default matching.
Forwarding#
The Isto Intents forwarder (istointents.com/mcp) hands wishes from assistants that do not know
your site yet to the portals that asked for them. Tick Forwarding to ask for them under the
forwarding terms. Optionally, ask for a forwarder key for your host
through istointents.com: signed forwarder calls then get their
own, larger limit instead of sharing the limit per network.
What leaves your site#
Nothing, unless an operator presses one of the two buttons on the settings page; those send your host name to istointents.org. The plugin has no other outgoing calls, no tracking and no account.
Privacy#
- The assistant never passes a contact; a tool call with an
email(or any undeclared) argument is refused. - The
intentCodeand the confirmation tokens are stored only as SHA-256. - When a wish ends — stopped by the person, withdrawn by the assistant, expired — its e-mail address and private price limit are deleted at once; the rest a day later.
- Tools → Export / Erase Personal Data covers the wishes of an e-mail address. The plugin suggests a paragraph for your privacy policy.
- Deleting the plugin deletes its tables, settings, key and the confirmation page it created.
Languages#
English, Slovak, Czech, German, Hungarian and Polish. The pages a person sees and the e-mails follow the site language; what the assistant reads stays in English, because the assistant translates it.
For software vendors and developers#
The plugin is the PHP library with a settings page. Your platform is not WordPress? Use the library directly — three routes and one method for your search.
Verified before publishing, on WordPress 7.1.3 with PHP 8.2 and MariaDB 11.4: the registry's check
and trial run — the same code, run locally against the plugin — answer ready: true and
readyForForwarding: true; a person's whole path works — wish, confirmation page, e-mail,
confirmation, hourly matching, the listings in intent_list_matches, the stop link — with the page
and the e-mails checked in English, Slovak and Czech; export, erasure and deletion leave no data
behind.
Licence: GPL-2.0-or-later (LICENSE.txt), as WordPress requires of its plugins; the specification and the rest of the protocol's public part stay under CC BY 4.0.