# DinOdds & AI

With DinOdds 1.7.0 you can build odds tables from an AI chat. Ask Claude or
ChatGPT something like "which leagues have games this week?" or "add the NFL odds
table to a new draft called Week 9 picks", and it does the work on your website
for you.

This page explains how to set that up. If you are a developer using a coding
tool such as Claude Code, skip to
[Coding agents and developer tools](https://docs.affkraft.com/dinodds/ai#coding-agents-and-developer-tools).

***

## Manage your website from a chat with an AI agent

### How it works

An AI assistant doesn't log in to your dashboard and click around like you do.
Instead, your website gives it a list of specific tasks it is allowed to do,
such as "list leagues", "insert an odds block" or "update a sportsbook". WordPress
calls these tasks **abilities**.

To make this work you need three things:

1. **DinOdds** provides the abilities for odds data, odds blocks, display
   settings, sportsbooks and the feed. You choose which ones to offer on the
   **DinOdds → AI & Abilities** tab.
2. **"[MCP Adapter](https://wordpress.org/plugins/mcp-adapter/)"**, a free
   plugin, lets AI apps connect to your website and use those abilities.
3. **"[Enable Abilities for MCP](https://wordpress.org/plugins/enable-abilities-for-mcp/)"**,
   a free plugin, adds the sign-in. When you connect a chat app, you log in to
   your WordPress website and approve the connection, much like "Sign in with
   Google" on other websites.

The assistant then works as the WordPress user you signed in with. If that user
isn't allowed to do something, the assistant can't do it either.

> **Warning**
>
> AI abilities need WordPress 6.9 or newer. On older versions the
> **AI & Abilities** tab shows a notice; update WordPress to use them. The rest of
> DinOdds works on WordPress 6.0 and newer.
>
> Your website must also be online and use HTTPS, because the chat app connects
> to it over the internet. A local website, or a staging website behind a
> password, won't work.

### Set it up

1. **Install the plugins.** Go to **DinOdds → AI & Abilities**. The
   **Requirements** box at the top shows whether WordPress 6.9, MCP Adapter and
   the chat app sign-in are ready, with the MCP endpoint address once MCP
   Adapter is active.
2. **Choose what the assistant can do.** On the same tab, tick **Enable
   abilities**, then tick the groups you want and click **Save changes**. The
   default groups let the assistant read odds data, build and insert odds
   blocks in drafts and change the display defaults, but not touch your
   affiliate links or refresh the feed.
3. **Turn on sign-in.** Go to **Settings → WP Abilities**, open the
   **Connection** tab and turn on the OAuth connector.
4. **Connect your chat app.** In your chat app, add a *custom connector* and
   paste your website address. You'll be sent to your WordPress login page:
   sign in and approve.
5. **Try it.** Start a new chat, make sure the connector is switched on for it,
   and ask "list my leagues".

Where to add a custom connector depends on the app. Menu names change often, so
treat these as a guide:

| App | Where |
| --- | --- |
| Claude | **Settings → Connectors → Add custom connector** |
| ChatGPT | Turn on Developer Mode in **Settings → Apps & Connectors → Advanced settings**, then create a connector with your website address and OAuth sign-in. Paid plans only, at the time of writing. |

> **Tip**
>
> "Enable Abilities for MCP" also comes with its own abilities for posts, pages,
> media and more. DinOdds doesn't need them, so turn on only the ones you want on
> its **Abilities** tab.

### The AI & Abilities tab

**Requirements** tells you whether everything is ready. A green mark means that
part is fine; otherwise you see what's missing, usually with a button or link to
fix it.

* **MCP Adapter** and **Chat app sign-in (OAuth)** show whether the two plugins
  are active.
* **DinOdds abilities** shows how many abilities are currently offered, and
  from how many groups. It reads *Off* while the main switch is off.
* Abilities that "Enable Abilities for MCP" has switched off on its own screen
  are marked as turned off there. Turn them back on there if you want to use
  them.

**Ability groups** starts with the main switch, **Enable abilities**. It is off
by default, and while it's off, DinOdds registers nothing, whatever the groups
below say. Below it, related abilities are grouped together, each with a
description, who can use it and whether it is on by default.

**Individual abilities (advanced)** lets you switch off a single ability inside
a group you turned on. For example, you can let the assistant read odds data but
not insert blocks into drafts.

### Ability groups

"Who can use it" means which WordPress users the assistant can sign in as to
use that group.

| Group | What it can do | Abilities | Who can use it | Default |
| --- | --- | --- | --- | --- |
| Odds data (read) | List leagues, sportsbooks and upcoming games, read cached odds and check the feed status | `dinodds/list-leagues`, `dinodds/list-bookies`, `dinodds/list-games`, `dinodds/get-odds`, `dinodds/get-feed-status` | Users who can edit posts (Author and up) | On |
| Content (drafts only) | Build odds blocks, insert them into draft posts, find where odds are used and change the settings of an odds block or shortcode | `dinodds/build-odds-block`, `dinodds/insert-odds-block`, `dinodds/find-odds-usage`, `dinodds/update-odds-block` | Users who can edit the specific post (new drafts need permission to edit posts) | On |
| Display settings | Read and change the site-wide display defaults | `dinodds/get-display-settings`, `dinodds/update-display-settings` | Administrators | On |
| Sportsbooks (affiliate links) | Read and change sportsbook logos, affiliate links and link behaviour, and reorder them | `dinodds/get-sportsbooks`, `dinodds/update-sportsbook`, `dinodds/reorder-sportsbooks` | Administrators | Off |
| Feed refresh | Fetch fresh odds from the feed now | `dinodds/refresh-feed` | Administrators | Off |

### The 15 abilities

| Ability | What it does |
| --- | --- |
| `dinodds/list-leagues` | Lists the leagues in your feed with the number of upcoming matches in each. |
| `dinodds/list-bookies` | Lists the sportsbooks in display order, with name and whether an affiliate link is set. The link itself is only included for administrators when the Sportsbooks group is on. |
| `dinodds/list-games` | Lists the upcoming games of a league (teams, date and time in US Eastern). |
| `dinodds/get-odds` | Returns the cached prices of a league's upcoming games per sportsbook, optionally for one game and one odds type. For reading and analysis only. |
| `dinodds/get-feed-status` | Returns the feed status, when it was last and will next be updated, the last error and matches per league. |
| `dinodds/build-odds-block` | Checks table settings (league, teams, sportsbooks) and returns the block markup and the equivalent `[odds]` shortcode. Changes nothing. |
| `dinodds/insert-odds-block` | Inserts an odds block (or shortcode) into a draft or pending post, or creates a new draft. |
| `dinodds/find-odds-usage` | Lists up to 20 posts and pages that contain an odds block or shortcode, with each one's settings. Only posts the user can edit are listed. |
| `dinodds/update-odds-block` | Changes the settings of an odds block or shortcode in a draft or pending post. Settings it doesn't manage, such as alignment and the CSS class, are kept, and it also works when the game has already started. |
| `dinodds/get-display-settings` | Returns the site-wide display defaults. |
| `dinodds/update-display-settings` | Changes the site-wide display defaults. Only the fields you send change. |
| `dinodds/get-sportsbooks` | Returns every sportsbook with its logo, affiliate link and link behaviour. |
| `dinodds/update-sportsbook` | Changes one sportsbook's logo, affiliate link, link target, sponsored flag and rel. |
| `dinodds/reorder-sportsbooks` | Sets the order the sportsbooks are shown in. |
| `dinodds/refresh-feed` | Fetches fresh odds now, the same update that runs hourly. |

### Keeping it safe

* **Use a separate WordPress user** for the assistant, with the Editor role,
  instead of your own Administrator account. Administrator-only groups (display,
  sportsbooks, feed) then won't work for it, which is a good default.
* **Start with the default groups** and turn on more only when you need them.
  The main switch is off until you turn it on, and an update never turns it on
  for you.
* **Drafts only.** New odds blocks go into drafts or pending posts. Published,
  scheduled and private posts are never changed by an ability, so you still
  review and publish yourself.
* **Nothing is deleted.** There are no abilities that delete anything.
* **Odds stay live.** Assistants are told to insert the block or shortcode, not
  to paste prices, so the table updates itself as the odds change.
* **Your Client ID stays private.** No ability returns your Client ID, license or
  update information, or the raw feed response.
* **Affiliate links are sensitive.** They decide where visitors go and who earns
  the commission, which is why the Sportsbooks group is off by default. Turn it
  on only when you want an assistant to manage them, and check what it changed.
* **Refreshing is rate-limited.** The feed can be refreshed by an assistant once
  every 5 minutes at most, and the limit is shared with **Update now** on the Overview tab.
* **Ask to see changes first**, especially for bulk edits: "show me the changes
  before saving".

### Things you can ask

* "Which leagues have upcoming games right now?"
* "What are the NFL games this week, and which sportsbooks have a spread for
  Buffalo Bills at Houston Texans?"
* "Add the NFL odds table to a new draft called Week 9 picks."
* "Add a single-match odds table for Buffalo Bills at Houston Texans after the
  heading Game preview in the draft *post name*."
* "Where do I use odds tables? Which of them use style 2?"
* "Change the odds table in the draft *post name* to show only MyBookie and
  BetOnline."
* "Switch my default odds type to moneyline."
* "Is my feed up to date?"

If the Sportsbooks group is on:

* "Which sportsbooks don't have an affiliate link yet?"
* "Move BetUS to the top of the list."

***

## Coding agents and developer tools

Tools such as Claude Code, Codex or Cursor don't need the chat-app sign-in, so
"Enable Abilities for MCP" isn't required. You still turn on the abilities in
**DinOdds → AI & Abilities**.

### MCP over HTTP

Needs the "MCP Adapter" plugin and a WordPress
[Application Password](https://wordpress.org/documentation/article/application-passwords/)
(**Users → Profile**). The `@automattic/mcp-wordpress-remote` proxy connects
to the endpoint. For Claude Code:

```bash
claude mcp add wordpress \
  --env WP_API_URL=https://example.com/wp-json/mcp/mcp-adapter-default-server \
  --env WP_API_USERNAME=your-user \
  --env WP_API_PASSWORD="xxxx xxxx xxxx xxxx xxxx xxxx" \
  -- npx -y @automattic/mcp-wordpress-remote@latest
```

### MCP over WP-CLI

On a local site, or over SSH, you can skip HTTP and run the MCP server through
WP-CLI (STDIO):

```bash
wp mcp-adapter list
wp mcp-adapter serve --server=mcp-adapter-default-server --user=admin
```

### WordPress REST API

Abilities with REST enabled are also listed by WordPress itself at
`/wp-json/wp-abilities/v1/abilities`. DinOdds' abilities are in the `dinodds`
category. This is separate from the public odds [REST endpoint](https://docs.affkraft.com/dinodds/rest-api).

***

## AI writing helpers in the editor

The official WordPress AI plugin adds writing helpers inside the Block Editor,
such as titles, excerpts and alt text. It works alongside DinOdds and is a
different thing from managing your website from a chat assistant.
