Setting up swiplserver for the first time. Help needed

I can’t help with the (presumably) pyswip issue above, but I can validate that the swiplserver Python library (the Python library that uses the MQI interface that @jan mentions) works well in a Flask application. That’s how I’ve been using it.


Ok, Thank you I will modify the code to try this library.

Hello Again,
I couldn’t install this swipl. What is the correct repository link? I would appreciate if you can share…

Kind Regards,

On the prolog side you don’t have to install anything, it is included in the latest SWI-Prolog version. Make sure to use the development version (8.5.3), which has recent fixes.

I do not want to deal with building etc. now. The latest windows installer has the version Is it ok?

Kind Regards,

To be more specific, that is the stable version.

The installation, not build, for the Windows development version can be found at which is currently at 8.5.3-1.

For an even more recent Windows version, is the nightly build found at

This is also documented at

Install SWI-Prolog development version on Windows 10


How do we consult with swiplserver. I couldn’t see a sample?

Thanks in advance.

Maybe it is just me but this statement has me confused.

To me it could mean 1 of 2 different things.

To consult a Prolog source code file from the top level, see Getting started quickly

To access a page from an SWI-Prolog web server just access the page like any others.

Typically the server will run locally and use a specific port, e.g. 8080, and have an index.html page. So using your favorite web browser the URL would be http://localhost:8080/index.html

Hi Eric,
Thanks for the quick response. I am relatively new to the terminology, so I may be asking in a confusing way. Sorry for that.
What I was asking is the equivalent of prolog.consult (pl_file_name_and_path) (where prolog is type of Prolog class) in this system.

I assume I would do this with exec in python but not sure.

How about the assertz function? Cause part of (static ones) my prolog definitions are in a pl file, but for part of them (dynamic ones depending on user input), I was using the assertz function to extend the initial definitions. I do all of this stuff as a part of initializing prolog in my system. Later, I do the queries…

I would appreciate if you can provide more detailed examples on how to use the pl file and how to do the assertz with this new swiplserver in python? I think the query part is relatively more straightforward.

Kind Regards,

Hi Eric,
As I described in my initial question, my prolog code and my interaction with it via python works well without the web interface, but has problem (access violation) when accessed via web. So, I need to have a sample working not on the command line but via python and swiplserver. Unfortunately, the getting starting guide does not provide an answer to my query. I have been trying to solve this problem using only the pyswip for a while now with no result.
I understand that swiplserver package solves this problem, but I still can not understand how to use it properly. I can not find the functions that are necessary for my solution, basically assertz and consult. I am assuming query would work in a similar way pyswip. Couldn’t try it yet due to not passing the initialization phase… Hopefully you can help me to learn to use this new package?

Kind Regards,

Did you read the documentation here: swiplserver · PyPI and here: swiplserver.prologmqi API documentation?

It seems rather simple python code:

from swiplserver import PrologMQI, PrologThread

with PrologMQI() as mqi:
    with mqi.create_thread() as prolog_thread:
        result = prolog_thread.query("member(X, [color(blue), color(red)])")

EDIT: seems to me you just replace "member[X, ...]" with consult(...) or assertz(...).

After seeing links by SWI it now makes sense.

mqi is only a few months old and I have not used it yet, thus my confustion. :frowning_face:

To make the terms mqi and swiplserver easier to understand when used in a topic here have added them as linkify terms. (ref)

If you look at the use of the term in earlier replies you will see that they have all magickly turned into links. :wink:

1 Like

Thanks for the response. I tried to replace with consult now. Now I am getting the below error which seems to be related to configuration of MQServer.
I saw some
site-packages\swiplserver\", line 428, in start

raise PrologLaunchError("no port found in stdout")

swiplserver.prologmqi.PrologLaunchError: no port found in stdout

I tried to run the below command with and without the halt hoping to have a running mq server but it didn’t help.

Please tell me what I am doing wrong?

Run the folowing

$ swipl --quiet -g mqi_start -t halt -- --write_connection_values=true   

You should see some output like:


The first number is the port.

If you don’t see the numbers, there is your problem.

Hi Again,
I was thinking MQI as a self starter. However, it didn’t in my case. Getting the MQI start error port not found, I decided to execute the below command hoping to start it manually.

> os.system("swipl -s ./ -g \"mqi:install_to_library('./')\" ")

When I look at the python requirements, there is not much. I added the lib and library folders for both swi-prolog and swipl to the path. Anyway, I am not sure why I am getting this error. I am still at the step where I am trying to switch the member statement with consult (From one of the above messages).

ERROR: d:/my_project_path/python/
ERROR: source_sink library(socket)' does not exist Warning: d:/my_project_path/python/ Warning: Goal (directive) failed: mqi:use_module(library(socket)) ERROR: d:/my_project_path/python/ ERROR: source_sink library(http/json)’ does not exist
Warning: d:/my_project_path/python/
Warning: Goal (directive) failed: mqi:use_module(library(http/json))
ERROR: d:/my_project_path/python/
ERROR: source_sink library(http/json_convert)' does not exist Warning: d:/my_project_path/python/ Warning: Goal (directive) failed: mqi:use_module(library(http/json_convert)) ERROR: d:/my_project_path/python/ ERROR: source_sink library(term_to_json)’ does not exist
Warning: d:/my_project_path/python/
Warning: Goal (directive) failed: mqi:use_module(library(term_to_json))
ERROR: d:/my_project_path/python/
ERROR: source_sink library(filesex)' does not exist Warning: d:/my_project_path/python/ Warning: Goal (directive) failed: mqi:use_module(library(filesex)) ERROR: d:/my_project_path/python/ ERROR: source_sink library(time)’ does not exist
Warning: d:/my_project_path/python/
Warning: Goal (directive) failed: mqi:use_module(library(time))
ERROR: d:/my_project_path/python/
ERROR: source_sink `library(uuid)’ does not exist
Warning: d:/my_project_path/python/
Warning: Goal (directive) failed: mqi:use_module(library(uuid))
ERROR: -g mqi:install_to_library(’./’): mqi:install_to_library/1: Unknown procedure: mqi:copy_file/2

I get the below error :frowning:

ERROR: -g mqi_start: catch/3: Unknown procedure: mqi_start/0

What does

swipl --version    


SWI-Prolog version 8.3.27 for x64-win64

You have an old version. Please uninstall it first, and then install the new version from here:

Check the box “I understand” and download the binary.

Make sure to uninstall the old version first.

Then run

$ swipl --quiet -g mqi_start -t halt -- --write_connection_values=true

To make sure you are getting a port.

please erase any file that you have downloaded; start with a clean environment.

The line where I call the consult statement works now.
I am getting error in the assertz call…

    with PrologMQI(port=4242, password="debugnow") as mqi:
        with mqi.create_thread() as prolog_thread:
            for edge in selected_graph_attack_paths:
                command = "assertz(\"arc('" + edge[0] + "','" + edge[1] + "')\")"


{ “args”: [ {“args”: [“callable”, “arc(‘A’,‘1’)” ], “functor”:“type_error”} ], “functor”:“exception” }