# Cria.al

Last verified: 2026-10-05

An OpenAI plugin connecting travellers to CRIA's public car-rental search in Albania.
The package uses the portable Agent Plugins format: `plugin.json` holds the listing and
review scenarios, `mcp.json` connects to `https://cria.al/mcp`, and `assets/icon.png` holds
the CRIA icon.

The server provides the workflow instructions and four read-only tools: `list_locations`,
`search_cars`, `get_car` and `check_availability`. Searches require no sign-in. Travellers
complete reservation requests and payments on cria.al.

## Upload

1. Open [OpenAI Platform Plugins](https://platform.openai.com/plugins), select the owning
   organization and project, and choose **Upload new or existing plugin**. If CRIA already
   has a draft or published plugin, upload to that existing plugin.
2. Select the verified developer identity and upload `cria-car-rental-1.0.3.zip`.
3. Inspect **Metadata & Skills** and **MCPs**. Connect `https://cria.al/mcp` with no
   authentication and complete the domain-verification challenge displayed by the portal.
4. Run the five positive and three negative scenarios from the manifest in a connected
   ChatGPT conversation. The prompts use relative future dates so the rental window remains
   usable; vehicle availability and prices can change between runs.
5. The walkthrough video is `extensions.com.openai.review.demo_recording_url` in the manifest;
   the portal reads it only from the package. No reviewer account is needed for this public MCP.
6. Confirm the developer identity, commerce declaration, country availability and policy
   attestations in the dashboard, resolve required findings, and submit the draft for review.
   After approval, publish the approved version when ready.

Upload validation and publication approval are separate steps. The package declares commerce
because it supports a rental-booking handoff to cria.al. The selected verified identity
determines the public publisher name. Country availability is configured in the dashboard.

## Rebuild the ZIP

Run from this package directory. The archive contains one plugin folder and only the four
listed public package files.

```sh
python3 - <<'PY'
import json
from pathlib import Path
from zipfile import ZIP_DEFLATED, ZipFile

root = Path.cwd()
manifest = json.loads((root / "plugin.json").read_text())
output = root.parent / "dist" / f"{manifest['name']}-{manifest['version']}.zip"
output.parent.mkdir(parents=True, exist_ok=True)
with ZipFile(output, "w", compression=ZIP_DEFLATED) as archive:
    for name in ("plugin.json", "mcp.json", "assets/icon.png", "README.md"):
        archive.write(root / name, f"{manifest['name']}/{name}")
print(output)
PY
```

Update the manifest version when uploading a changed package. Keep credentials, local
configuration and application source out of the ZIP.

Format and submission references:
[Package your plugin](https://developers.openai.com/plugins/build/plugins) and
[Upload and submit your plugin](https://developers.openai.com/plugins/deploy/submission).
