SkillAgentSearch skills...

MKMTool

MKMTool ist a helper application I wrote for tinkering around with optimization of sale processes on magiccardmarket.eu and the idea of automisation of some tasks most people wouldn’t be able to get done by pure manpower.

Install / Use

/learn @alexander-pick/MKMTool
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Welcome to MKMTool 0.8

**IF YOU ARE UPDATING FROM A VERSION OLDER THAN: **

  • 1.12.2020: delete mkminventory.csv file in your bin folder before starting MKMTool (it will be recreated)
  • 0.8.0: do not just copy your config.xml - new variables were added to config_template.xml, keep them included in your new file. See Installation and starting off for details as well as the new Settings documentation.

Latest changes

Version 0.8.2.2, 21.1.2024

  • Added One Piece, Lorcana and Battle Spirits Saga
  • Fix failing to fetch large stocks using UseStockGetFile true - it can take a long time -> set the timeout for it to infinite.

Version 0.8.2.1, 28.11.2023

  • Fix price update failing when using ArticleCountFetched config setting of more than 100. Now still works with up to 1000, but each 100 costs 1 API call per cards -> default set to 100
  • Fix local cards database saved as corrupted file when closing MKMTool, so that local data had to be refreshed every run, using up a lot of request to fetch rarities and slowing appraisal
  • Fix foil cards being priced as non-foil
  • Fix foil cards from foil-only set not being updated

Version 0.8.2.0, 30.3.2021 Note: releasing on 29.9.2021, while API is still not fully functional. The new features were tested back in March on a professional account, it is unclear if and how they will work further on.

  • **Changed the meaning of minPrice in mystock.csv for playsets: ** before, the minPrice meant the price of the entire playset. Now, minPrice is always price of a single card, whether you sell it as a playset or not.
  • Added support for setting price by price guide, but only for commercial sellers (private sellers have access to necessary API requests blocked by Cardmarket - not MKMTool's fault). Price is specified as a simplified formula using numbers or any of the valid price guides as operands and multiplication, addition and subtraction as operators (no parenthesis). See documentation in the Price Update section for details.
  • MinPrice in myStock.csv can be defined as a formula using price guides.
  • Added "PrescribedPrice" attribute for entries in myStock.csv. It can be specified as a formula (allows using price guides). If the "best matching template" (= most columns in myStock filled with non-empty values) has a PrescribedPrice, it will be used to set the price over any algorithm set in the Update Price settings GUI. It will still use markup for multiple copies and respect max price change limits and minPrice.
  • Rearranged Update Price Settings GUI to separate settings related to traversal of other seller's stock from other settings
  • When Update Price is running (not in bot mode) you can now stop it by pressing the update price button again. See Price Update documentation for details.
  • You can now continue Price Update from where it ended last time if it did not process all your cards. Message box will ask you when pressing the Price Update button. See Price Update documentation for details.

Version 0.8.1.0, 22.2.2021

  • In order to deal with recent drop in Cardmarket's API reliability, requests that time out either on MKMTool's or Cardmarket's side are now automatically repeated (after an additional 1.5s delay) up to a MaxTimeoutRepeat times (new parameter in config.xml, default is 4). You will still receive a "request timed out" error if all repeated attempts fail.
  • Fixed/Added support for other currencies than EUR. All prices will now be fetched in the currency of your account (this was supposed to work automatically according to communication from support, but they misinformed us). Small exception: in Download Buys, the price is in the currency the purchase was made.
  • Added an ArticleCountFetched config parameter, see documentation in the Settings section. Relevant only if you are using only "expensive" countries and often get a "not enough similar items found"
  • Added Hong Kong among supported countries
  • Expansions database is now kept not just for M:tG, but for all the games you have allowed in your config.xml. Each is stored in its own file (ExpansionsDatabase\mkmexpansions_[gameID].csv), but when MKMTool works with them it concatenates those file into a single database. So modules like "check display value" will have all expansions of all your games in the expansions menu together. This can potentially lead to problems if two games have expansions with the same name, if you run into such problem, just temporarily comment out one of the games and do your work in two separate batches.
  • When using the MinPrice match "best match" method, cards that are rare or mythic now already count as already having matching template with one field (the "Minimum price of rares" settings). Previously, if you had a catch-all template in your myStock.csv file (i.e. only minPrice, no other fileds filled in), it would always take precedence to the "minimum price of rares", since it has 1 matching field (the min price). Now they both count as having one matching field, so the higher of them is chosen.
  • Fixed wordlwide search sometimes being performed even when turned off (when using the "accept better if there is at least one more expensive match" condition option)
  • Fixed sorting in Stock View for numerical columns (price, count, idProduct) to be numerical, not alphabetical.

Version 0.8.0.4, 22.1.2021

  • Fixed crashes in Wantlist editor and Check cheap deals (System.NullReferenceException exception in function InitWantList, caused by recent changes in the API)
  • Fixed the drop down lists for expansions and wanlist names multiplicating their entries every time the window is opened
  • Fixed some rare errors when updating database

Version 0.8.0.3, 13.1.2021

  • Fixed crashes in View Inventory when some of the expected columns are not there.

Version 0.8.0.2, 17.12.2020

  • Fixed crashes when sellers country code is not recognized during price update.

Version 0.8.0.1, 8.12.2020

  • Fixed MKMTool crashing when it fails in fetching similar items, now it just goes to the next one.

Version 0.8.0.0, 8.12.2020

New/improved features:

  • MKM now limits the maximum number of API requests per minute to 600. MKMTool will now automatically wait before sending next request if the limit is reached.
  • All CSV lists used by MKMTool can now also use semicolon (the character ';') as a separator. MKMTool automatically detects if your file uses ';' or ','. ';' must NOT be contained in column names.
  • Added generic configuration settings for MKMTool that can be specified in the config.xml. Documentation is in the Settings section.
  • Added setting to config.xml for choosing the CSV separator to use when exporting files (currently used in View Inventory, Price External List and Download Buys).
  • Fetching our own stock is now more efficient by using the GET STOCK FILE API request, which downloads the entire stock as a single CSV file, which MKMTool then parses. However, it does not include rarity, which we now have to cache it in the local database. See the UseStockGetFile documentation in Settings for more details.
  • View Inventory now includes the idProduct. If UseStockGetFile is set to true, it will no longer include LocName, lastEdited and inShoppingCart columns. If you need those, you will have to switch UseStockGetFile to false (this will however significantly increase the time it takes to show the inventory).
  • Local Database now stores rarity for cards you appraised/updated (see the UseStockGetFile Settings for more details). If the database is modified (some new rarity is noted), it is saved automatically to the file (mkminventory.csv) when you close MKMTool. You may notice ~2s delay when shutting MKMTool down in those cases.
  • Added "Filter expansions" to Price Update / Price External List: only cards from selected expansions will be processed.
  • Added "Filter seller countries" to Price Update / Price External List: when doing "worldwide search", only sellers from the selected countries will be taken into account. See documentation in the Price Updatesection before using this feature.
  • Added filtering by user type - private, professional and commercial - to Price Update / Price External List: only articles by sellers of the selected types will be used for price update.
  • Added an "update mode" setting which allows you to control how is minPrice from myStock.csv used (among others, this allows you to bypass the price calculation algorithm and use myStock as a way to updated prices to whatever value you set in your CSV, as long as you are increasing prices).
  • Added an "MinPriceMatching" setting to Price Update / Price External List: controls if you use the highest of all minPrice in myStock.csv that match, or the one that matches the best, i.e. has the most filled-in columns.
  • Added setting to config.xml to fake your own country.
  • When updating price, the FirstEd parameter is taken into account when looking for similar items (relevant only for Yu-Gi-Oh).
  • The "Update local database" and "View Inventory" buttons switched places.

Bug-fixes:

  • MinPrice from mystock.csv was taken into account only if no price update was computed. Now it will always be checked even just against the current price.
  • Fixed crashes when Checking for Cheap Deals by wantlist when article in wantlist had "Any" as isFoil, isSigned or isAltered.
  • Fixed View Inventory using "S/T-Chinese" as language names instead of "Simplified/Traditional Chinese" (which are the only names recognized when importing a CSV)
  • Fixed price update/upload failing when comments include characters taking up multiple bytes in UTF (â, ¢ etc.)
  • Fixed the "Accept better only if there are more expen
View on GitHub
GitHub Stars78
CategoryDevelopment
Updated2mo ago
Forks14

Languages

C#

Security Score

95/100

Audited on Jan 13, 2026

No findings