At least two civilians and five attackers died in the assaults, described as an attempt to mimic the deadly Paris attacks.
It follows warnings late last year that Islamists were planning a major attack.
IS released a statement online claiming the attacks, which it said were carried out by “soldiers of the Caliphate”, targeting “citizens of the Crusader coalition” against the group.
Jakarta Police chief Tito Karnavian said Indonesian national Bahrun Naim, currently thought to be in Syria, had been “planning this for a while”.
At the scene: BBC’s Ali Moore in Jakarta
If you didn’t know and didn’t look too closely, you could be standing near the site of today’s bombings in Jakarta and have no idea this country has just experienced its worst terror attack since 2009. Nine hours after it began, the street has been swept, the blood washed away, and the traffic is flowing.
But look closer and there’s a hole in the road where suicide bomb went off. The traffic is lighter than usual and the street food hawkers are doing a less than brisk trade, even though dozens of people are milling around, having a look – staring at the condolence flowers laid in the centre of the intersection.
Many here have been worried about the rise of IS and what that means for home-grown terror groups. Today perhaps they got the beginnings of an answer.
The assault began late morning local time, when blasts struck near a Starbucks cafe and police security post, in an area close to embassies and government buildings.
“There was lot of commotion, a lot of craziness,” said Rob Phillips, an English teacher who lives in the area.
“We heard a large bang. We thought it was thunder because the storms here are pretty big.”
Gunmen fled to the Djakarta Theater, part of the same complex that houses the Starbucks, where a standoff developed with police.
Explosions and gunfire rang out for hours before police declared the situation under control.
Bodies of the militants killed were left sprawling in the street. Police said 20 people were injured in the attacks, including five police officers.
New danger for security services, by BBC security correspondent Frank Gardner
The attack on the Indonesian capital is sadly part of a pattern that has been repeating itself in several cities around the world in recent months.
Istanbul, Paris and now Jakarta have all experienced what counter-terrorism officials classify as a “Marauding Terrorist Firearms Attack”, or MTFA for short.
In other words, police forces have had to react quickly to the sudden appearance of an unknown number of gunmen rampaging through the heart of an urban area, intent on killing as many people as possible and securing themselves maximum publicity.
The aim for the authorities in each case is to bring the situation under control as fast as possible with minimal loss of life, something that UK and other forces have been rehearsing since the disastrous Mumbai siege of 2008.
But preventing such attacks requires better intelligence and needs more effective sharing of information among the people who need to know it.
National police spokesman Anton Charliyan said the perpetrators had “imitated” the Paris attacks.
He said police had received warnings in November from IS they were planning a “concert in Indonesia”, meaning an attack.
Two of the attackers were killed in a suicide bombing, police said, with the other three killed in gun battles with police.
A Canadian and an Indonesian national, both civilians, also died.
Indonesian President Joko Widodo has called on his country not to be defeated by “these acts of terror”.
Several foreign governments advise caution while visiting Indonesia, with the UK Foreign Office urging its nationals to “maintain vigilance” after the attacks.
Islamist attacks in Indonesia
Indonesia has suffered militant attacks in the past, but has been relatively successful in curbing home-grown Islamist extremism after a spate of attacks in the last decade. Some of the deadliest include:
July 2009: Seven people killed and dozens wounded when two suicide bombers target Marriott and Ritz Carlton hotels in Jakarta
Oct 2005: Suicide attacks in Bali leave 23 dead, including the bombers
Sept 2004: Bomb outside Australian embassy in Jakarta kills at least nine people
Aug 2003: Bomb at Jakarta’s Marriott Hotel kills 12
Oct 2002: Bali bombings kill 202, including 88 Australians
Dec 2000: Church bombings across the country kill 19
IS influence in Indonesia
Indonesia was on high alert over the new year period after threats from IS.
Up to 200 Indonesians are estimated to have gone to Syria to fight with IS.
Indonesia is the world’s most populous Muslim nation but is largely secular, although in recent years the threat of radicalism has remained high as small networks of militants are still thought to be operating in the country.