This project aims to match the content of DAT's like those provided by TOSEC and No-Intro to metadata provided by various vendors (IGDB only at present), to simplify identifying ROMs and other images when adding to ROM managers such as Hasheous's sister project Gaseous (https://github.com/gaseous-project/gaseous-server)
Hasheous is hosted at https://hasheous.org/
- Supports TOSEC, MAME, MESS, Redump, and No-Intro
- Matches to the following metadata sources:
- IGDB
- VIMMS Lair Manual Project (provides scans of game manuals)
- Proxies the following metadata sources:
- IGDB
- Provides an API for developers to submit fixes to data matching
- Includes a hosted MCP endpoint in the Hasheous API for AI-assisted database queries
- Supports supporter recognition through linked OpenCollective accounts
- Supports profile-driven API rate limiting with hot-reloaded rules
- Is completely free to use
Join our Discord server: https://discord.gg/Nhu7wpT3k4
- MariaDB 11.1.2 or greater
- This is the database version Hasheous has been tested and developed against. Your mileage may vary with earlier versions.
- Internet Game Database API Key. See: https://api-docs.igdb.com/#account-creation
The following projects are used by Hasheous
- https://dotnet.microsoft.com/en-us/apps/aspnet
- https://github.com/JamesNK/Newtonsoft.Json
- https://www.nuget.org/packages/MySql.Data/8.0.32.1
- https://github.com/kamranayub/igdb-dotnet
When Hasheous-Server is started for the first time, it creates a configuration file at ~/.hasheous-server/config.json if it doesn't exist. Some values can be filled in using environment variables (such as in the case of using docker).
Rate limiter rules are stored separately at ~/.hasheous-server/rate-limit-rules.json and are reloaded automatically every 5 minutes. See Rate Limiting.
| Attribute | Environment Variable |
|---|---|
| HostName | dbhost |
| UserName | dbuser |
| Password | dbpass |
| Attribute | Environment Variable |
|---|---|
| ClientId | igdbclientid |
| Secret. | igdbclientsecret |
| Attribute | Environment Variable |
|---|---|
| OpenCollectiveClientId | opencollectiveclientid |
| OpenCollectiveClientSecret | opencollectiveclientsecret |
| OpenCollectiveApiToken | opencollectiveapitoken |
| OpenCollectiveCollectiveSlug | opencollectivecollectiveslug |
When configuring OpenCollective OAuth linking, use this callback URL:
https://<your-hasheous-host>/signin-opencollective
{
"DatabaseConfiguration": {
"HostName": "localhost",
"UserName": "hasheous",
"Password": "hasheous",
"DatabaseName": "hasheous",
"Port": 3306
},
"IGDBConfiguration": {
"ClientId": "<clientid>",
"Secret": "<secret>"
},
"SupporterRecognitionConfiguration": {
"OpenCollectiveClientId": "<clientid>",
"OpenCollectiveClientSecret": "<clientsecret>",
"OpenCollectiveApiToken": "<apitoken>",
"OpenCollectiveCollectiveSlug": "hasheous",
"ActiveContributionDays": 30
},
"LoggingConfiguration": {
"DebugLogging": false,
"LogRetention": 7
}
}Supporter recognition is documented in Support Recognition.
Active supporters receive the Supporter role when their linked OpenCollective account has made a payment within the last 30 days.
Dockerfile and docker-compose-build.yml files have been provided to make deployment of the server as easy as possible.
- Clone the repo with
git clone https://github.com/gaseous-project/hasheous.git - Change into the hasheous directory
- Open the docker-compose--build.yml file and edit the igdbclientid and igdbclientsecret to the values retrieved from your IGDB account
- Run the command
docker-compose --file docker-compose-build.yml up -d - Connect to the host on port 7157
Full MCP documentation: MCP
Hasheous includes a hosted MCP JSON-RPC endpoint at:
POST /api/v1/Mcp
This endpoint is public and does not require authentication.
Discovery manifest:
GET /.well-known/mcp.json
Hasheous CLI still supports local stdio MCP mode:
dotnet run --project hasheous-cli -- mcpCurrently exposed MCP tools:
hasheous_search_games(search by game name + optional platform, includes ROM/hash data)hasheous_get_game_details(full details for a specific game id)hasheous_lookup_hashes(find matching games by CRC/MD5/SHA1/SHA256)
Rate limiting is documented in Rate Limiting.
Highlights:
- rules are defined in
~/.hasheous-server/rate-limit-rules.json - rules are hot-reloaded every 5 minutes
- built-in webpage traffic is automatically exempt
- profiles can match on roles, origin, user agent, remote IP, and arbitrary headers
Currently supported DAT's:
- TOSEC: https://www.tosecdev.org/downloads/category/56-2023-01-23
- MAME Arcade and MAME Mess: https://www.progettosnaps.net/dats/MAME
- Redump: https://redump.info
- No-Intro: https://no-intro.org
If there are other DAT's you'd like to see support for, please raise an issue with a link to the DAT's.
- Download the DAT files from the source website. For example; from https://www.tosecdev.org/downloads/category/56-2023-01-23
- Extract the archive
- Copy the DAT files to
~/.hasheous-server/Data/Signatures/TOSEC/
- Download the DAT files from the source website. For example; from https://www.progettosnaps.net/dats/MAME
- Extract the archive
- Copy the file name
MAME 0.257 (arcade).datfiles to~/.hasheous-server/Data/Signatures/MAME Arcade/
- Download the DAT files from the source website. For example; from https://www.progettosnaps.net/dats/MAME
- Extract the archive
- Copy the file name
MAME 0.257 (mess).datfiles to~/.hasheous-server/Data/Signatures/MAME MESS/
- Download the DAT files from the source website. For example; from https://redump.info/downloads/
- Copy the DAT files to
~/.hasheous-server/Data/Signatures/Redump/
- Download the DAT files from the source website. For example; from https://datomatic.no-intro.org/index.php?page=download&op=daily&s=64
- Set
TypetoStandard DATand click Request - Extract the archive and copy the
*.datfiles from the./No-Introdirectory to~/.hasheous-server/Data/Signatures/NoIntro/DAT - Download the DB files from the source website.
- Set
TypetoDBand click Request - Extract the archive and copy the
*.xmlfiles from the./No-Introdirectory to~/.hasheous-server/Data/Signatures/NoIntro/DB